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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/borahll/cve-2021-21220
Vulnerability AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & EducationBinary Exploitation
GitHubborahll/cve-2021-21220

CVE-2021-21220

CVE-2021-21220의 익스플로잇을 자세히 설명하는 교육용 프레젠테이션으로, WebAssembly를 통한 OOB 액세스 및 RCE로 이어지는 V8 JIT 유형 혼동과 완화 분석을 다룹니다.

저장소 보기
24개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-21220 악용

잘못된 JIT 동작에서 원격 코드 실행까지

개요

이 발표는 Google Chrome의 V8 JavaScript 엔진에서 잘못된 JIT 컴파일러 최적화 가정으로 인해 발생한 취약점인 CVE-2021-21220의 악용을 설명합니다.

이 발표에서는 다음을 다룹니다:

  • V8이 JIT(Just-In-Time) 컴파일을 수행하는 방식
  • 최적화 과정에서 부호 있는/부호 없는 유형 혼동 버그가 나타나는 방식
  • 해당 버그가 OOB(Out-of-Bounds, 경계를 벗어난) 배열 프리미티브로 이어지는 방식
  • 공격자가 OOB 접근을 활용해 주소를 유출하고 임의 메모리 쓰기를 달성하는 방법
  • WebAssembly(Wasm)가 네이티브 코드 실행의 대상이 되는 방식
  • 기존 완화 조치와 최신 브라우저 방어 기법

발표 목표

이 발표의 목표는 최신 JavaScript 엔진 내부의 미묘한 최적화 오류가 다음과 같은 심각한 문제로 확대될 수 있음을 보여주는 것입니다:

  • 메모리 손상
  • 임의 읽기/쓰기 프리미티브
  • 네이티브 코드 수정
  • 잠재적 RCE(원격 코드 실행)

이 악용 체인은 JIT 엔진이 성능과 보안 사이에서 균형을 맞추는 방식과, 잘못된 최적화 가정이 어떻게 악용 가능해질 수 있는지를 강조합니다.


다루는 주제

1. V8 아키텍처

이 발표는 V8의 주요 구성 요소를 소개합니다:

Ignition 인터프리터

  • JavaScript 바이트코드 실행
  • 런타임 피드백 수집
  • 피드백 벡터에 유형 정보 저장
  • TurboFan 최적화 컴파일러

    • 런타임 피드백으로부터 최적화 그래프 구축
    • 추측적 가정과 가드 삽입
    • 공격적인 최적화 패스 수행

    머신 코드 백엔드

    • 네이티브 CPU 명령어 생성
    • "핫(hot)" 함수를 위한 최적화된 머신 코드 생성

    발표의 아키텍처 다이어그램은 JavaScript가 다음과 같이 전환되는 과정을 보여줍니다:

    root@kitploit:~
    Parsing → Bytecode → Optimization → Execution
    

    2. JavaScript를 최적화하기 어려운 이유

    JavaScript는 고성능 실행이 까다로운 언어입니다. 그 이유는:

    • 변수의 유형이 동적으로 변경됨
    • 배열의 구조와 요소 유형이 변경됨
    • + 같은 연산자가 여러 의미를 가질 수 있음
    • 런타임 검사 비용이 높음

    V8은 런타임 동작을 추측하여 일반적인 실행 패턴을 최적화하기 위해 JIT 컴파일을 사용합니다.


    3. CVE-2021-21220의 근본 원인

    이 취약점은 JIT 최적화 과정에서 발생하는 부호 있는 정수와 부호 없는 정수의 불일치에서 비롯됩니다.

    설명된 주요 개념:

    • Uint32Array
    • Word32Xor
    • 잘못된 유형 전파
    • ChangeInt32ToInt64
    • 잘못된 어셈블리 명령 선택

    악용 코드는 다음 값을 남용합니다:

    root@kitploit:~
    0x80000000
    

    이 값은 32비트 정수의 부호 비트를 설정합니다.


    4. 최적화 불일치

    이 취약점은 TurboFan이 다음 코드를 최적화하기 때문에 발생합니다:

    root@kitploit:~
    x ^ 0
    

    이를 완전히 제거해 버립니다.

    이 최적화 과정에서:

    • XOR 연산이 사라짐
    • 유형 정보가 손실됨
    • 부호 있는 값이 부호 없는 값으로 해석됨
    • JIT 동작이 인터프리터 동작과 달라짐

    그 결과 잘못된 머신 코드가 생성되고 공격자가 제어할 수 있는 값이 발생합니다.


    5. OOB 프리미티브 구축

    이 악용은 잘못된 JIT 결과를 배열 동작 제어로 변환합니다.

    이 발표에서는 다음을 시연합니다:

    1. 잘못된 최적화 정수 값
    2. 제어 변수 i로의 변환
    3. 워밍업(warmup)과 트리거 실행 간의 불일치
    4. Array.shift() 길이 언더플로
    5. OOB 가능 배열 생성

    제시된 중요한 악용 개념:

    • 워밍업 최적화
    • 추측적 최적화
    • 유형 혼동
    • 배열 길이 손상

    6. 경계를 벗어난 접근 (Out-of-Bounds)

    배열 길이가 -1이 되면 공격자는 다음을 획득합니다:

    • 경계를 벗어난 읽기
    • 경계를 벗어난 쓰기
    • 인접한 V8 힙 객체에 대한 접근

    그런 다음 악용 코드는 다음을 시연합니다:

    • 포인터 유출
    • 객체 주소 발견
    • 배열 겹침
    • 원시 V8 포인터 추출

    7. WebAssembly 남용

    이 발표는 공격자가 다음을 대상으로 삼을 수 있는 방법을 설명합니다:

    • WebAssembly 컴파일 코드 페이지
    • V8이 생성한 네이티브 실행 메모리

    공격 흐름:

    1. Wasm 함수 생성
    2. 실행 가능한 메모리 위치 찾기
    3. 컴파일된 머신 코드 덮어쓰기
    4. Wasm 재실행
    5. 임의 네이티브 실행 달성

    이는 JavaScript 엔진 버그가 프로세스 수준의 코드 실행으로 전환될 수 있음을 보여줍니다.


    방어 및 완화 조치

    마지막 섹션에서는 최신 브라우저 방어 기법을 다룹니다:

    압축 포인터 (Compressed Pointers)

    직접적인 포인터 노출과 힙 예측 가능성을 줄입니다.

    포인터 간접 참조 (Pointer Indirection)

    원시 메모리 주소에 대한 직접 접근을 방지합니다.

    힙 샌드박싱 (Heap Sandboxing)

    메모리 영역을 격리하고 악용 영향을 줄입니다.

    W^X (Write XOR Execute)

    페이지가 동시에 쓰기 및 실행 가능 상태가 되는 것을 방지합니다.

    또한 이 발표에는 부호 확장 문제를 수정한 실제 V8 패치 diff가 포함되어 있습니다.


    주요 시사점

    이 발표는 다음을 보여줍니다:

    • 작은 최적화 오류가 치명적인 취약점이 될 수 있음
    • JIT 컴파일러가 공격 표면의 복잡성을 크게 증가시킴
    • 런타임 추측이 위험한 불일치를 유발할 수 있음
    • WebAssembly가 악용 환경을 변화시킴
    • 최신 브라우저에는 다층 방어가 필요함

    논의된 기술

    • JavaScript
    • Google V8 엔진
    • TurboFan
    • Ignition
    • WebAssembly (Wasm)
    • JIT 컴파일
    • 메모리 손상
    • 경계를 벗어난 접근 (Out-of-Bounds)
    • 브라우저 악용

    교육 목적

    이 자료는 다음 용도로만 엄격히 사용해야 합니다:

    • 보안 연구
    • 교육용 시연
    • 브라우저 내부 구조 학습
    • 취약점 분석

    소유하지 않았거나 테스트 권한이 없는 시스템에 이 정보를 사용하지 마십시오.


    참고 자료

    • CVE-2021-21220
    • Google Chrome V8 엔진
    • TurboFan 컴파일러 내부 구조
    • WebAssembly 런타임 보안
    • https://www.zerodayinitiative.com/blog/2021/12/15/exploitation-of-cve-2021-21220-from-incorrect-jit-behavior-to-rce
    • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
    • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
    도구 다운로드