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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-2766-but-with-wasm — CVE-2026-2766, 하지만 wasm 사용 | Kitploit
도구/GitHubGitHub/sneakynachos/cve-2026-2766-but-with-wasm
Vulnerability AnalysisExploitationShellcodePayload DevelopmentBinary Exploitation
GitHubsneakynachos/cve-2026-2766-but-with-wasm

CVE-2026-2766-but-with-wasm

CVE-2026-2766, 하지만 wasm 사용

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
1111개월 전아직 검토되지 않음
공유

CVE-2026-2766, 하지만 wasm을 사용한

상태: 검증된 크래시 PoC, 제어 흐름 하이재킹 시연 완료 (디버그 셸에서 크래시 pc = 해제된 셀 포이즌 0xcdcdcdcdcdcdcdcd — 엔진이 해제된 ICScript에서 읽어낸 포인터로 점프함). 남은 작업: 재점유된 바이트를 제어하는 것. research/README.md 참조.

2026년 버그에 대한 WasmBlazeFox 계열 체인: CVE-2026-2766, "JavaScript Engine의 JIT 오컴파일 / use-after-free: JIT 컴포넌트", Firefox 148에서 수정됨 (MFSA 2026-13). 최종 목표는 CVE-2024-29943-but-with-wasm과 동일하다: 프리미티브를 코드 포인터 제어로 전환하고, 셸코드 상수로 가득 찬 WASM JIT 페이지를 겨냥하는 것.

근본 원인

Mozilla 자체의 회귀 테스트 주석(bug 2013583, 테스트는 hg 457b68097f81에 랜딩됨)과 js/src/jit/JitScript.h의 ICScript Lifetimes SMDOC에서:

  • Ion 시험 인라이닝 중, 다형 호출 사이트 전환이 removeInlinedChild를 호출 → 자식의 ICScript가 에서 제거되지만, 여전히 의 벡터에 의해 참조됨 — 그리고 치명적으로, 호출자의 IC 체인에 여전히 남아 있는 오래된 스텁에 의해 참조됨.
inlinedChildren_
InliningRoot
inlinedScripts_
CallInlinedFunction
  • 컴팩팅 GC(gczeal(14, 1), 즉 매 할당마다 ZealCompactValue)가 고아가 된 ICScript를 이동/대피시키는 동안 오래된 스텁 체인은 이전 주소를 유지함.
  • 오래된 스텁을 통한 다음 호출이 오래된 ICScript 포인터를 역참조 → use-after-move. ASAN/퍼징 빌드에서 해제된 셀은 0xe5로 포이즌되어 매우 읽기 쉬운 크래시를 제공함.
  • 크래시 증거

    취약 빌드: mozilla-central rev b3663be61a1a (2026-01-15 나이틀리; 수정은 2026-01-15와 2026-02-09 사이에 랜딩됨 — 2월 9일 나이틀리는 생존함). 셸: 해당 rev의 Taskcluster linux64-fuzzing-asan-opt jsshell (gczeal에 필요; 릴리스-opt 셸에는 없음).

    root@kitploit:~
    ./js --ion-warmup-threshold=100000 poc.js
    
    == ERROR: AddressSanitizer: SEGV on unknown address 0xe5e5e5e5e5e5e5e5
       The signal is caused by a READ memory access.
       #0-#3 <unknown module>          <- baseline JIT code
       #4 EnterJit / MaybeEnterJit     <- js/src/jit/Jit.cpp
       #10 js::jit::DoCallFallback     <- BaselineIC.cpp (the stale IC chain)
       rdi = 0xe5e5e5e5e5e5e5e5        <- the freed ICScript
    

    역참조는 오래된 스텁 체인을 순회하는 baseline JIT 코드에서 발생함: 재점유된 셀의 제어 = baseline이 신뢰하는 ICEntry/스텁 필드의 제어, 여기에는 점프하는 스텁 코드 포인터도 포함됨.

    익스플로잇 계획 (진행 중)

    root@kitploit:~
    orphaned ICScript (this PoC)
      -> compacting GC moves it; stale chain keeps old address
        -> reclaim the old cell with controlled bytes (size-class spray)
          -> baseline reads fake ICEntry -> fake ICStub -> fake code_ pointer
            -> jump into the WASM JIT page shellcode (f64.const immediates,
               FuncExport entry-offset overwrite — see the 2024-29943 repo)
    

    전체 무기화 로그는 research/README.md를 참조. 현재 상황 요약:

    • 이 버그는 malloc된(TrailingArray) ICScript에 대한 use-after-move — 원칙적으로 크기 클래스별 버퍼로 스프레이-재점유 가능함.
    • 해제와 사용은 최종 new Ctor(flag) 호출 내부에서 마이크로초 간격으로 발생하며, 그 사이에 JS 콜백 지점이 없음; 순진한 스프레이는 윈도우를 놓치거나(reclaim1/2) zeal GC 폭풍으로 IC 상태를 쓸어버림(reclaim3). 오래된 체인은 단일 일반 gc()는 견딤(purge_check).
    • 다음 단계는 gdb 하에서의 엔진 할당 분석(해제와 사용 사이에 어떤 할당이 해제된 셀에 들어가는지). gdb는 OrbStack의 x86 에뮬레이션에서 작동하지 않으므로 네이티브 Linux x86-64 박스가 필요함.

    WASM 단계 자체는 이미 CVE-2024-29943-but-with-wasm에서 구축되고 시연됨; 이 FF149 시대 빌드에 맞춰 객체 모델 오프셋만 다시 도출하면 됨.

    파일

    • poc.js — Mozilla의 회귀 테스트(bug 2013583), 위에 표시된 대로 2026-01-15 ASAN jsshell을 크래시시키는 것으로 검증됨.

    참고 자료

    • 권고: MFSA 2026-13 (Firefox 148)
    • 버그: https://bugzilla.mozilla.org/show_bug.cgi?id=2013583 (제한됨)
    • 테스트 랜딩: hg 457b68097f81
    • 형제 체인: https://github.com/SneakyNachos/CVE-2024-29943-but-with-wasm 및 https://github.com/SneakyNachos/CVE-2026-2764-but-with-wasm
    • 기법 기원: https://github.com/SneakyNachos/WasmBlazeFox
    도구 다운로드