
Chrome의 ANGLE/Metal WebGL 백엔드에서 CVE-2026-9999를 겨냥한 개념 증명(PoC) 및 GLSL 퍼저로, 빌드 핑거프린팅, 선별된 셰이더, 크래시 아티팩트 캡처 기능을 포함합니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2026-9999 |
| 공급업체 / 제품 | Google Chrome |
| 영향 범위 | Chrome < 148.0.7778.216, macOS 전용 [1] |
| 수정 버전 | 148.0.7778.216 [1] |
| 영향 | 조작된 HTML 페이지를 통한 샌드박스 내 임의 코드 실행 [1] |
| Chromium 심각도 | 높음 [1] |
| CVSS 3.1 (CISA-ADP) | 8.8 HIGH — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1] |
| NVD (NIST) CVSS 평가 | 아직 제공되지 않음 [1] |
| CWE | CWE-269 — 부적절한 권한 관리 (CISA-ADP 보강) [1] |
| CISA SSVC (2026-05-29) | exploitation: none, automatable: no, technicalImpact: total [1] |
| 게시 / 마지막 수정 | 2026-05-28 / 2026-07-21 [1] |
| 근본 원인 | 비공개 — Chromium 이슈 513364480는 "권한 필요"로 표시됨 [1] |
공격 체인 영향: "샌드박스 내" 코드 실행 [1]은 공격자가 샌드박스 처리된 프로세스(가장 유력한 것은 GPU 프로세스)를 제어할 수 있음을 의미합니다. 전체 브라우저 장악에는 이 CVE에 포함되지 않는 별도의 샌드박스 탈출이 추가로 필요합니다.
다음은 공개 기록에서 추론한 내용이며 확인된 사실이 아닙니다:
따라서 하네스는 정확히 이러한 패턴을 실행한 후 GLSL을 대규모로 변형하여 렌더러 측 크래시(WebGL 컨텍스트 손실 = GPU 프로세스 크래시 또는 워치독 종료)를 찾습니다.
| 파일 | 용도 |
|---|---|
cve-2026-9999-poc.html | 자체 포함 PoC 하네스(의존성 없음): 빌드 핑거프린팅, 선별된 변환기 스트레스 셰이더 8개, 크래시 아티팩트 캡처가 포함된 GLSL 퍼저 |
README.md | 이 파일 |
Google의 Chrome for Testing 아카이브는 자동 업데이트되지 않는 버전 고정 빌드를 제공합니다. 가장 최신 취약 빌드를 찾으세요(148.0.7778.216 미만의 모든 빌드가 영향을 받습니다 [1]):
import json, urllib.request
data = json.load(urllib.request.urlopen(
"https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"))
key = lambda v: tuple(int(x) for x in v.split('.'))
fix = (148, 0, 7778, 216)
cands = sorted((v["version"] for v in data["versions"]
if "chrome" in v.get("downloads", {}) and key(v["version"]) < fix), key=key)
print(cands[-5:]) # pick the last (newest vulnerable) entry
아키텍처(uname -m)에 맞게 다운로드하세요:
# Apple Silicon
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-arm64/chrome-mac-arm64.zip
# Intel
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-x64/chrome-mac-x64.zip
랩 폴더(예: ~/lab/, /Applications 아님)에 압축을 풀고 그곳에서 실행하세요.
특정 빌드가 Chrome for Testing에 없는 경우 Chromium 스냅샷 아카이브(commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ — Intel, .../Mac_Arm/ — Apple Silicon)를 사용하세요. 커밋 위치로 인덱싱되며, chromium-history를 통해 취약 버전을 브랜치 위치로 매핑한 후 가장 가까운 스냅샷을 받으세요. 스냅샷도 자동 업데이트되지 않습니다.
Keystone 업데이터 에이전트를 종료하고 googleupdate.googleapis.com을 차단하세요. 그렇지 않으면 테스트 빌드가 밤사이 조용히 자체 패치됩니다. Chrome for Testing 빌드에는 필요 없습니다.
Metal이 없으면 Chrome은 WebGL을 소프트웨어(SwiftShader)로 렌더링하며 ANGLE Metal 백엔드는 전혀 실행되지 않습니다. PoC 페이지의 콘솔에서 다음을 실행하세요:
const c = document.createElement('canvas'), g = c.getContext('webgl2');
const x = g.getExtension('WEBGL_debug_renderer_info');
console.log(g.getParameter(x.UNMASKED_RENDERER_WEBGL));
// Good: contains "ANGLE Metal Renderer"
// Bad: contains "SwiftShader" -> the vulnerable path is NOT being exercised
chrome://gpu에서도 확인할 수 있습니다. GPU 가상화가 있는 Parallels/VMware Fusion 게스트는 일반적으로 작동하지만, 최소 구성의 QEMU/UTM 설정은 종종 SwiftShader로 대체됩니다.
cd <repo dir>
python3 -m http.server 8000
# then browse to http://localhost:8000/cve-2026-9999-poc.html
1) Run curated triggers를 클릭하세요. 8개의 셰이더가 §2에 설명된 변환기 패턴(경계를 벗어난 상수 인덱싱, 정수 오버플로 배열 크기 지정, 동적 행렬 인덱싱, 루프 언롤 스트레스, 배열의 배열, discard/swizzle, 전처리기 엣지 케이스, 과도한 크기의 UBO)을 스트레스 테스트합니다. [!!] 결과와 컨텍스트 손실 이벤트를 주시하세요.2) Fuzz를 클릭하세요. 변형된 GLSL 셰이더가 루프에서 컴파일, 링크, 드로우, 읽기 백됩니다. 로그에서 CONTEXT LOST를 주시하세요.localStorage에 저장됩니다. 다음과 같이 검색하세요:
localStorage.getItem("cve20269999_poc_fs"); // crashing fragment shader
localStorage.getItem("cve20269999_crashes"); // crash event log
의심스러운 실행의 실시간 스냅샷은
chrome://gpu와 macOS 콘솔(GPU 프로세스 크래시 리포트)에서도 볼 수 있습니다.
WEBGL_context_lost ≠ 취약점. Chrome의 GPU 워치독은 오래 실행되는 셰이더를 종료합니다(loop-unroll-dos 트리거와 큰 루프 횟수의 퍼즈 반복은 의도적으로 느리게 설계되었습니다). 노이즈를 줄이려면 SH_ITER를 줄이거나, 후보 크래시가 빠르게(반복당 < 1초) 재현되는지 확인하세요.EXC_BAD_ACCESS)를 보여야 합니다.AddressSanitizer로 취약한 Chromium 리비전을 빌드하세요:
fetch chromium
cd src
git checkout tags/148.0.7778.215 # last tag before the fix
gn gen out/asan --args='is_asan=true is_debug=false symbol_level=1 dcheck_always_on=true'
autoninja -C out/asan chrome
그런 다음 Metal API 검증을 활성화한 상태로 최소화된 크래시 셰이더를 실행하세요:
MTL_DEBUG_LAYER=1 out/asan/Chromium.app/Contents/MacOS/Chromium poc.html
ASAN 트레이스는 정확한 ANGLE/Metal 함수를 지목하며 크래시가 CVE의 구성 요소 [1]와 일치하는지 확인해 줍니다.
(후속 작업: 148.0.7778.216의 수정 커밋이 공개되면 third_party/angle/src/libANGLE/renderer/metal/을 diff하여 실제 근본 원인을 파악하고 퍼징 접근 방식을 결정적 트리거로 교체하세요.)
exploitation: none을 기록합니다 [1].소유한 머신 또는 명시적으로 테스트 권한을 부여받은 머신에서만 테스트하세요. 이 하네스는 의도적으로 적대적 셰이더를 컴파일하여 그래픽 프로세스를 크래시시키므로 GPU 프로세스 종료가 발생할 것으로 예상하세요. 취약 브라우저 빌드를 프로덕션 네트워크에서 멀리 유지하세요.
[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * 공급업체 권고(Chrome Releases 블로그, Stable Channel 업데이트): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Chromium 이슈 513364480 (접근 제한): https://issues.chromium.org/issues/513364480