
Воспроизводит и анализирует CVE-2026-3494 — обход аудиторского журналирования в плагине server_audit MariaDB, используя многовариантное тестирование на основе Docker для сравнения поведения журналирования в уязвимых и исправленных версиях.
Этот проект предоставляет специализированную среду для проверки и анализа потенциального обхода журналирования аудита в плагине server_audit MariaDB при использовании определённых встроенных комментариев (#, --) в SQL-запросах.
SET PASSWORD с комментариями или случаи Error 1046) не записываются в журнал аудита в MariaDB v11.8.6, которая ранее считалась исправленной версией.#) могут приводить к некорректной обработке или игнорированию DCL-операторов аудитором.server_audit включён с такими фильтрами, как QUERY_DCL, QUERY_DDL и QUERY_DML, некоторые запросы, содержащие встроенные комментарии, могут обходить механизм журналирования.Следующая матрица обобщает наблюдаемое поведение журналирования во время тестирования:
[MariaDB 10.3.39 / 11.8.5]
- CASE #1, #2A, #2B, #3, #4 → Все ЗАЛОГИРОВАНЫ (нормальное поведение)
[MariaDB 11.8.6 (целевая версия)]
- CASE #2B (Error 1046) → НЕ ЗАЛОГИРОВАН (пропуск журналирования) ❗
- CASE #3 (SET PASSWORD с комментарием) → НЕ ЗАЛОГИРОВАН (пропуск журналирования) ❗
- CASE #1, #2A, #4 → ЗАЛОГИРОВАНЫ (нормальное поведение)
Этот проект использует 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 # Документация проекта (текущий файл)
Этот проект предназначен только для образовательных целей и исследований в области безопасности. Используйте его ответственно и не применяйте эти конфигурации в производственных средах без тщательного тестирования.