본문으로 건너뛰기
피드

구글 프로젝트 제로, 픽셀 10에서 제로클릭으로 루트까지 가는 익스플로잇 체인 공개

security 약 10분
vote
0
댓글
북마크

구글 프로젝트 제로가 픽셀 10에서도 제로클릭 취약점에서 시작해 안드로이드 루트 권한까지 도달하는 익스플로잇 체인을 만들 수 있었다고 공개했다. 핵심은 기존 돌비 취약점과 픽셀 10의 새 VPU 드라이버 취약점을 이어 붙인 체인인데, VPU 쪽은 커널 메모리를 사용자 공간에서 거의 그대로 만질 수 있게 만드는 수준의 심각한 버그였다.

  • 1

    픽셀 10용 체인은 돌비 제로클릭 취약점과 VPU 드라이버 권한 상승 취약점으로 구성됨

  • 2

    VPU 드라이버는 mmap 길이 검증을 제대로 하지 않아 물리 메모리를 사용자 공간에 과도하게 매핑할 수 있었음

  • 3

    커널 이미지가 VPU 레지스터보다 높은 고정 물리 주소에 있어 커널 코드와 데이터를 직접 읽고 수정할 수 있었음

  • 4

    임의 커널 읽기·쓰기는 5줄 코드로 가능했고 전체 익스플로잇 작성도 하루가 안 걸렸음

  • 5

    취약점은 2025년 11월 24일 신고됐고 71일 뒤 2026년 2월 픽셀 보안 공지에서 패치됨

픽셀 10도 제로클릭에서 루트까지 뚫렸다

  • 구글 프로젝트 제로가 픽셀 10용 익스플로잇 체인을 공개함. 출발점은 돌비 0-click 취약점, 도착점은 안드로이드 루트 권한임.

    • 프로젝트 제로는 앞서 픽셀 9에서 익스플로잇 2개만으로 제로클릭 컨텍스트에서 루트까지 가는 체인을 보여줬음.
    • 이번엔 같은 아이디어가 픽셀 10에서도 가능한지 확인했고, 결론은 “가능했다”에 가까움.
    • 돌비 취약점은 2026년 1월 패치 전까지 안드로이드 전반에 존재했던 이슈였고, 픽셀 10용 체인은 패치되지 않은 기기에서만 동작함.
  • 돌비 익스플로잇을 픽셀 10에 맞추는 작업은 생각보다 단순했음. 대부분은 라이브러리 버전 차이 때문에 오프셋을 다시 맞추는 일이었음.

    • 픽셀 9에서 쓰던 CVE-2025-54957 익스플로잇을 픽셀 10 라이브러리 구조에 맞게 조정함.
    • 다만 픽셀 10은 -fstack-protector 대신 RET PAC을 써서 __stack_chk_fail을 덮어쓰는 기존 방식이 안 먹혔음.
    • 연구진은 대신 dap_cpdp_init을 덮어썼음. 이 초기화 코드는 디코더가 처음 초기화될 때 한 번만 호출되고 이후엔 다시 호출되지 않아 기능상 문제가 적었기 때문임.

중요

> 이 체인은 최신 패치가 적용된 기기용이 아님. 돌비 쪽 익스플로잇은 2025년 12월 또는 그 이전 보안 패치 수준의 미패치 기기에서만 동작함.

진짜 문제는 새 VPU 드라이버였다

  • 픽셀 9 체인에서 권한 상승에 쓰였던 BigWave 드라이버는 픽셀 10에 없었음. 그래서 연구진은 픽셀 10에서 새 공격 표면을 찾아야 했음.

    • 픽셀 10의 mediacodec SELinux 컨텍스트에서 /dev/vpu라는 새 드라이버가 보였음.
    • 이 드라이버는 텐서 G5 칩 안의 Chips&Media Wave677DV 실리콘과 통신하는 데 쓰이고, 비디오 디코딩 가속을 담당함.
    • 오픈소스 C 파일 주석을 보면 이 드라이버는 과거 BigWave 드라이버를 만든 개발자들이 개발·유지한 것으로 보였음.
  • 연구진은 Jann Horn과 함께 VPU 드라이버를 2시간 감사했고, 바로 치명적인 취약점을 찾았음. 이 대목이 꽤 세다.

    • upstream 리눅스의 WAVE521C 드라이버는 V4L2, 즉 Video for Linux API와 통합되어 있음.
    • 그런데 픽셀의 WAVE677DV 드라이버는 V4L2를 거치지 않고 칩의 하드웨어 인터페이스를 사용자 공간에 직접 노출함.
    • 심지어 사용자가 칩의 MMIO 레지스터 인터페이스를 매핑할 수 있게 해둠.
  • 문제의 핵심은 mmap 핸들러가 매핑 크기를 제대로 제한하지 않았다는 점임. 드라이버 보안에서 “이건 진짜 안 된다” 싶은 패턴임.

    • 원래는 VPU 하드웨어의 MMIO 레지스터 영역만 사용자 공간에 매핑해야 함.
    • 그런데 구현은 실제 레지스터 영역 크기로 제한하지 않고, 호출자가 넘긴 VMA 크기를 기준으로 remap_pfn_range를 호출했음.
    • 공격자가 mmap syscall에서 레지스터 영역보다 훨씬 큰 크기를 지정하면, VPU 레지스터 물리 주소에서 시작해 원하는 만큼의 물리 메모리를 사용자 공간에 매핑할 수 있었음.

⚠️주의

> 이 버그의 파급력이 큰 이유는 “일부 데이터 노출” 수준이 아니라 커널 이미지의 .text, .data 영역까지 사용자 공간에서 접근·수정 가능해졌다는 점임.

왜 이게 ‘커널 취약점의 성배’급인가

  • 픽셀에서는 커널이 항상 같은 물리 주소에 올라가서 공격 난이도가 더 낮아졌음. 랜덤하게 뒤져볼 필요도 없었다는 얘기임.

    • 커널 이미지는 VPU 레지스터 영역보다 높은 물리 주소에 위치함.
    • VPU 영역과 커널 사이의 오프셋이 항상 알려진 값이라서, 충분히 큰 길이로 mmap만 하면 커널 위치를 바로 계산할 수 있음.
    • 커널을 메모리에서 스캔할 필요 없이, 반환된 매핑 주소 기준으로 정확히 어디를 건드려야 하는지 알 수 있었음.
  • 여기까지 오면 임의 커널 읽기·쓰기는 거의 공짜에 가까움. 연구진 표현대로면 진짜 간단한 버그였음.

    • 커널 함수 아무거나 덮어써서 커널 코드 실행을 얻을 수 있음.
    • 원하는 primitive를 만드는 것도 가능함. 즉, 단순 크래시가 아니라 공격자가 원하는 방식으로 커널을 조작할 수 있음.
    • 임의 커널 읽기·쓰기를 얻는 데 필요한 코드는 5줄이었고, 전체 익스플로잇 작성도 하루가 안 걸렸음.
sequenceDiagram
    participant 공격자
    participant 돌비디코더
    participant 사용자공간
    participant VPU드라이버
    participant 커널
    공격자->>돌비디코더: 제로클릭 입력으로 코드 실행 유도
    돌비디코더->>사용자공간: 제한된 컨텍스트에서 실행 흐름 확보
    사용자공간->>VPU드라이버: 큰 길이로 mmap 요청
    VPU드라이버->>사용자공간: VPU 레지스터 이후 물리 메모리까지 매핑
    사용자공간->>커널: 고정 오프셋으로 커널 이미지 접근
    사용자공간->>커널: 함수 또는 데이터 덮어써 루트 권한 확보

패치 과정은 나아졌지만, 코드 품질은 여전히 숙제

  • 이 취약점은 2025년 11월 24일 신고됐고, 안드로이드 취약점 보상 프로그램(Android VRP)은 심각도를 High로 평가했음.

    • 픽셀 9의 BigWave 권한 상승 버그는 보안 영향이 사실상 같았는데도 처음엔 Moderate로 평가됐음.
    • 이번엔 High로 바로 잡힌 만큼, 이런 유형의 드라이버 취약점을 분류하고 대응하는 태도는 개선된 셈임.
  • 패치는 신고 후 71일 만에 나왔고, 2026년 2월 픽셀 보안 공지에 포함됐음.

    • 연구진은 자신이 신고한 안드로이드 드라이버 버그 중 벤더가 처음 인지한 뒤 90일 안에 패치된 첫 사례라고 언급함.
    • 개별 버그 대응 속도만 보면 긍정적임. 적어도 이번에는 “언젠가 고치겠지”가 아니라 실제 보안 공지까지 빠르게 이어졌음.
  • 하지만 더 찝찝한 건, BigWave 이후 5개월이나 지났는데 같은 개발자들이 관리하는 다른 드라이버에서 너무 얕은 취약점이 또 나왔다는 점임.

    • 연구진은 BigWave 버그를 신고했을 때 해당 개발자들이 다른 드라이버도 점검하길 기대했음.
    • 그런데 VPU 드라이버에서는 코드베이스를 가볍게 훑어봐도 바로 보이는 수준의 심각한 문제가 남아 있었음.
    • 보안 보고서는 종종 복잡한 취약점을 찾아내지만, 이번 케이스는 “출시 전에 기본 감사로 걸렀어야 하는 것 아닌가?”에 가까움.
  • 결론은 명확함. 안드로이드 드라이버 보안은 개별 패치보다 개발 프로세스 개선이 더 중요함.

    • 하드웨어 드라이버는 성능과 기능 때문에 사용자 공간과 커널 사이를 가까이 붙이는 일이 많음.
    • 그만큼 범위 검증, 권한 모델, 표준 API 사용 여부 같은 기본기가 무너지면 곧바로 커널 장악으로 이어짐.
    • 픽셀 같은 레퍼런스급 기기에서도 이런 버그가 나온다면, 다른 안드로이드 기기 생태계는 더 빡세게 봐야 함.

기술 맥락

  • 이번 사건의 핵심 선택은 VPU 드라이버가 V4L2 같은 표준 비디오 계층을 통하지 않고 하드웨어 인터페이스를 사용자 공간에 직접 노출했다는 점이에요. 이렇게 하면 특정 칩 기능을 빠르게 붙이기는 쉬운데, 드라이버가 직접 보안 경계를 책임져야 해서 작은 검증 누락이 바로 커널 취약점으로 커져요.

  • mmap에서 길이 검증이 중요한 이유는 사용자 공간에 “어디부터 어디까지 보여줄지”를 결정하는 경계선이기 때문이에요. 원래는 VPU 레지스터 영역만 보여줘야 했는데, 호출자가 더 큰 크기를 요청해도 막지 않으면서 VPU 뒤쪽의 물리 메모리까지 같이 열려버린 거예요.

  • 픽셀에서 커널 물리 주소가 고정적이었다는 점도 공격 난이도를 크게 낮췄어요. 커널 위치를 추측하거나 메모리에서 패턴을 찾아 헤맬 필요 없이, VPU 매핑 시작점에서 알려진 오프셋만 더하면 커널 코드와 데이터에 닿을 수 있었거든요.

  • 그래서 이 취약점은 단순 정보 유출보다 훨씬 위험해요. 공격자는 커널 함수나 데이터를 직접 바꿔서 원하는 실행 흐름을 만들 수 있고, 연구진이 말한 것처럼 임의 읽기·쓰기가 5줄 코드로 가능했다면 실전 익스플로잇 난이도도 꽤 낮은 편이에요.

  • 패치가 71일 만에 나온 건 분명 개선이에요. 다만 같은 계열 개발자들이 만든 다른 드라이버에서 비슷하게 기본적인 문제가 발견됐다는 건, 개별 버그 수정만으로는 부족하고 드라이버 전체에 대한 사전 감사와 설계 리뷰가 필요하다는 신호예요.

이건 단순히 픽셀 하나 털렸다는 얘기가 아니라, 안드로이드 기기 드라이버 코드가 얼마나 공격 표면으로 위험한지 보여주는 케이스다. 특히 하드웨어 가속용 드라이버가 사용자 공간에 MMIO를 직접 열어주는 설계는 성능엔 편할 수 있어도 보안 검증이 허술하면 바로 커널 전체가 열린다.

댓글

댓글

댓글을 불러오는 중...

security

한양대 에리카와 네이버클라우드, 클라우드·보안·AI 인재 키우는 산학협력 체결

한양대 에리카가 네이버클라우드와 첨단 분야 지역인재 양성과 글로벌 산학협력을 위한 업무협약을 맺었다. 협력 범위는 클라우드, 사이버보안, 블록체인, 개인정보보호, 인공지능(AI), 디지털 전환(DX) 교육·연구 기반 구축까지 포함된다.

security

악성 npm 패키지가 AI 개발도구의 지침 파일과 MCP까지 노리기 시작함

이스트시큐리티가 웹과 탈중앙화금융 개발자를 겨냥한 악성 npm 패키지 캠페인을 포착했어. 공격자는 유명 웹3 도구를 사칭하는 데서 그치지 않고, AI 에이전트가 읽는 프로젝트 지침 파일과 MCP 기반 외부 도구 호출까지 공격 경로로 삼으려 했어.

security

금융권, 앤트로픽 미토스가 찾은 오픈소스 취약점에 긴급 점검 들어감

앤트로픽의 AI 모델 클로드 미토스가 1000개 넘는 오픈소스에서 대량의 취약점 후보를 찾아냈고, 그중 일부가 실제 취약점으로 검증돼 공개됐어. 금융당국은 nginx, wolfSSL, FreeRDP, Ghost 같은 널리 쓰이는 구성요소를 중심으로 금융권에 긴급 자산 점검과 패치 적용을 권고했어.

security

애플이 양자 내성 암호화 검증 코드를 공개했다, 핵심은 수학적 증명

애플이 corecrypto 라이브러리의 포스트 양자 암호화 구현과 검증 코드를 GitHub에 공개했다. ML-KEM, ML-DSA 구현과 형식 검증 접근을 공개해 보안 연구자들이 직접 검토할 수 있게 했고, 이 기술은 25억 대 이상 활성 기기에서 쓰이는 암호화 기반과 연결된다.

security

라라벨 번역 패키지 태그가 통째로 바뀌었다, 개발자 비밀값 털리는 공급망 공격

전 세계 라라벨 개발자가 쓰는 Laravel-Lang 패키지가 공격을 받아 Git 태그가 악성 버전을 가리키도록 바뀌었다. 5월 22일 약 90분 동안 4개 저장소의 태그가 교체됐고, 감염된 패키지는 AWS 키, GitHub 토큰, Stripe 시크릿, 암호화폐 지갑 복구 구문, SSH 개인키 등을 노렸다.