Skip to content

Latest commit

 

History

History
313 lines (257 loc) · 13.8 KB

File metadata and controls

313 lines (257 loc) · 13.8 KB

Chrome Android Autofill use-after-free sandbox escape (CVE-2026-15113)

메타데이터

항목 내용
CVE ID CVE-2026-15113
영향 제품 Google Chrome on Android 150.0.7871.115 미만
영향 컴포넌트 Autofill
CVSS v3.1 9.6 (Critical) - AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
공개일 2026-07-08
수정 버전 Chrome 150.0.7871.114/.115 계열
Chromium bug 520540744 (현재 접근 제한)
CWE CWE-416: Use After Free
악용 상태 NVD/CISA-ADP 기준 공개 악용 없음

개요

CVE-2026-15113은 Google Chrome on Android의 Autofill 컴포넌트에서 발생한 use-after-free 취약점이다. NVD 설명에 따르면, Android용 Chrome 150.0.7871.115 미만에서 조작된 HTML 페이지를 통해 원격 공격자가 sandbox escape로 이어질 수 있는 취약점이다. Chrome 릴리스 노트는 이 취약점을 High severity의 Autofill use-after-free로 분류하고, 관련 Chromium issue를 520540744로 연결했다.

이 취약점의 세부 bug와 패치 diff는 아직 제한되어 있다. 하지만 Autofill은 공개 Chromium 문서가 충분히 설명하는 구조를 가진다. renderer가 DOM에서 form을 추출하고, browser process가 프로필/카드 데이터와 UI 결정을 관리하며, Android에서는 플랫폼 UI와 WebView/Chrome 특화 경로가 얹힌다. 이처럼 여러 프로세스와 프레임, 비동기 이벤트가 같은 form/field 상태를 주고받는 구조에서는 객체 수명 불변식이 매우 중요하다. CVE-2026-15113은 그 수명 관리가 어긋났을 때 Autofill 같은 편의 기능도 브라우저 보안 경계에 직접 영향을 줄 수 있음을 보여준다.

사전 지식

Autofill은 단순 자동 입력이 아니라 renderer-browser 협업 기능이다

웹 페이지의 form element는 renderer process의 Blink DOM 안에 있다. 반면 저장된 주소, 결제 정보, 프로필 데이터, 권한 판단, UI 표시 같은 민감한 결정은 browser process 쪽에 있다. Chromium의 Autofill README는 모든 Autofill 흐름이 AutofillAgent가 DOM에서 form을 추출하는 데서 시작된다고 설명한다.

Renderer process
  DOM / Blink
  ┌──────────────────┐
  │ AutofillAgent    │  frame마다 1개
  └────────┬─────────┘
           │ FormData / FormFieldData 이벤트
           ▼
Browser process
  ┌───────────────────────┐
  │ ContentAutofillDriver │  RenderFrameHost마다 1개
  └────────┬──────────────┘
           ▼
  ┌───────────────────────┐
  │ AutofillManager       │  Autofill orchestration
  └────────┬──────────────┘
           ▼
  ┌───────────────────────┐
  │ BrowserAutofillManager│  Chrome 특화 로직
  └───────────────────────┘

이 분리는 보안상 필수다. renderer는 공격자 HTML과 JavaScript를 처리하므로 가장 위험한 프로세스다. browser process는 더 높은 권한을 가지며, 사용자 프로필 데이터와 OS 통합 UI에 접근한다. 따라서 renderer에서 온 form 정보는 신뢰할 수 없는 입력으로 취급되어야 하고, browser process의 객체 수명은 renderer 이벤트 순서에 의해 깨지지 않아야 한다.

FormData와 FormFieldData는 DOM 객체의 스냅샷에 가깝다

Autofill 문서는 renderer와 browser 사이에서 주로 구조적 정보를 교환한다고 설명한다. FormData는 HTML form 속성과 FormFieldData 목록을 담고, FormFieldData는 field 속성, 현재 값, renderer process 안에서 변하지 않는 식별자인 global_id()를 가진다.

DOM 원본
  <form>
    <input name="email">
    <input name="address">
  </form>
        │
        ▼ AutofillAgent가 추출
FormData
  ├─ FormFieldData(email, FieldGlobalId A)
  └─ FormFieldData(address, FieldGlobalId B)
        │
        ▼ browser process로 전달
FormStructure
  ├─ AutofillField(email + 분류 메타데이터)
  └─ AutofillField(address + 분류 메타데이터)

중요한 점은 DOM이 계속 변한다는 것이다. 공격자 페이지는 JavaScript로 field를 추가/삭제하고, focus를 바꾸고, iframe을 탐색시키고, form submission과 UI 이벤트를 교차시킬 수 있다. Autofill 코드는 이 움직이는 DOM을 고정된 C++ 객체 그래프와 비동기 IPC 이벤트로 다루어야 한다.

Android에서는 플랫폼 UI와 브라우저 경계가 더 복잡하다

Chromium 문서는 Android에서 UI가 다르고, Chrome for Android와 Android WebView가 AutofillManager 계층을 공유하면서도 Android 특화 client/manager를 사용할 수 있다고 설명한다. Chrome on Android의 Autofill은 다음 세 세계를 연결한다.

공격자 제어 웹 페이지
  DOM, input, focus, iframe, navigation
        │
        ▼
Chromium renderer/browser Autofill
  FormData, FormStructure, popup/suggestion, profile data
        │
        ▼
Android/Chrome UI
  터치 이벤트, 키보드, credential/address suggestion, OS 통합

데스크톱보다 Android에서 중요한 차이는 사용자의 터치와 가상 키보드, 플랫폼 Autofill/Password Manager UI가 웹 페이지 레이아웃과 밀접하게 결합된다는 점이다. Autofill suggestion을 띄우는 순간, 어떤 field가 여전히 살아 있는지, 어떤 frame이 현재 focus를 소유하는지, 어떤 WebContents가 아직 같은 문서인지가 모두 보안 조건이 된다.

Use-after-free는 객체 수명 불변식의 실패다

use-after-free는 해제된 객체를 나중에 다시 사용하는 버그다. C++ 브라우저 코드에서는 참조 포인터, callback, observer, 비동기 task, IPC 메시지가 얽히면 쉽게 발생한다.

정상 수명

  create object
      │
      ├─ use
      ├─ use
      └─ destroy
             └─ 이후 접근 없음

취약 수명

  create object
      │
      ├─ raw pointer/callback/observer 저장
      ├─ destroy
      └─ later event
            │
            ▼
         freed object 사용

Autofill에서 이런 상황은 form 또는 frame 수명과 관련될 수 있다. 예를 들어 field가 사라졌는데 suggestion UI callback이 늦게 도착하거나, frame navigation으로 RenderFrameHost/driver 상태가 교체되었는데 이전 form 객체에 대한 이벤트가 처리되면, "현재 field"라는 개념이 이미 사라진 객체를 가리킬 수 있다. 실제 CVE-2026-15113의 세부 조건은 공개되어 있지 않으므로, 이는 Autofill 구조에서 가능한 일반 수명 위험 모델이다.

취약점 분석

확인된 사실

공개 자료로 확인할 수 있는 사실은 다음과 같다.

  • Chrome 릴리스 노트는 CVE-2026-15113을 "Use after free in Autofill"로 분류했다.
  • 관련 Chromium issue는 520540744이며, 현재 세부 내용은 접근 제한 상태다.
  • NVD는 Android용 Google Chrome 150.0.7871.115 미만이 영향을 받는다고 설명한다.
  • NVD 설명은 조작된 HTML 페이지를 통한 sandbox escape 가능성을 언급한다.
  • CISA-ADP CVSS는 AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H로, 사용자 상호작용이 필요하지만 권한은 필요 없고 scope change가 가능하다고 평가한다.
  • Chrome 150.0.7871.114/.115 릴리스는 2026-07-08에 공개되었고, 해당 업데이트에는 27개 보안 수정이 포함되었다.

정상적으로 유지되어야 하는 불변식

Autofill의 핵심 불변식은 "browser process가 다루는 form/field 객체는 현재 문서와 현재 frame의 살아 있는 DOM 상태에 대응해야 한다"이다. 이 불변식이 없다면 공격자 페이지가 DOM과 navigation을 바꾸는 동안 browser process가 오래된 객체를 계속 신뢰할 수 있다.

정상 기대 흐름

  [1] renderer: 현재 DOM에서 FormData 추출
        │
        ▼
  [2] browser: FormData를 FormStructure로 분석
        │
        ▼
  [3] 사용자 focus/tap 이벤트
        │
        ▼
  [4] browser: 현재 frame + 현재 field가 아직 유효한지 확인
        │
        ├─ 유효함   → suggestion 표시/채우기
        └─ 무효함   → 이전 callback/event 폐기

이 구조에서 각 이벤트는 시점이 다르다. renderer가 form을 보냈을 때와 사용자가 suggestion을 선택할 때의 DOM은 같지 않을 수 있다. 따라서 식별자, frame token, driver 소유권, observer 해제, callback 취소가 함께 맞아야 한다.

취약 동작 원리의 제한적 모델

세부 bug가 공개되지 않았으므로 아래는 특정 Chromium 코드 경로에 대한 단정이 아니다. 공개된 "Autofill use-after-free"와 "crafted HTML page" 조건을 Autofill 아키텍처 위에 놓은 개념 모델이다.

패치 전 개념 모델

공격자 HTML
  ├─ form/field 생성
  ├─ focus 또는 Autofill suggestion 유도
  ├─ DOM mutation / frame navigation / field removal
  └─ 늦게 도착하는 입력 또는 UI 이벤트 유발
        │
        ▼
Renderer AutofillAgent
  이전 FormData 또는 field 이벤트 전송
        │
        ▼
Browser AutofillManager
  이미 해제된 form/field/driver 관련 객체를
  callback, observer, raw pointer, cached state로 다시 사용
        │
        ▼
Use-after-free
        │
        ▼
메모리 손상 또는 제어 흐름 오염
        │
        ▼
Android Chrome sandbox escape 가능성

Autofill이 흥미로운 공격 표면인 이유는 공격자가 순수 HTML/JavaScript만으로 많은 상태 전이를 만들 수 있기 때문이다. 입력 field는 추가/삭제될 수 있고, iframe은 navigation될 수 있으며, focus와 blur 이벤트는 UI 표시와 얽힌다. 사용자가 한 번 suggestion을 보거나 선택하는 동안에도 renderer와 browser 사이에는 여러 비동기 메시지가 오간다.

sandbox escape라는 표현의 의미

일반적인 renderer 메모리 손상은 renderer sandbox 안의 코드 실행에 머무를 수 있다. 하지만 NVD 설명은 CVE-2026-15113의 결과를 sandbox escape 가능성으로 적고, CVSS도 scope changed로 평가한다. 이는 취약 객체가 renderer 내부에만 갇힌 것이 아니라 browser process, Android 통합 계층, 또는 더 높은 권한의 Autofill 관련 경로와 연결되었음을 시사한다.

일반 renderer-only 버그

  crafted HTML
      │
      ▼
  renderer process memory corruption
      │
      └─ sandbox 내부 영향

Autofill 경계 버그의 위험

  crafted HTML
      │
      ▼
  renderer가 form/focus 상태를 조작
      │
      ▼
  browser/Android Autofill 객체 수명 불변식 붕괴
      │
      ▼
  sandbox 밖 권한을 가진 컴포넌트 영향 가능

다만 실제로 어떤 프로세스의 어떤 객체가 해제 후 사용되었는지는 공개 issue가 열리기 전까지 확인할 수 없다. 이 보고서에서 말하는 sandbox escape 경로는 NVD/CVSS가 공개한 영향 범위를 설명하기 위한 아키텍처적 해석이다.

수정 방법

확인 가능한 수정 방법은 Chrome on Android를 150.0.7871.115 이상으로 업데이트하는 것이다. Chrome 릴리스 노트는 2026-07-08 Stable 채널 업데이트에서 Windows/Mac 150.0.7871.114/.115, Linux 150.0.7871.114를 공개했고, 해당 릴리스에 CVE-2026-15113 수정이 포함되었다고 밝혔다. NVD는 Android Chrome 150.0.7871.115 미만을 취약 구성으로 분류한다.

세부 패치가 공개되어 있지 않으므로 정확한 수정 코드는 확인할 수 없다. Autofill UAF 유형의 일반적 수정은 다음 중 하나 이상일 가능성이 높다.

패치 후 기대 모델

  Autofill event/callback 도착
        │
        ▼
  현재 frame token / field global id / driver 소유권 확인
        │
        ├─ 현재 문서와 일치하지 않음 → 이벤트 폐기
        ├─ 객체가 이미 해제됨        → weak pointer로 무시
        ├─ observer 해제됨           → callback 실행 안 함
        └─ 유효한 현재 객체           → suggestion/fill 처리
        │
        ▼
  해제된 객체 접근 차단

운영 관점에서는 Android 기기에서 Chrome 업데이트가 Google Play 또는 관리형 배포 채널을 통해 실제 적용되었는지 확인해야 한다. 취약점은 조작된 HTML 페이지를 통한 공격 모델이므로, 업데이트 전에는 외부 링크와 신뢰할 수 없는 웹 페이지 노출을 줄이는 것이 보조 완화책이지만, 근본 해결은 업데이트다.

참고 자료

미해결/불확실 지점

  • Chromium issue 520540744는 현재 접근 제한 상태라서 취약 함수, 패치 diff, 재현 조건을 확인하지 못했다.
  • Chrome 릴리스 노트는 desktop stable 글에 CVE를 싣고, NVD는 Android Chrome 150.0.7871.115 미만을 취약 구성으로 표시한다. Android 전용 릴리스 노트의 상세 보안 항목은 별도로 확인하지 못했다.
  • 이 보고서는 PoC를 사용하지 않았다. 공개 PoC나 독립 기술 writeup도 확인하지 못했다.