픽셀 10(Pixel 10) 제로 클릭(0-click) 익스플로잇, 안드로이드(Android) 보안의 현주소
구글 프로젝트 제로(Google Project Zero)는 픽셀 10(Pixel 10)에서 제로 클릭(0-click) 익스플로잇 체인(Exploit Chain)을 발견하고, 기술적 세부 사항을 공개함
기존 픽셀 9(Pixel 9) 익스플로잇을 기반으로, 돌비(Dolby) 취약점과 VPU 드라이버(Driver) 취약점을 결합하여 익스플로잇을 구성함
VPU 드라이버(Driver)의 mmap 핸들러(Handler) 취약점을 통해 커널 메모리(Kernel Memory)에 대한 임의의 읽기/쓰기 권한(Arbitrary Read/Write)을 획득함
구글(Google)의 취약점 대응 속도(Vulnerability Response)가 개선되었으나, 드라이버(Driver) 보안 강화의 필요성이 제기됨
돌비(Dolby) 취약점 재활용 및 오프셋(Offset) 조정
구글 프로젝트 제로(Google Project Zero)는 픽셀 9(Pixel 9)에서 사용된 돌비(Dolby) 취약점을 픽셀 10(Pixel 10)에 맞게 수정했다. 기술적으로 보면, CVE-2025-54957에 대한 익스플로잇을 픽셀 10(Pixel 10)의 라이브러리 버전에 맞춰 오프셋(Offset)을 변경했다. 특히, -fstack-protector 대신 RET PAC를 사용하는 픽셀 10(Pixel 10)의 특성을 고려하여, dap_cpdp_init을 활용하는 방식으로 우회했다. 이는 기존 익스플로잇의 재사용성을 보여주는 사례이다.
VPU 드라이버(Driver)의 mmap 취약점 분석
연구진은 픽셀 10(Pixel 10)의 VPU 드라이버(Driver)에서 치명적인 취약점을 발견했다. 기술적으로, `vpu_mmap` 핸들러(Handler)는 VPU 하드웨어의 MMIO 레지스터 영역을 사용자 공간에 매핑하는 역할을 한다. 하지만, `remap_pfn_range` 호출 시 매핑 크기를 레지스터 영역 크기에 제한하지 않아, 사용자가 임의의 물리적 메모리 영역을 매핑할 수 있었다. 이로 인해 커널 메모리(Kernel Memory)에 대한 임의의 읽기/쓰기 권한(Arbitrary Read/Write)이 가능해졌다.
커널 메모리(Kernel Memory) 접근 및 익스플로잇(Exploit) 구현
VPU 드라이버(Driver)의 취약점을 통해 커널 메모리(Kernel Memory)에 접근하는 것은 매우 간단했다. 연구진은 단 5줄의 코드로 커널 메모리(Kernel Memory)에 대한 임의의 읽기/쓰기 권한(Arbitrary Read/Write)을 획득했으며, 전체 익스플로잇(Exploit) 구현에 하루도 걸리지 않았다. 특히, 픽셀(Pixel) 기기에서 커널의 물리적 주소가 고정되어 있어, 익스플로잇(Exploit) 난이도를 더욱 낮췄다.
구글(Google)의 취약점 대응 프로세스(Process) 개선
구글(Google)은 VPU 취약점에 대해 신속하게 대응하여, 보고 후 71일 만에 패치를 배포했다. 이는 이전 BigWave 취약점 패치보다 빠른 속도이다. 취약점 신고(Vulnerability Report) 및 패치 배포(Patch Deployment) 과정에서 긍정적인 변화가 있었음을 시사한다. 하지만, 드라이버(Driver) 코드의 보안 취약성은 여전히 개선해야 할 과제로 남아있다.
안드로이드(Android) 드라이버(Driver) 보안의 중요성
이번 연구 결과는 안드로이드(Android) 시스템에서 드라이버(Driver) 보안의 중요성을 강조한다. 특히, VPU 드라이버(Driver)와 같이 하드웨어에 직접 접근하는 드라이버(Driver)는 잠재적인 보안 위협을 내포하고 있다. 구글 프로젝트 제로(Google Project Zero)는 드라이버(Driver) 개발 과정에서 보안을 고려한 설계(Security-Aware Design)와 코드 감사(Code Auditing)의 중요성을 강조하며, 지속적인 보안 강화를 촉구했다.