Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-9999-exploit — Chrome의 ANGLE/Metal WebGL 백엔드에서 CVE-2026-9999를 겨냥한 개념 증명(PoC) 및 GLSL 퍼저로, 빌드 핑거프린팅, 선별된 셰이더, 크래시 아티팩트 캡처 기능을 포함합니다. | Kitploit
도구/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
Vulnerability AnalysisExploitationWeb SecurityFuzzing
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Chrome의 ANGLE/Metal WebGL 백엔드에서 CVE-2026-9999를 겨냥한 개념 증명(PoC) 및 GLSL 퍼저로, 빌드 핑거프린팅, 선별된 셰이더, 크래시 아티팩트 캡처 기능을 포함합니다.

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
7일 전아직 검토되지 않음

CVE-2026-9999 — Chrome ANGLE/Metal WebGL PoC 헌팅 하네스 (macOS)


1. 취약점 요약

필드값
CVECVE-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]
CWECWE-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에 포함되지 않는 별도의 샌드박스 탈출이 추가로 필요합니다.


2. 전략 및 가설 (분석가 자체 평가 — 미확정으로 간주)

다음은 공개 기록에서 추론한 내용이며 확인된 사실이 아닙니다:

  • ANGLE은 Chrome이 WebGL GLSL을 플랫폼 그래픽 API로 변환하는 데 사용하는 엔진입니다 — macOS에서는 Metal로 변환합니다. "조작된 HTML 페이지" [1]가 ANGLE에 도달한다는 것은 거의 확실히 WebGL 콘텐츠를 의미합니다 — 즉, Metal 백엔드가 처리하는 공격자 제어 셰이더 및/또는 WebGL 상태입니다.
  • CWE-269(부적절한 권한 관리) [1]와 샌드박스 내 영향이 결합된 점은 ANGLE/GPU 계층이 셰이더 변환 또는 상태 검증 중에 공격자가 제어하는 무언가를 제대로 제한하지 못했음을 시사합니다.
  • 역사적으로 이 구성 요소는 GLSL 변환기의 엣지 케이스(경계를 벗어난 상수 인덱싱, 정수 오버플로 배열 크기 지정, swizzle/discard 상호작용, 과도한 크기의 유니폼 블록, 루프 언롤링 폭주)를 통해 메모리 안전 버그를 발생시켜 왔습니다.

따라서 하네스는 정확히 이러한 패턴을 실행한 후 GLSL을 대규모로 변형하여 렌더러 측 크래시(WebGL 컨텍스트 손실 = GPU 프로세스 크래시 또는 워치독 종료)를 찾습니다.


3. 저장소 구성

파일용도
cve-2026-9999-poc.html자체 포함 PoC 하네스(의존성 없음): 빌드 핑거프린팅, 선별된 변환기 스트레스 셰이더 8개, 크래시 아티팩트 캡처가 포함된 GLSL 퍼저
README.md이 파일

4. 요구 사항

  • 의도적으로 크래시시킬 권한이 있는 macOS 머신 또는 Metal 지원 VM. 이 CVE는 macOS 전용 [1]입니다. Windows/Linux에서 테스트하면 취약한 ANGLE Metal 백엔드가 실행되지 않습니다.
  • Chrome 빌드 < 148.0.7778.216 [1] (§5 참조).
  • 하드웨어 GPU / Metal 지원. 없으면 Chrome은 SwiftShader(소프트웨어 렌더링)로 대체되고 취약한 경로에 도달하지 않습니다 — §5.4 확인 항목 참조.
  • Python 3(선택 사항, §5.1의 버전 조회 헬퍼와 로컬 HTTP 서버에만 필요).

5. 환경 설정

5.1 방법 A — Chrome for Testing (권장)

Google의 Chrome for Testing 아카이브는 자동 업데이트되지 않는 버전 고정 빌드를 제공합니다. 가장 최신 취약 빌드를 찾으세요(148.0.7778.216 미만의 모든 빌드가 영향을 받습니다 [1]):

root@kitploit:~
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)에 맞게 다운로드하세요:

root@kitploit:~
# 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 아님)에 압축을 풀고 그곳에서 실행하세요.

5.2 방법 B — Chromium 스냅샷

특정 빌드가 Chrome for Testing에 없는 경우 Chromium 스냅샷 아카이브(commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ — Intel, .../Mac_Arm/ — Apple Silicon)를 사용하세요. 커밋 위치로 인덱싱되며, chromium-history를 통해 취약 버전을 브랜치 위치로 매핑한 후 가장 가까운 스냅샷을 받으세요. 스냅샷도 자동 업데이트되지 않습니다.

5.3 자동 업데이트 차단 (다른 소스의 브랜드 빌드를 사용하는 경우에만)

Keystone 업데이터 에이전트를 종료하고 googleupdate.googleapis.com을 차단하세요. 그렇지 않으면 테스트 빌드가 밤사이 조용히 자체 패치됩니다. Chrome for Testing 빌드에는 필요 없습니다.

5.4 Metal 백엔드 사용 확인 (중요)

Metal이 없으면 Chrome은 WebGL을 소프트웨어(SwiftShader)로 렌더링하며 ANGLE Metal 백엔드는 전혀 실행되지 않습니다. PoC 페이지의 콘솔에서 다음을 실행하세요:

root@kitploit:~
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로 대체됩니다.


6. 재현 단계

  1. 대상을 격리하세요. VM 스냅샷 또는 전용 macOS 계정. 취약 빌드에서는 절대 로그인하거나 동기화를 활성화하지 마세요. 설계상 손상된 것으로 간주하세요. (이 CVE의 영향은 웹 페이지 방문만으로 발생하는 샌드박스 내 코드 실행입니다 [1].)
  2. 취약 빌드를 설치하고 §5.4가 통과하는지 확인하세요.
  3. PoC를 서빙하세요 (파일을 직접 열거나 다음을 사용):
    root@kitploit:~
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. 로드 시 출력되는 핑거프린트 줄을 확인하세요. 빌드가 148.0.7778.216 미만으로 보고되고 따라서 잠재적으로 취약함을 나타내야 합니다 [1]. 패치된 빌드에서는 하네스가 경고하므로 시간을 낭비하지 않습니다.
  5. 1) Run curated triggers를 클릭하세요. 8개의 셰이더가 §2에 설명된 변환기 패턴(경계를 벗어난 상수 인덱싱, 정수 오버플로 배열 크기 지정, 동적 행렬 인덱싱, 루프 언롤 스트레스, 배열의 배열, discard/swizzle, 전처리기 엣지 케이스, 과도한 크기의 UBO)을 스트레스 테스트합니다. [!!] 결과와 컨텍스트 손실 이벤트를 주시하세요.
  6. 2) Fuzz를 클릭하세요. 변형된 GLSL 셰이더가 루프에서 컴파일, 링크, 드로우, 읽기 백됩니다. 로그에서 CONTEXT LOST를 주시하세요.
  7. 크래시 발생 시, 문제의 셰이더가 localStorage에 저장됩니다. 다음과 같이 검색하세요:
    root@kitploit:~
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    
  8. 크래시 셰이더를 단독으로 최소화하고 재테스트하여(5회 이상 연속 실행) 결정성을 확인하세요.
  9. 근본 원인을 ASAN 빌드로 확인한 후에만 CVE-2026-9999에 귀속하세요 — §8 참조.

의심스러운 실행의 실시간 스냅샷은 chrome://gpu와 macOS 콘솔(GPU 프로세스 크래시 리포트)에서도 볼 수 있습니다.


7. 결과 해석 / 알려진 오탐

  • WEBGL_context_lost ≠ 취약점. Chrome의 GPU 워치독은 오래 실행되는 셰이더를 종료합니다(loop-unroll-dos 트리거와 큰 루프 횟수의 퍼즈 반복은 의도적으로 느리게 설계되었습니다). 노이즈를 줄이려면 SH_ITER를 줄이거나, 후보 크래시가 빠르게(반복당 < 1초) 재현되는지 확인하세요.
  • 실제 메모리 안전 크래시는 최소화된 셰이더에서 결정적으로 재현되어야 하며, 워치독 종료가 아닌 콘솔에서 뚜렷한 크래시 시그니처(예: EXC_BAD_ACCESS)를 보여야 합니다.
  • ANGLE Metal 백엔드를 지목하는 ASAN 리포트만이 관련 없는 드라이버 문제가 아닌 이 버그를 발견했다는 확실한 증거입니다.

8. 근본 원인 확인: ASAN 빌드 (선택 사항이지만 강력히 권장)

AddressSanitizer로 취약한 Chromium 리비전을 빌드하세요:

root@kitploit:~
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 검증을 활성화한 상태로 최소화된 크래시 셰이더를 실행하세요:

root@kitploit:~
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하여 실제 근본 원인을 파악하고 퍼징 접근 방식을 결정적 트리거로 교체하세요.)


9. 제한 사항

  • 공개된 근본 원인이나 PoC가 없습니다. Chromium 이슈는 제한되어 있습니다("권한 필요") [1]. 이 하네스는 가설 기반입니다.
  • 알려진 실제 악용이 없습니다. CISA의 SSVC 보강(2026-05-29)은 exploitation: none을 기록합니다 [1].
  • 샌드박스 내 영향만 해당 [1] — 이 PoC는 코드 실행을 생성하더라도 실제 공격 체인의 샌드박스 프로세스 단계만 다룹니다.
  • macOS 전용 대상 [1]. 다른 플랫폼에서의 실행 결과로 결론을 내리지 마세요.

10. 안전 및 법적 고지

소유한 머신 또는 명시적으로 테스트 권한을 부여받은 머신에서만 테스트하세요. 이 하네스는 의도적으로 적대적 셰이더를 컴파일하여 그래픽 프로세스를 크래시시키므로 GPU 프로세스 종료가 발생할 것으로 예상하세요. 취약 브라우저 빌드를 프로덕션 네트워크에서 멀리 유지하세요.


11. 참고 자료

[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

도구 다운로드