GitHubのオープンソースAI監査エージェントがAndroidの脆弱性24件を発見 — 深刻度の判定は外し続けた

OsmAndの無警告な位置情報漏洩と、タップ一回で成立するWikipediaのアカウント乗っ取りは、誰でも自分のリポジトリに実行できるタスクフローから出てきた

|5分で読める0
Source code on a developer's screen, the material GitHub Security Lab's open-source taskflow agent audits to surface Android vulnerabilities
Source code on a developer's screen, the material GitHub Security Lab's open-source taskflow agent audits to surface Android vulnerabilities

GitHub Security Labが、オープンソースのAIエージェントを使ってAndroidアプリケーションの脆弱性24件を報告した。開発者なら誰でも自分のリポジトリに向けて実行できるツールである。研究者のKevin StubbingsはGitHub Blogの記事でその作業を公開し、すでに開示済みの2件をたどってみせた。ナビゲーションアプリOsmAndにおける無警告の位置情報漏洩と、WikipediaのAndroidアプリでタップ一回で成立するアカウント乗っ取りである。

要点

  • GitHub Security Labのオープンソース実装Taskflow Agent上に自作したタスクフローで、Androidの脆弱性24件を発見し報告した。
  • Playストアで1,000万件超のダウンロードを持つOsmAndのエクスポートされたアクティビティにより、端末上の任意のアプリが地図設定を書き換え、利用者のタイル座標や経路を攻撃者のサーバーへ送り出せた。
  • モデルはバグの発見には格段に強い一方、深刻度の評価は苦手で、低リスクのノイズと誤検知を出し続け、結局は人のレビューが拾うほかなかった。

Android向けにタスクフローをどう調整したか

エージェント自体は汎用で、価値はプロンプトの側にあった。Stubbingsはエントリポイントをモバイルと非モバイルに振り分けるタスクフローgather_mobile_entry_point_info.yamlを追加した。スマートフォンアプリとWebサーバー、デスクトップクライアントが一つのリポジトリに同居していても、モデルが誤った攻撃面について推論し続けないようにするためである。

続いてclassify_application_local.yamlを書き換え、混乱した代理(confused deputy)や安全でないブロードキャストといった脆弱性クラスを明示的に列挙した。モデルの想起頼みにしなかったわけだ。モデル出力は非決定的なため、厳密なプロンプトを広めのプロンプトと並べて繰り返し走らせた。狭い側が明白なものを捕らえ、広い側が想定外を見つける。

OsmAndの欠陥で何ができたか

24件のうち3件がOsmAndに関するもので、最も深刻なものはコーディング上のミスというより設計上の問題として読める。

  1. ディープリンクと設定インポートを扱う画面MapActivityがエクスポートされており、端末上の他アプリから到達できる。
  2. そのインポート経路はsilent_import、replace、export_type_list_keyといったインテントのエクストラを読むが、開発側はこれらがプロセス内のAIDLチャネル経由でしか渡らないと想定していた。Androidには、外部の呼び出し元がどのエクストラを添えるかを制限する手段がない。
  3. 結果として、権限を持たないアプリでも通知も確認もなしに設定を書き込める。OsmAndが地図タイルのURLを組み立てる際に使うテンプレートまで含めてだ。
  4. そのテンプレートを攻撃者のホストに向ければ、読み込まれるすべてのタイルの座標と、計画されたすべての経路が漏れる。その間サーバーは本物のOpenStreetMapの画像を中継するため、地図は手つかずに見える。

メモリ安全性のエラーも、特殊な端末設定も絡んでいない。静的解析器がめったに指摘せず、レビュー担当も端から端まで追う時間を持たない種類のロジック欠陥である。

誤った文字列を信用したディープリンク検査

Wikipediaの件はリンクを一度タップしただけでアカウント乗っ取りに至るが、原因は文字列比較ひとつだ。ディープリンクのハンドラが、URLのオーソリティを基準ドメインと一致判定する代わりにendsWithで検証していた。そのためevil-wikipedia.orgのような類似ドメインを狙ったwikipedia://のURLが検査を通り、アプリのWebView内で描画され、アプリが自分のものとして扱うコンテキストで攻撃者のJavaScriptが動いた。

Cookieマネージャ側の二つ目の検査も同じ誤りを繰り返しており、そのページはWikimediaの全プロパティで有効なセッションCookieを読めた。

モデルが力不足だったところ

Stubbingsは弱点を率直に述べている。深刻度の見積もりだ。報告するなと指示しても影響の小さい問題を上げ続け、緩和要因が攻撃を打ち消す場合には実世界での影響を読み違えた。外部ストレージへのパストラバーサルは、アプリが同じデータで内部ストレージを優先しているなら無価値である。動作する概念実証の作成を義務づければそうした事例の一部は表に出るが、重要でないかもしれないバグに追加の実行コストを払うことになる。

埋め合わせとなった強みはAPIの知識だった。モデルはGoのpath.Cleanとfilepath.Cleanのように、セキュリティ上の意味が分かれる関数の挙動を安定して切り分け、生成された概念実証の多くはほとんど手直しを要さなかった。Help Net Securityがまとめたとおり、どの検出結果にもモバイルアプリを理解したレビュー担当が依然として必要である。

自分のプロジェクトで走らせるには

タスクフローはseclab-taskflowsリポジトリにあり、Codespaceで起動できるよう整備されている。./scripts/audit/run_mobile.sh myorg/myrepoを実行すると監査が始まり、中規模のコードベースで1〜2時間かかったうえで、該当行をSQLiteのhas_vulnerability列に書き出す。Copilotのライセンスが必要でプレミアムモデルのリクエストを消費し、GitHubはトークン費用が軽くない点をあらかじめ警告している。本誌が反対側から追ってきた潮流の、建設的な対になる話でもある。攻撃者はスキャナーに検知されなくなるまでマルウェアを書き換えるエージェントを走らせていた。

FAQ よくある質問

GitHubのAIセキュリティエージェントは無料で使えるのか

Taskflow Agentと例示されたタスクフローはオープンソースだが、実際に動かすのは無料ではない。GitHub Copilotのライセンスが必要で、一度の監査が大量のプレミアムモデルリクエストを発生させる。GitHubは、規模の大きいリポジトリではこれが無視できない費用になると明言している。

OsmAndとWikipediaの脆弱性は開示済みか

開示済みである。いずれも通常の手順で報告され、公表後に初めて内容が記述された。GitHub Security Labは24件の残りについても、公開され次第アドバイザリのページに掲載していく。

AIエージェントは人間のセキュリティレビュー担当を置き換えられるか

今回の材料からは置き換えられない。エージェントは有用な手掛かりと動作する概念実証を生み出したが、深刻度の低い問題を過剰に報告し、緩和要因がある場合には影響を誤って評価した。結局はそのプラットフォームに通じた研究者が一件ずつ検証する必要がある。

この記事への反応を残してください!

SJ

ディスカッション

ログインして投稿
読み込み中...

関連記事

Vercel、1年前に修正済みの不具合でプラットフォーム全体の AVIF を停止
Developer Tools

Vercel、1年前に修正済みの不具合でプラットフォーム全体の AVIF を停止

Vercel は報告された Next.js の RCE を libheif まで追跡し、8月13日にプラットフォーム全体で AVIF を無効化、8月25日までに sharp・libvips・libheif の修正を調整した。

Seung Jung11 日前
ZCodeが1スナップショットに42,411ファイルを梱包、復号できるのはZ.aiだけだった
Developer Tools

ZCodeが1スナップショットに42,411ファイルを梱包、復号できるのはZ.aiだけだった

Z.aiのZCodeがGit履歴ごとアリババクラウドへ送信し、暗号を解けるのは同社サーバーだけだったとリバースエンジニアリング報告が指摘した。

Seung Jung10 日前
Meta、エージェントが直接照会できるReactデザインシステム「Astryx」をオープンソース公開
Developer Tools

Meta、エージェントが直接照会できるReactデザインシステム「Astryx」をオープンソース公開

Metaは社内モノレポで8年かけて成熟させたReactデザインシステムAstryxを、6月にMITライセンスのパブリックベータとして公開しました。

Seung Jung16 日前
フォーラムの画像不具合から、研究者がOpenAI社内リポジトリに到達
Developer Tools

フォーラムの画像不具合から、研究者がOpenAI社内リポジトリに到達

Hacktron AIがlibheifのヒープオーバーフローとOpenAIのSSO不備を連鎖させ、従業員のCodexアカウントとopenai/openaiモノレポに到達した。両方の不具合は修正済み。

Seung Jung11 日前
14.5週間でRust 83万2,378行、エージェント主導の書き換えの内側
Developer Tools

14.5週間でRust 83万2,378行、エージェント主導の書き換えの内側

GitHubがコーディングエージェントを使い、43万行のTypeScriptを14.5週間で83万2,378行のRustへ移植。メモリ使用量は1,383MBから126MBに減少した。

Seung Jung11 日前
Microsoft、月間966件の記録的パッチ ボトルネックは防御側へ移った
Developer Tools

Microsoft、月間966件の記録的パッチ ボトルネックは防御側へ移った

Microsoftが9月に966件の脆弱性を修正し、2026年の累計は約2,750件に迫った。セキュリティ担当者は、難所はもはや発見ではなく仕分けだと語る。

Seung Jung13 日前