CVE-2026-87438 (Google Chrome WebGL 경계 밖 쓰기) 분석

분류: CVE · 브라우저 · RCE · CVE-2026-87438 · [표준]

브라우저는 신뢰할 수 없는 웹페이지를 샌드박스라는 격리 상자 안에서 실행합니다. 그 상자 안에서 그래픽을 그리는 WebGL 코드가 경계 밖으로 한 번 잘못 쓰면, 상자 자체가 깨질 수 있습니다. 이번 취약점은 조작된 HTML 페이지 하나로 Chrome의 WebGL에서 메모리 경계 밖 쓰기를 일으켜, 샌드박스 바깥에서 임의 코드 실행으로 이어질 수 있는 결함으로 보고됐습니다.

개요

CVE-2026-87438은 Google Chrome의 WebGL 컴포넌트에서 발생하는 경계 밖 쓰기(out-of-bounds write)입니다. CVE 서술문 기준으로는 Android용 Chrome이 153.0.8010.36 미만일 때, 원격 공격자가 조작된 HTML 페이지를 통해 샌드박스 외부에서 임의 코드를 실행할 수 있다고 되어 있습니다. Chromium 보안 심각도는 Critical로 표기됩니다.

  • 영향 범위: 153.0.8010.36 미만 전 버전. ⚠️미확인 — 집계 사이트(OpenCVE)·NVD 파생 스니펫 기준이며, 팩트체커가 NVD 본문·Chrome 릴리스 공지 원문에서 대조해야 합니다.
  • 수정 버전: 153.0.8010.36(플랫폼에 따라 153.0.8010.36/.37). ⚠️미확인 — 리서치 재료 기준, 1차 공지(Chrome Releases 블로그) 본문은 로드에 실패해 교차 확인되지 않았습니다.
  • CWE: CWE-787 (Out-of-Bounds Write). ⚠️미확인 — 집계 사이트 기준, NVD 대조 대상.
  • CVSS: 3.1 기준 9.6 (Critical), 벡터 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H. ⚠️미확인 — OpenCVE·Ubuntu Security 기준이며 NVD 벡터와 대조가 필요합니다. S:C(Scope Changed)는 “GPU/렌더러 프로세스 경계를 넘는다”는 서술과는 정합적입니다.
  • 선행조건: 무인증(pre-auth, PR:N), 원격이되 사용자 상호작용 필요(UI:R — 조작된 HTML 페이지를 여는 행위).
  • “Android 한정” 여부: ⚠️미확인 — 특히 재확인 필요. 공식 CVE 서술문은 “Chrome on Android”라고 명시하는데, 수정은 데스크톱(Windows/macOS/Linux)에도 배포됐습니다. Android에서만 트리거되는 것인지, 서술 관례상의 표기인지는 1차출처로 다시 확인해야 합니다.
  • 악용 관측(KEV/EPSS): 리서치 재료 기준 KEV 미등재, EPSS 1% 미만 — 즉 이 CVE는 실환경 악용(in-the-wild)으로 보고된 건이 아닙니다. ⚠️미확인.

★혼동 주의 (독자·팩트체커 필독): 같은 Chrome 153 배치에서 실제로 악용된 제로데이는 CVE-2026-87438이 아니라 CVE-2026-87491(V8 엔진, 샌드박스 “내부”, Medium 등급)입니다. 헤드라인 기사 제목의 “Chrome 제로데이”는 87491을 가리킵니다. 본건(87438)은 같은 릴리스에 함께 묶여 수정된 별개의 WebGL Critical이며, 제로데이가 아닙니다. 두 CVE를 섞지 마세요. ⚠️미확인 — 이 구분은 독립 분석 여러 건이 일치하나 1차 공지 대조가 남아 있습니다.

한 줄 요약: “렌더러 안에서 도는 그래픽 코드가 버퍼 경계 밖으로 쓰면, 그 한 번의 잘못된 쓰기가 샌드박스라는 마지막 방벽을 넘는 발판이 될 수 있다.”

기술 배경 — 샌드박스와 WebGL이라는 넓은 공격면

현대 브라우저는 다중 프로세스 + 샌드박스 구조로 신뢰할 수 없는 코드를 격리합니다. 웹페이지의 자바스크립트·렌더링은 권한이 제한된 렌더러 프로세스 안에서 돌고, 파일·네트워크 같은 실제 자원 접근은 권한 있는 브라우저 프로세스가 중개합니다. 렌더러에서 버그가 나도 그것만으로는 시스템을 장악하기 어렵게 만드는 이중 방벽입니다. 그래서 공격자에게 가치가 큰 버그는 이 샌드박스 경계를 넘는 종류입니다.

WebGL(Web Graphics Library)은 웹페이지가 GPU 가속 3D 그래픽을 그리도록 해주는 브라우저 API입니다. 성능을 위해 네이티브 그래픽 스택(브라우저 내부에서는 ANGLE 등)과 저수준 버퍼를 다루는데, 이 과정에서 웹페이지가 넘긴 값(정점 개수·버퍼 크기·인덱스 등)이 실제 메모리 할당과 어긋나면 경계를 벗어난 접근이 생길 수 있습니다. 넓고 복잡한 데다 신뢰할 수 없는 입력을 직접 받는 코드라, WebGL은 오래도록 브라우저 메모리 취약점의 단골 무대였습니다.

경계 밖 쓰기(CWE-787)는 프로그램이 할당된 버퍼의 끝을 넘어 데이터를 쓰는 결함입니다. 인접 메모리의 포인터·길이·객체 메타데이터를 덮어쓸 수 있어, 잘 다루면 읽기 전용 정보 유출을 넘어 제어 흐름 탈취까지 이어질 수 있습니다. 그래서 같은 메모리 버그라도 경계 밖 “쓰기”는 통상 “읽기”보다 위험하게 평가됩니다.

CVE 분석 요약 — 어느 지점이 문제인가

⚠️중요 제약 — 취약 코드의 위치가 공개되지 않았습니다. 이 버그의 Chromium 이슈(내부 추적 번호)는 다수 사용자가 업데이트를 받을 때까지 접근이 제한(로그인 필요·본문 비공개)되어 있고, 공개 Gerrit 패치(CL)나 커밋 SHA가 노출되지 않았습니다. Chromium이 오픈소스이긴 하지만, 이 특정 버그의 취약 함수·파일 경로·패치 전 부모 SHA를 정직하게 제시할 근거가 현재 없습니다. 따라서 이 글은 코드 라인·diff를 인용하지 않으며, 파일 경로를 추측으로 지정하지 않습니다(지어내지 않습니다). 아래는 공개된 CVE 서술과 결함 유형(경계 밖 쓰기)에서 도출한 일반적 성격의 설명이며, 이 CVE의 실제 소스 인용이 아닙니다.

공개 서술이 확인해 주는 것은 다음뿐입니다(그 이상은 ⚠️미확인).

  • 컴포넌트: WebGL. 결함 유형은 경계 밖 쓰기.
  • 트리거: 조작된 HTML 페이지. 즉 피해자가 악성 페이지를 열도록 유도하는 것으로 조건이 성립합니다(UI:R).
  • 결과 서술: 샌드박스 외부에서의 임의 코드 실행. 통상적인 렌더러 내부 버그보다 한 단계 위의 영향으로, S:C(Scope Changed) 평가와 정합적입니다.

경계 밖 쓰기가 코드 실행으로 이어지는 일반적 경로는, 잘못된 크기·인덱스 계산으로 버퍼 끝을 넘어선 위치에 값을 기록하고, 그 위치에 놓인 인접 객체의 포인터나 길이 필드가 오염되면서 이후 그 값을 신뢰하는 코드가 공격자 통제하의 메모리를 다루게 되는 흐름입니다. 다만 이 CVE에서 정확히 어떤 계산이 어긋났고 어떤 구조체가 오염되는지는 비공개이므로, 위 서술은 유형 일반론이지 이 버그의 확정된 인과가 아닙니다(우리 분석·추정, 팩트로 제시하지 않음).

이 글은 그 성격상 개념용 의사코드조차 이 CVE의 실제 로직을 반영한다고 주장할 수 없어 코드 예시를 넣지 않습니다. 경계 밖 쓰기라는 유형을 이해하는 것으로 충분하며, 구체 코드는 버그 공개가 풀린 뒤 심층판에서 다룰 수 있습니다.

패치(요지, ⚠️미확인): 리서치 재료 기준 수정은 안정 채널 153.0.8010.36(플랫폼에 따라 .37)에 포함된 것으로 보이나, 공개 diff가 없어 무엇을 어떻게 고쳤는지는 확인할 수 없습니다. 경계 밖 쓰기의 통상적 수정은 쓰기 이전에 크기·인덱스 경계 검사를 추가하거나, 신뢰할 수 없는 값으로 계산한 오프셋을 안전하게 제한(clamp)하는 방향이지만, 이는 유형 일반론이며 이 CVE의 실제 패치라고 단정하지 않습니다.

공격 시나리오 · 영향도 + 대응방안

공격 시나리오 (단계 압축, 완성형 페이로드 없음):

  1. 공격자가 WebGL을 악용하도록 조작된 HTML 페이지를 준비하고, 피해자가 그 페이지를 열도록 유도합니다(악성·침해된 사이트, 링크, 광고 등). 로그인은 필요 없습니다.
  2. 피해자의 취약 버전 Chrome이 그 페이지의 WebGL 코드를 처리하다 버퍼 경계 밖으로 쓰기가 발생합니다.
  3. 이 경계 밖 쓰기를 발판으로, 서술상 샌드박스 외부에서 임의 코드 실행에 이를 수 있습니다. 실제로 안정적 익스플로잇을 만들려면 추가 조건(메모리 배치 제어 등)이 필요하며, 그 구체 내용은 이 글의 범위가 아닙니다(무해화).

영향도: 서술된 최악의 결과는 원격 공격자가 조작된 페이지 한 장으로 샌드박스 바깥에서 코드를 실행하는 것으로, 브라우저 격리를 넘는 만큼 심각합니다(CVSS 기밀성·무결성·가용성 모두 High, Scope Changed). 다만 조건으로 사용자 상호작용(악성 페이지 열람)이 필요하고(UI:R), 리서치 범위에서는 실환경 악용이 보고되지 않았습니다(KEV 미등재·EPSS 1% 미만, ⚠️미확인). 또한 “Android 한정” 서술의 정확한 의미가 아직 미확인이므로(위 개요 참조), 데스크톱 사용자에게도 동일 조건으로 성립하는지는 팩트체크로 확정해야 합니다.

대응방안:

  1. 근본: Chrome을 최신 안정 버전으로 업데이트합니다. 리서치 재료 기준 안전 버전은 153.0.8010.36 이상으로 보이나(⚠️미확인·재확인 필요), 업데이트 전 벤더 공지(Chrome Releases)에서 자신의 플랫폼(Android/Windows/macOS/Linux)에 맞는 정확한 안전 버전을 확인하는 것이 안전합니다. Chrome은 대개 자동 갱신되므로, 브라우저를 완전히 종료·재시작해 갱신을 적용하는 것이 핵심입니다.
  2. 차선(즉시 업데이트 불가 시):
    • 조직 환경에서는 관리 정책으로 최신 채널 강제 업데이트를 밀어붙이고, 갱신 적용을 위한 재시작을 유도합니다.
    • 위험이 높은 환경이라면, 패치 적용 전까지 신뢰할 수 없는 사이트에서 WebGL/하드웨어 가속 사용을 제한하는 것을 검토할 수 있습니다. 다만 WebGL 비활성은 정상 기능에 영향을 주므로 임시·한정 조치입니다.
    • 알려지지 않은 링크·광고를 통한 드라이브바이(방문만으로 트리거) 경로를 줄이도록, 광고·스크립트 차단과 위험 사이트 접근 통제를 병행합니다.
  3. 탐지 관점: 조직 차원에서는 취약 버전 Chrome이 남아 있는 단말을 인벤토리로 식별하고 갱신 완료를 확인합니다. 네트워크 측에서 브라우저 렌더러의 비정상 크래시·자식 프로세스 생성 등 익스플로잇 후행 신호를 EDR로 모니터링하는 것이 실질적입니다. (개별 WebGL 익스플로잇 자체의 시그니처 기반 탐지는 신뢰도가 낮습니다.)

결론

WebGL은 웹에 GPU의 성능을 열어주었고, 그 대가로 신뢰할 수 없는 입력을 저수준 메모리 코드에 곧장 밀어 넣는 넓은 문을 만들었습니다. 그 문에서 경계 밖으로 한 번 잘못 쓰면, 샌드박스라는 마지막 방벽까지 시험대에 오릅니다.

이 부류의 사고가 반복되는 이유는 구조적입니다. 브라우저의 그래픽 스택은 성능을 위해 신뢰할 수 없는 값(크기·인덱스·버퍼 길이)을 직접 저수준 메모리 연산에 사용하는데, 그 값과 실제 할당이 어긋나는 순간 경계 밖 접근이 생기고, 그중 “쓰기”는 인접 메모리를 오염시켜 제어 흐름 탈취로 이어질 수 있기 때문입니다. 샌드박스는 이런 렌더러 버그를 봉쇄하려는 방벽이지만, 이번처럼 경계를 넘는 쓰기는 그 방벽 자체를 공략 대상으로 삼습니다. 이 결함은 우리가 다룬 다른 경계 밖 쓰기(CWE-787)·브라우저 메모리 안전 계열과 같은 뿌리를 공유합니다. 방어의 정석은 사용자에게는 빠른 업데이트와 재시작, 벤더에게는 신뢰할 수 없는 입력에 대한 철저한 경계 검사와 메모리 안전 언어로의 점진적 이전입니다. 이 한 버그는 업데이트로 닫히겠지만, “신뢰할 수 없는 입력이 저수준 메모리를 만지는 넓은 표면”이라는 조건은 다음 그래픽 기능, 다음 파서에서 또 시험대에 오릅니다. 그래서 우리는 도구가 아니라 방법을 남깁니다.

References / 참고자료

  1. NVD, “CVE-2026-87438 Detail” — 이 글이 재구성한 1차 정본(취약점 설명·CWE·영향/수정 버전). 리서치 단계에서 본문 로드에 실패해 미획득, 팩트체크 재확인 대상. https://nvd.nist.gov/vuln/detail/CVE-2026-87438
  2. OpenCVE, “CVE-2026-87438 Vulnerability Details” — 서술·CWE-787·CVSS 9.6·수정 버전·레퍼런스 교차 확인(NVD 파생 미러). https://app.opencve.io/cve/CVE-2026-87438
  3. Ubuntu Security, “CVE-2026-87438” — CVSS·발행일·패키지 정보 교차 확인. https://ubuntu.com/security/CVE-2026-87438
  4. The Hacker News, “Chrome V8 Zero-Day Exploited in the Wild” — Chrome 153 배치 CVE 목록 및 실제 제로데이(87491)와 본건(87438)의 구분 확인. https://thehackernews.com/2026/09/chrome-v8-zero-day-exploited-in-wild.html
  5. GBHackers, “Google Chrome 153 Released With 230 Security Fixes” — 87438=WebGL 경계 밖 쓰기·Critical 확인. https://gbhackers.com/google-chrome-153-released-with-230-security-fixes/
  6. CybersecurityNews, “Chrome 153 Patches 230 Vulnerabilities, Including One 0-Day” — Critical 목록·제로데이=87491 확인. https://cybersecuritynews.com/chrome-153-released/
  7. Chrome Releases 블로그(1차, 본문 추출 실패·참조용) — OpenCVE가 인용한 벤더 안정 채널 공지. https://chromereleases.googleblog.com/

이 글은 위 원 자료를 우리 관점에서 다시 쓰고 논평을 더한 것입니다. 특정 문장·코드를 그대로 옮기지 않았으며, 자세한 재현 절차는 원문을 참고하세요. 이 버그의 Chromium 이슈는 접근 제한 상태이고 공개 패치 커밋(SHA·diff)이 없어, 코드 인용·파일/라인 단정을 하지 않았습니다(지어내지 않음). ⚠️미확인 표시가 붙은 사실 주장(특히 영향/수정 버전·CWE·CVSS 벡터·“Android 한정” 여부·근본원인·제보자/바운티)은 발행 전 독립 팩트체크로 1차출처 대조가 끝나야 확정됩니다. 혼동 주의: 같은 Chrome 153 릴리스에서 실제로 악용된 제로데이는 CVE-2026-87491(V8, 샌드박스 내부, Medium)로 본건과 별개입니다.