世界を動かす技術を、日本語で。

GrapheneOSがGoogleが修正を拒否したAndroidのVPN漏洩を修正

概要

  • GrapheneOSが新たなAndroid VPNバイパス脆弱性を修正
  • 脆弱性は「Always-On VPN」「Block connections without VPN」有効時にもIP漏洩
  • 問題はAndroid 16のQUIC接続終了機能に起因
  • GrapheneOSは該当最適化を無効化し、攻撃ベクトルを遮断
  • 最新リリースで追加のセキュリティパッチや機能強化も実施

GrapheneOSによるVPNバイパス脆弱性修正

  • GrapheneOSAndroid VPNバイパス脆弱性 を修正したアップデートを公開
  • この脆弱性は ユーザーの実際のIPアドレス を漏洩する恐れ
  • Always-On VPNBlock connections without VPN 有効時でも情報漏洩
  • 問題は Android 16QUIC接続終了機能 に由来
  • セキュリティ研究者 lowlevel/Yusuf による脆弱性の開示
  • registerQuicConnectionClosePayload最適化 の無効化で攻撃ベクトル遮断
  • 修正は Google Pixelデバイス 対応のGrapheneOSで有効

脆弱性の技術的詳細

  • 脆弱なAPIは INTERNET および ACCESS_NETWORK_STATE のみで利用可能
  • 任意のUDPペイロードを system_server に登録可能
  • アプリのUDPソケット破棄時、 system_server が物理ネットワークインターフェースから直接送信
  • system_server はVPN経路制限を受けず、VPNロックダウンを回避
  • Pixel 8Proton VPN +ロックダウンモードで実証
  • アプリがVPN保護下でも 実IPアドレス を外部サーバへ漏洩

Googleの対応とGrapheneOSの独自対策

  • Googleは「 Won’t Fix (Infeasible)」「 NSBC (Not Security Bulletin Class)」と判断
  • 標準権限のみでネットワーク情報漏洩可能との指摘も却下
  • 研究者による異議申し立て後、 2024年4月29日 に情報公開を許可
  • GrapheneOS は該当最適化を完全に無効化(リリース 2026050400

最新アップデートの追加内容

  • 2026年5月Androidセキュリティパッチレベル へ更新
  • hardened_malloc の改良
  • Linuxカーネル (6.1、6.6、6.12各ブランチ)のアップデート
  • libpng のCVE-2026-33636修正のバックポート
  • Vanadiumブラウザ の新ビルド搭載
  • Dynamic Code Loading制限 の拡張

一般Androidユーザーの対応策

  • ADB 経由で close_quic_connection DeviceConfigフラグ を無効化し一時的な対策が可能
  • ただし 開発者アクセス が必要で、今後のアップデートで無効化される可能性

GrapheneOSの特徴と利用者層

  • プライバシー・セキュリティ重視 のAndroid系OS
  • 主に Google Pixelデバイス 向けに開発
  • プライバシー志向ユーザージャーナリスト活動家企業ユーザー に広く利用
  • アプリサンドボックス強化、エクスプロイト緩和策、Google依存度低減が主な特徴

Hackerたちの意見

悪いビジネス理由があるのは分かるけど、どうしてVPNの漏洩を「セキュリティ問題じゃない」って分類できるのか、しかもプライドを保ったままで?

それには、守るべきプライドがあるって前提があるよね。

企業にはプライドがないね。彼らは魂のない、サイコパスみたいな責任逃れの存在だ。君はどこの星から来たの?

いつの間にかデジタルセキュリティは物理的なセキュリティに変わるし、こういう「バグっぽい」行動を検出するための国の安全保障の利害関係があるんだ。もし修正するなら、別の方法でそのユーザーを匿名から外さなきゃならない。

どうして個人情報の不本意な開示をセキュリティの問題だと考えられるのか、しかもGoogleで働いてるのに?

彼らはそうするためにお金をもらってるんだ。

それは彼らにとってバグじゃなくて機能なんだ。Googleは広告会社で、VPNユーザーにパケットを漏らさせたい理由があるからね。

Googleがパッチを当てなかったのは、バックドアだからだよ。いろんな理由で、現代のメインラインAndroidは使うのがかなり危険なんだ。

これがひどいって言える技術的な詳細は、漏洩が特権プロセスであるsystem_serverで起こること。Androidのロックダウンモードは、VPNをバイパスするトラフィックはないって明言してるのに。システム自体が物理インターフェースを通じてパケットを送ると、その約束がカーネルレベルで破られちゃうんだよね。これを「セキュリティ速報クラスじゃない」って言うのは擁護しづらい。

system_serverはネットワークの特権を持っていて、VPNルーティングの制限から免除されているから じゃあ、AndroidのVPNはVPNじゃないってこと?このバグに関係なく。他のロックダウンされたOSも同じように動くの?

iOSも同じことしてるけど、回避する方法は「エンタープライズ」ライセンス(250台以上のデバイス)が必要だよ。Mullvadや他のところがそれについてはずいぶん前に報告してた。

MacOSでも、自分たちのアプリが常時オンのVPNをバイパスできることがあったよ。トラフィックが任意の宛先に直接行くようなエクスプロイトや隙間があったかどうかは分からないけど。

system_server(や他のバイパス)を修正するのはどれくらい難しいんだろう?

「プライベート」や「信頼」みたいな用語は、コンピュータの世界と人間の常識で意味が違うんだよね。これが心配なんだ。人間は同じスペルの言葉に誤解を持って、コンピュータの信頼に対しても信頼を拡張しちゃうことが多いから。

ストックAndroidはスパイウェアとアドウェアだよ。昔はこういうソフトを悪質だって呼んで、削除してたのに、今じゃデフォルトになっちゃった。

みんな同意してるよね。でも、解決策は何? 99%のユーザーは気にしてないし。だから、唯一の圧力ポイントは電話メーカーだよね。俺にはこの分野で影響力を持つ人に何かを言う力がない。無力感を感じるよ。

Googleはその立場を維持し、4月29日に公表を許可した。あの時点で彼らがエンバゴーを守ったのには驚いたし、修正を5月まで遅らせたのも意外だった。なんで即座にリリースしなかったの?

おそらくGoogleとのベンダーとしての関係を壊したくないんだろうね。良くも悪くも、GrapheneOSはGoogleがコントロールしているAndroidに依存してるから。

lowlevel.funで報告されてる問題とGrapheneOSフォーラムで話されてることは、セキュリティの問題っぽいね。なぜ担当のエンジニアがこれを実現不可能と判断したのかは不明だよ。侵害が複数の失敗を示してるのに。1. 新しい(「隠された」)ネットワークAPI registerQuicConnectionClosePayload(fd, payload) があって、プロセスがOSに代わって送信するための任意のバイト配列を設定できる。2. OSが所有するUDPソケットでそのバイト配列を送信する際に、呼び出し元のuid/プロセスに対する「パラノイドネットワーキング」の権限チェックがない。3. Android SDK APIではなく、ネットワーク関連のシステムコール(またはlibc/bionic関数)を単に呼び出すことで「パラノイドAndroid」の権限チェックを回避してる。これらのステップは基本的にアプリのサンドボックスからの脱出(2,3)と特権昇格(1,2)に相当するよ。GoogleのAndroidセキュリティチームがこれをもっと真剣に受け止めない理由が全く理解できない。

サイドクエスチョン: GrapheneOSの電話を手に入れるのにいい方法は? GrapheneOSを使いたいと思ってるけど、実際にPixel電話を手に入れるのには躊躇してる。中古の電話の価格は通常300ドル以上で、「a」シリーズでも数世代前に戻らないといけない。デバイスのブートローダーがアンロックできるかどうかも疑問だし。新しいPixel 10aに449ドルも使う準備は全然できてないよ。

ちょっと待ってみるのもアリだよ。もっと多くの電話ハードウェアをサポートするための作業が進行中だから。どのブランドになるかはちょっと予測が難しいけど。

GrapheneOSを試すためにBackMarketでPixel 7を買ったよ。アカウントの履歴には前にポジティブなコメントや会話がある。

Pixel 10aは買わない方がいいよ。9aはほぼ同じもので、まだ新品で売ってるから。

別のスレッドでこれに答えたよ: https://news.ycombinator.com/item?id=48076522 基本的には、Pixel 6以降を買うべきだよ(Pixel 6はサポートが少なくなるから、Pixel 7以降を推奨)。アンロック可能なブートローダーがあることを確信できるものを選んでね。ほとんどのものはアンロックできないブートローダーだから。つまり、Googleから直接買うか、すでにGrapheneOS/CalyxOS/LineageOSが入ってるか、売り手が明言しているアンロック可能なブートローダーのものをeBayで買うのがいいよ。(俺の経験では、ブートローダーを確認してくれと売り手に頼むのは無駄だよ。ほとんどの人は確認する手間をかけたくないし、答えはたぶん「できない」だし、質問を誤解して「アンロックされてる」と答えるかもしれないし、質問されるのに疲れてるかもしれない。)

今すぐには役に立たないかもしれないけど、GrapheneOSが最近Motorolaと提携したって発表したから、1年くらいしたらMotorolaのデバイスにサポートが出てくるかもね。ちなみに、Google Fiで約300ドルで10aを発売日にゲットしたよ。

リファービッシュのスマホは安いし、3年、4年、5年前のモデルでも素晴らしいハードウェアが手に入るから、今1000ドルで買うのと見分けがつかないよ。高品質なリファービッシュPixelが200ドルか300ドルで買えるのは、本当に悪くないと思う。

何世代も前のに戻らない限り そうだね、やってみて。今まで使った中で一番サクサクのスマホになるよ。

グラフェンOSを試すために安く中古のPixel 6を買ったけど、あんまり好きじゃないな。LineageOSのUXの方が全然いい。パッケージマネージャーに変なロシアの入れ子人形みたいな状況があって、基本的なプログラムがいくつかしかない「アプリストア」が内蔵されてるんだけど、その中の一つが別のパッケージマネージャーのAccrescentで、もう少しアプリが増えるけど、まだ全然足りないから、別のパッケージマネージャーが必要なんだ。GrapheneOSの人たちはf-droidよりもObtainiumを好んでるみたいだけど、それもまた変な選択だと思う。完全なOSSパッケージマネージャーの方が好きだし、外部からソースをコンパイルしてもらうことには本当に価値があると思う。GitHubのパッケージを信頼するよりもね。GrapheneOSのセキュリティモデルは、なんか中央集権的に感じる。報告されているプライバシーやセキュリティの利点についてはあまりコメントできないな。

CalyxOSが再始動するのが本当に嬉しい。GrapheneOSにはクールな技術的実装がたくさんあるけど、Calyxはもっとシンプルで、バニラなAndroidのやり方でやってることが多い気がする。

だから別のパッケージマネージャーが必要で、GrapheneOSの人たちはf-droidよりObtainiumを好んでるみたいだけど、それもまた変な選択だと思う じゃあ、自分でf-droidをダウンロードすればいいんじゃない?なんで決定的でプリロードされたアプリストアにこだわるの? > 完全なOSSパッケージマネージャーの方が好きだし、外部からソースをコンパイルしてもらうことには本当に価値があると思う。GitHubのパッケージを信頼するよりもね。アプリストアを運営するのは、Androidのフォークを維持するのと同じくらいの手間がかかるし、すでにf-droidやPlayストア(それにAuroraストア)、Obtainium、他にもたくさんある中で、そんなに大変な努力をしない著者を責めるのは難しいよね。

「最新のリリースで、GrapheneOSは「VPN漏れを修正するためにregisterQuicConnectionClosePayload最適化を無効にした」と述べており、サポートされているPixelデバイスに対する攻撃ベクターを実質的に無効化した。」 「GrapheneOSはリリース2026050400で、基盤となる最適化を完全に無効にした。」 GrapheneOSは最適化を無効にすることで漏れを「修正」した。過去にHNのコメント欄でQUICを称賛して、QUICが誰に最も利益をもたらすかを疑問視するコメントをダウンvoteしていた人もいたけど、QUICを使うことは他の人の利益にかなうかもしれないけど、自分にとってはトレードオフがそれほど価値がない。QUICトラフィックはブロックしてる。QUICは時々Googleが配布するソフトウェア、例えばAndroidでデフォルトでオンになっていることがあって、場合によっては無効にするオプションがないこともある。