
Reproduziert und analysiert CVE-2026-3494, eine Umgehung der Audit-Protokollierung im MariaDB-server_audit-Plugin, unter Verwendung von Docker-basierten Multi-Versionstests, um das Protokollierungsverhalten über verwundbare und gepatchte Versionen hinweg zu vergleichen.
Dieses Projekt bietet eine spezialisierte Umgebung zur Verifizierung und Analyse eines potenziellen Audit-Logging-Bypasses im MariaDB-server_audit-Plugin, wenn bestimmte Inline-Kommentare (#, --) innerhalb von SQL-Abfragen verwendet werden.
SET PASSWORD mit Kommentaren oder Error 1046-Fälle) in MariaDB v11.8.6 nicht im Audit-Log erfasst werden, obwohl diese Version zuvor als gepatcht galt.#) dazu führen könnten, dass DCL-Anweisungen vom Auditor unsachgemäß verarbeitet oder ignoriert werden.server_audit mit Filtern wie QUERY_DCL, QUERY_DDL und QUERY_DML aktiviert ist, können bestimmte Abfragen mit Inline-Kommentaren den Logging-Mechanismus umgehen.Die folgende Matrix fasst das beobachtete Logging-Verhalten während der Tests zusammen:
[MariaDB 10.3.39 / 11.8.5]
- CASE #1, #2A, #2B, #3, #4 → Alle PROTOKOLLIERT (Normales Verhalten)
[MariaDB 11.8.6 (Zielversion)]
- CASE #2B (Error 1046) → NICHT PROTOKOLLIERT (Logging-Auslassung) ❗
- CASE #3 (Kommentiertes SET PASSWORD) → NICHT PROTOKOLLIERT (Logging-Auslassung) ❗
- CASE #1, #2A, #4 → PROTOKOLLIERT (Normales Verhalten)
Dieses Projekt verwendet Docker Compose, um drei isolierte MariaDB-Instanzen auszuführen:
| Version | Port | Status | Beschreibung |
|---|---|---|---|
| MariaDB 10.3.39 | 3306 | Verwundbar | Verifizierung der alten stabilen Version |
| MariaDB 11.8.5 | 3307 | Verwundbar | Verifizierung der neuesten verwundbaren Version |
| MariaDB 11.8.6 | 3308 | Ziel | Bewertung der aktuellen Audit-Logging-Änderungen |
Erstellen und starten Sie die MariaDB-Container. Die Umgebung konfiguriert automatisch das server_audit-Plugin und initialisiert Testbenutzer.
# Container erstellen und starten
docker compose up --build -d
# Container-Status überprüfen
docker ps
Installieren Sie die erforderlichen Python-Abhängigkeiten:
pip install pymysql
Das Skript kann aus jedem Verzeichnis innerhalb des Projekts ausgeführt werden.
python poc/poc.py
Der PoC führt 5 verschiedene Szenarien durch:
SET PASSWORD-Befehl mit eingebettetem #-Kommentar (Bypass-Prüfung).SELECT-Anweisung mit eingebettetem #-Kommentar (Bypass-Prüfung).PROTOKOLLIERT: Die Abfrage wurde erfolgreich im Audit-Log erfasst.NICHT PROTOKOLLIERT: Die Abfrage wurde aus dem Log ausgelassen (Potenzieller Bypass oder Regression).>> Tatsächliches Log: Zeigt den rohen Eintrag aus server_audit.log in Blau an, um die Integrität der erfassten Anweisung zu verifizieren.Nachfolgend sind die tatsächlichen Ausführungs-Logs aufgeführt, die den Unterschied zwischen dem erwarteten Verhalten (11.8.5) und der Logging-Auslassung (11.8.6) zeigen.
[+] TEST_CASE_2_B_ERROR_1046
Ergebnis: PROTOKOLLIERT
>> Tatsächliches Log: | 20260504 04:45:05,...,QUERY,mysql,'SELECT * FROM user',1046
[+] TEST_CASE_3_COMMENT_SET_PASSWORD
Ergebnis: PROTOKOLLIERT
>> Tatsächliches Log: | 20260504 04:45:07,...,QUERY,mysql,'SET PASSWORD # CVE-2026-3494 Test ...',1133
[+] TEST_CASE_2_B_ERROR_1046 (No database selected)
Ergebnis: NICHT PROTOKOLLIERT <-- Auslassung erkannt
[+] TEST_CASE_3_COMMENT_SET_PASSWORD (Inline-Kommentar #)
Ergebnis: NICHT PROTOKOLLIERT <-- Auslassung erkannt
[!TIP] Für die vollständige Terminal-Ausgabe aller Testfälle und Versionen siehe Vollständiges Ausführungs-Log.
.
├── config/ # MariaDB server_audit-Konfiguration
├── init/ # Initialisierungsskripte (Benutzer- & Plugin-Einrichtung)
├── logs/ # Audit-Log-Volume-Mounts
├── poc/
│ └── poc.py # Automatisiertes Verifizierungsskript
├── results/
│ └── full_execution_log.md # Detaillierte Terminal-Ausgabe-Logs
├── docker-compose.yml # Multi-Versionen-Umgebungsdefinition
└── README.md # Projektdokumentation (Aktuelle Datei)
Dieses Projekt dient ausschließlich Bildungs- und Sicherheitsforschungszwecken. Verwenden Sie es verantwortungsbewusst und wenden Sie diese Konfigurationen nicht ohne gründliche Tests auf Produktionsumgebungen an.