
CVE-2026-3494를 재현하고 분석하며, MariaDB server_audit 플러그인의 감사 로깅 우회(audit logging bypass)를 Docker 기반 다중 버전 테스트를 통해 취약한 버전과 패치된 버전 간의 로깅 동작을 비교합니다.
이 프로젝트는 MariaDB server_audit 플러그인에서 SQL 쿼리 내 특정 인라인 주석(#, --)이 사용될 때 발생할 수 있는 감사 로깅 우회를 검증하고 분석하기 위한 특수 환경을 제공합니다.
SET PASSWORD 또는 Error 1046 케이스)가 감사 로그에 기록되지 않는 현상이 관찰되었습니다. 해당 버전은 이전에 패치된 버전으로 간주되었습니다.#)으로 인해 DCL 문이 감사기에 의해 부적절하게 처리되거나 무시될 수 있습니다.server_audit가 QUERY_DCL, QUERY_DDL, QUERY_DML과 같은 필터로 활성화된 경우, 인라인 주석이 포함된 특정 쿼리가 로깅 메커니즘을 우회할 수 있습니다.다음 매트릭스는 테스트 중 관찰된 로깅 동작을 요약합니다:
[MariaDB 10.3.39 / 11.8.5]
- CASE #1, #2A, #2B, #3, #4 → 모두 LOGGED (정상 동작)
[MariaDB 11.8.6 (대상 버전)]
- CASE #2B (Error 1046) → NOT LOGGED (로깅 누락) ❗
- CASE #3 (주석 처리된 SET PASSWORD) → NOT LOGGED (로깅 누락) ❗
- CASE #1, #2A, #4 → LOGGED (정상 동작)
이 프로젝트는 Docker Compose를 활용하여 세 개의 격리된 MariaDB 인스턴스를 실행합니다:
| 버전 | 포트 | 상태 | 설명 |
|---|---|---|---|
| MariaDB 10.3.39 | 3306 | 취약 | 레거시 안정 버전 검증 |
| MariaDB 11.8.5 | 3307 | 취약 | 최신 취약 버전 검증 |
| MariaDB 11.8.6 | 3308 | 대상 | 최근 감사 로깅 변경 사항 평가 |
MariaDB 컨테이너를 빌드하고 시작합니다. 환경은 server_audit 플러그인을 자동으로 구성하고 테스트 사용자를 초기화합니다.
# 컨테이너 빌드 및 시작
docker compose up --build -d
# 컨테이너 상태 확인
docker ps
필요한 Python 종속성을 설치합니다:
pip install pymysql
스크립트는 프로젝트 내 어떤 디렉토리에서든 실행할 수 있습니다.
python poc/poc.py
PoC는 5가지 시나리오를 수행합니다:
# 주석이 포함된 SET PASSWORD 명령 (우회 확인).# 주석이 포함된 SELECT 문 (우회 확인).LOGGED: 쿼리가 감사 로그에 성공적으로 기록됨.NOT LOGGED: 쿼리가 로그에서 누락됨 (잠재적 우회 또는 회귀).>> Actual Log: 기록된 문의 무결성을 검증하기 위해 server_audit.log의 원본 항목을 파란색으로 표시.다음은 예상 동작(11.8.5)과 로깅 누락(11.8.6)의 차이를 보여주는 실제 실행 로그입니다.
[+] TEST_CASE_2_B_ERROR_1046
Result: LOGGED
>> Actual Log: | 20260504 04:45:05,...,QUERY,mysql,'SELECT * FROM user',1046
[+] TEST_CASE_3_COMMENT_SET_PASSWORD
Result: LOGGED
>> Actual Log: | 20260504 04:45:07,...,QUERY,mysql,'SET PASSWORD # CVE-2026-3494 Test ...',1133
[+] TEST_CASE_2_B_ERROR_1046 (No database selected)
Result: NOT LOGGED <-- 누락 감지
[+] TEST_CASE_3_COMMENT_SET_PASSWORD (Inline Comment #)
Result: NOT LOGGED <-- 누락 감지
[!TIP] 모든 테스트 케이스와 버전의 전체 터미널 출력은 전체 실행 로그를 참조하세요.
.
├── config/ # MariaDB server_audit 구성
├── init/ # 초기화 스크립트 (사용자 및 플러그인 설정)
├── logs/ # 감사 로그 볼륨 마운트
├── poc/
│ └── poc.py # 자동화된 검증 스크립트
├── results/
│ └── full_execution_log.md # 상세 터미널 출력 로그
├── docker-compose.yml # 다중 버전 환경 정의
└── README.md # 프로젝트 문서 (현재 파일)
이 프로젝트는 교육 및 보안 연구 목적으로만 제공됩니다. 책임감 있게 사용하고, 철저한 테스트 없이 프로덕션 환경에 이러한 구성을 적용하지 마십시오.