GrapheneOS, Google이 무시한 치명적인 Android VPN 유출 취약점 패치
모바일 보안의 세계에서 "Always-On VPN"의 약속은 개인정보 보호를 중시하는 사용자들에게 종종 최후의 방어선 역할을 합니다. 이는 데이터가 보안 터널 내에 캡슐화되지 않는 한 기기에서 외부로 나가지 않도록 설계되었습니다. 그러나 최근 Android 16에서 공개된 취약점은 이러한 엄격한 잠금 보호 기능조차 우회될 수 있음을 증명했으며, 잠재적으로 사용자의 실제 공인 IP 주소를 원격 서버에 노출시킬 수 있습니다.
이 결함은 Google에 보고되었으나, Google은 이 문제를 "Won't Fix"로 분류하며 패치를 발행하지 않기로 결정했습니다. 메인스트림 Android와 보안 강화형 포크(fork) 간의 우선순위 차이를 극명하게 보여주는 행보로, GrapheneOS는 최신 릴리스에서 이 유출 문제를 해결하기 위해 직접 나섰습니다.
유출의 구조: QUIC 및 system_server
이 취약점은 보안 연구원 "lowlevel/Yusuf"에 의해 발견 및 공개되었습니다. 문제의 근본 원인은 Android의 네트워킹 스택에 새롭게 도입된, QUIC (Quick UDP Internet Connections) 세션 종료를 처리하기 위해 설계된 기능에 있습니다.
정상적인 상황에서 UDP 소켓이 파괴될 때, 시스템은 세션을 우아하게 종료하고 싶어 할 수 있습니다. 이를 용이하게 하기 위해, Android는 애플리케이션이 소켓 파괴 시 전송될 특정 UDP 페이로드를 등록할 수 있도록 하는 API를 도입했습니다.
기술적 분석에 따르면, 결함은 다음과 같은 메커니즘을 통해 나타납니다:
- 임의의 페이로드 등록: 표준
INTERNET및ACCESS_NETWORK_STATE권한을 가진 애플리케이션은system_server프로세스에 임의의 UDP 페이로드를 등록할 수 있습니다. - 특권 권한 전송: 이후 애플리케이션의 UDP 소켓이 파괴되면, 고도로 특권화된 프로세스인
system_server가 저장된 페이로드를 전송합니다. - VPN 우회:
system_server는 향상된 네트워킹 특권 권한으로 작동하기 때문에 표준 VPN 라우팅 제한을 면제받습니다. 결과적으로, 패킷은 기기의 물리적 네트워크 인터페이스를 통해 직접 전송되어, "Block connections without VPN" 잠금 모드를 완전히 우회합니다.
Android 16을 실행하는 Pixel 8을 사용한 시연에서, 연구원은 Proton VPN이 활성화되어 있고 잠금 모드가 작동 중임에도 불구하고, 앱이 기기의 실제 공인 IP 주소를 원격 서버로 성공적으로 유출할 수 있음을 보여주었습니다.
Google의 대응: "Won't Fix"
기술적 결함 자체보다 아마도 더 논란이 될 만한 것은 보고에 대한 Google의 반응입니다. 기본적인 권한을 가진 모든 앱이 식별 가능한 네트워크 정보를 유출할 수 있다는 연구원의 주장에도 불구하고, Google의 보안 팀은 이 버그를 다음과 같이 분류했습니다:
- "Won't Fix (Infeasible)"
- "NSBC" (Not Security Bulletin Class)
Google은 이 문제가 Android 보안 권고문에 포함될 기준을 충족하지 못한다고 주장하며, 패치를 제공하지 않은 채 2026년 4월 29일에 공개적인 공개를 승인했습니다.
GrapheneOS의 개입
GrapheneOS는 Pixel 기기를 위해 주로 개발된 개인정보 보호 중심 OS입니다. 이 프로젝트는 2026050400 릴리스에서 registerQuicConnectionClosePayload 최적화 기능을 완전히 비활성화함으로써 공격 벡터를 무력화했습니다.
이 특정 수정 사항 외에도, 이번 업데이트는 2026년 5월 Android 보안 패치 레벨을 통합하고, 여러 브랜치(6.1, 6.6, 6.2)의 Linux 커널을 업데이트했으며, Dynamic Code Loading에 대한 추가적인 제한을 구현했습니다.
커뮤니티의 관점 및 기술적 비판
이 유출의 폭로는 기술 커뮤니티 내에서 상당한 논쟁쟁을 불러일으켰습니다. 특히 Google이 패치를 거부한 것에 대해 말이죠. 일부 관찰자들은 이러한 "유출"이 우연이 아닐 수도 있다고 시사하며, 한 댓글 작성자는 다음과 같이 언급했습니다:
"Just like manifest v3, it'dirs not in their best interests to disallow snooping. 엿보기 기능을 차단하는 1.0 버전의 manifest v3와 마찬가지로, 그들의 비즈니스 모델에 해가 됩니다."
더 깊은 있는 기술적 관점에서는, 일부 분석가들은 이 결함이 단순한 유출을 이상한데, Android 샌드박스 실패를 의미한다고 주장합니다. 한 커뮤니티 구성원은 이 취약약점점이 프로세스가 적절한 권한 확인 없이 OS가 자신을 대신해 전송할 임의의 바이트 배열을 임약히 설정할 수 있다는 점을 지적하며, 이는 "privilege escalation" 및 "app sandbox escape"에 해당한다고 주장합니다.
순정 Android 사용자들을 위한 완화 방법
GrapheneOS로 전환할 수 없지만 순정 Android에서 이 위험을 완화하고 싶은 사용자들을 위해, 연구원은 Android Debug Bridge (ADB)를 통한 수동 완화 방법을 제안했습니다. 사용자는 close_quic_connection DeviceConfig 플래그를 비활성화할 수 있습니다. 하지만 이는 개발자 액세스가 필요하며 향후 시스템 업데이트에 의해 덮어씌워질 수 있는 임시적인 조치입니다.
이 사건은 "표준" 보안과 "강화된" 보안 사이의 간격이 얼마나 큰지를 상떠하게 상기시켜 줍니다. 순정 Android는 광범위한 도구 세트를 제공하지만, GrapheneOS는 위협 모델이 절대적인 네트워크 격리(isolation)를 요구하는 사용자들에게 왜 특화된, 보안 우선 접근 방식이 필요한지를 계속해서 증명하고 있습니다.