Pixel 10용 0-click 익스플로잇 체인
2 hours ago
2
- Pixel 10 체인은 패치 전 Android 전반에 있던 Dolby 0-click 취약점을 첫 단계로 사용하고, 새 로컬 권한 상승 경로를 추가함
- Pixel 9 체인의 BigWave 드라이버는 Pixel 10에 없어 이식할 수 없었고, 대신 Tensor G5의 /dev/vpu가 공격 표면이 됨
- VPU 드라이버는 userspace에 MMIO 레지스터 인터페이스를 직접 노출했고, 2시간 감사만으로 치명적인 mmap 버그가 발견됨
- remap_pfn_range가 레지스터 크기가 아니라 VMA 크기만 기준으로 매핑해, 커널 .text와 .data 읽기·쓰기가 가능해짐
- 취약점은 2025년 11월 24일 보고 후 71일 만에 패치됐고, Android 드라이버 보안 강화가 여전히 필요함
Pixel 10 0-click 체인 구성
- Google Pixel 9에서 0-click 문맥에서 Android root까지 두 개의 익스플로잇으로 도달한 익스플로잇 체인을 바탕으로, Pixel 10에서도 유사한 체인을 구성함
- Dolby 0-click 취약점은 2026년 1월 패치 전까지 Android 전반에 존재했으며, Pixel 10 대상 체인에서도 첫 단계로 쓰임
- Pixel 9의 로컬 권한 상승 단계였던 BigWave 드라이버는 Pixel 10에 포함되지 않아 그대로 이식할 수 없었고, Pixel 10의 /dev/vpu 드라이버가 새로운 공격 표면이 됨
Dolby 익스플로잇 업데이트
- CVE-2025-54957용 기존 익스플로잇을 Pixel 10에 맞추는 작업은 대부분 Pixel 9 라이브러리 기준 오프셋을 Pixel 10 라이브러리의 대응 오프셋으로 갱신하는 수준이었음
- Pixel 10은 -fstack-protector 대신 RET PAC를 사용해 __stack_chk_fail을 덮어쓸 수 없었음
- 여러 시도 끝에 디코더 초기화 때 한 번 호출되고 다시 호출되지 않는 초기화 코드 dap_cpdp_init을 덮어쓰는 방식이 사용됨
- 업데이트된 Dolby UDC 익스플로잇은 여기에 공개됐으며, 2025년 12월 SPL 이하의 패치되지 않은 기기에서만 동작함
BigWave 제거와 VPU 추가
- Pixel 10에는 BigWave 드라이버가 없어 기존 Pixel 9 체인의 로컬 권한 상승 단계를 포팅할 수 없었음
- mediacodec SELinux 문맥에서 접근 가능한 /dev/vpu 드라이버가 새로 보였고, 이는 Tensor G5 칩의 비디오 디코딩 가속용 Chips&Media Wave677DV 실리콘과 상호작용하는 데 쓰임
- 공개 C 파일의 주석상 이 드라이버는 BigWave 드라이버를 만든 개발자들과 같은 그룹이 개발·유지하는 것으로 나타남
- Jann Horn과 함께 2시간 동안 VPU 드라이버를 감사한 결과, 매우 예외적인 취약점이 발견됨
- 이전 Chips&Media 칩인 WAVE521C용 업스트림 Linux 드라이버와 달리, Pixel의 WAVE677DV 드라이버는 V4L2(“Video for Linux API”)와 통합되지 않음
- Pixel 드라이버는 칩의 하드웨어 인터페이스를 userspace에 직접 노출하며, userspace가 칩의 MMIO 레지스터 인터페이스를 매핑할 수 있게 함
- 드라이버의 주요 역할은 장치 메모리 매핑 설정, 전원 관리, userspace의 칩 인터럽트 대기 지원임
핵심 커널 취약점
- 해당 버그는 익스플로잇이 매우 단순한 취약점이었음
- 문제의 mmap 핸들러는 VPU 하드웨어의 MMIO 레지스터 영역을 userland 가상 주소 공간에 매핑하는 코드임
- remap_pfn_range 호출이 레지스터 영역 크기로 제한되지 않고 VMA 크기만 기준으로 수행됨
- 공격자는 mmap 시스템 호출에서 레지스터 영역보다 큰 크기를 지정해, VPU 레지스터 영역의 물리 주소부터 원하는 만큼의 물리 메모리를 userland에 매핑할 수 있음
- 커널 이미지 전체가 VPU 레지스터 영역보다 높은 물리 주소에 위치하므로, 이 버그로 커널의 .text와 .data 영역에 접근하고 수정할 수 있음
- Pixel에서는 커널이 항상 같은 물리 주소에 위치해, VPU 메모리 영역과 커널 사이의 오프셋이 항상 알려진 값임
- 충분히 큰 VMA 길이를 지정하면 매핑된 물리 메모리에서 커널을 스캔하지 않아도 mmap이 반환한 주소 기준으로 커널 위치를 정확히 알 수 있음
- 이 취약점으로 커널 임의 읽기·쓰기를 달성하는 데는 코드 5줄이 필요했고, 전체 익스플로잇 작성에는 하루 미만이 걸림
- 임의의 커널 함수를 덮어써 커널 코드 실행을 얻거나 원하는 프리미티브를 구성할 수 있음
패치 처리
- 취약점은 2025년 11월 24일 보고됐고, Android VRP는 이 문제를 High 심각도로 평가함
- Pixel 9 권한 상승에 사용된 BigWave 버그는 보안 영향이 동일했지만 초기에 Moderate로 평가됐으므로, 이번 평가는 개선된 처리로 볼 수 있음
- 취약점은 최초 보고 후 71일 만에 2월 Pixel 보안 게시판에서 패치됨
- Android 드라이버 버그가 벤더에 최초 보고된 뒤 90일 이내에 패치된 것은 처음으로 평가됨
- 이 처리 과정에서 유사한 유형의 버그를 분류하고 패치하는 Android의 대응이 의미 있게 개선됐음이 드러남
보안상 의미
- VPU 취약점 대응은 Android의 분류 파이프라인이 개선됐음을 보여주며, 이전 BigWave 문제보다 훨씬 짧은 기간 안에 초기 수정이 이뤄짐
- 심각한 취약점을 효율적으로 패치하려는 Android의 노력은 많은 Android 기기 보호에 도움이 됨
- 동시에 Android 드라이버에는 더 철저하고 보안 의식이 반영된 코드가 계속 필요함
- BigWave 버그 보고 이후 관련 개발자들이 다른 드라이버의 명백한 보안 문제를 점검하길 기대했지만, 5개월 뒤 VPU 드라이버에서 얕은 감사만으로도 즉시 드러나는 심각한 취약점이 발견됨
- Android 생태계의 안전성을 위해 드라이버 보안 강화는 여전히 중요한 우선순위임
- 벤더는 취약점이 최종 사용자에게 도달하지 않도록 소프트웨어 개발 관행을 사전에 개선해야 하며, 특히 보안에 중요한 제품은 출시 시점부터 합리적으로 취약점이 적은 상태여야 함
- 소프트웨어 팀은 보안, 코드 감사, 취약점 패치에 대해 사전 예방적 접근을 취해야 함
-
Homepage
-
개발자
- Pixel 10용 0-click 익스플로잇 체인