GitHub製AIがAndroidの脆弱性24件を発見

GitHub Security Labの研究者Kevin Stubbings氏は9月28日、自社製のオープンソースAIセキュリティエージェントを使ってAndroidアプリを監査し、24件の脆弱性を発見・報告した経緯を明らかにした。使用したツールはseclab-taskflow-agentと呼ばれ、YAMLで記述された一連の「タスクフロー」が中核をなす。これが大規模言語モデルを一歩ずつ導き、コードを読み、エントリーポイントを分類し、問題を見つけ、検証コードを書かせる。

このタスクフローはこれまで汎用的なコード監査に使われてきたが、今回はモバイル向けに調整され、gather_mobile_entry_point_info.yamlとclassify_application_local.yamlという2つのファイルが新たに追加された。それぞれアプリのエントリーポイントの整理と脆弱性の分類を担う。

動かし方

記事によると、ユーザーはGitHub Codespaces上で監査スクリプトを実行し、環境の初期化を数分待ってから、エージェントを走らせておく。中規模のリポジトリでおよそ1〜2時間かかる。結果はSQLiteデータベースに書き込まれ、audit_resultsテーブルを開いてhas_vulnerabilityにチェックが入った行を絞り込むと、エージェントが問題ありと判断した箇所が分かる。

タスクフローがカバーする脆弱性の種類は、Androidでおなじみの難題に集中している。Intent関連のconfused deputyと安全でないブロードキャスト、WebView内のクロスアプリスクリプティング、Webコンテンツに公開されたJavaScriptブリッジ、パストラバーサル、ディープリンク解析ロジックの誤り、そしてCookieやログイントークンの漏えいだ。記事によれば、分類リストは12のCWEカテゴリーにまたがるという。

詳しく紹介された2つの事例

OsmAndは、ダウンロード数1000万件を超えるオープンソースの地図・ナビアプリだ。エージェントは設定インポート機能に3件の問題を見つけた。うち1件は、同じ端末上の悪意あるアプリが権限を一切要求せずに、Intentの付加パラメータを介して設定を静かにインポートし、ユーザーの位置情報や移動経路を追跡できてしまうというものだ。

WikipediaのAndroidアプリでは、ディープリンクの解析ロジックに脆弱性が見つかった。攻撃者が悪意あるリンクを作成すれば、ユーザーを偽装ページへ誘導し、そこからCookieを窃取、最終的には長期間有効なログイントークンを使ってアカウントを乗っ取ることができる。

Stubbings氏は、そのプログラミング言語のソースコードを与えていなくても、モデルが様々な言語のセキュリティ関連APIの挙動をここまで正確に理解しているとは思わなかったと書いている。エージェントが書いた概念実証コードも、ごくわずかな修正で動作したという。

"LLMs are good at finding vulnerabilities but struggle at estimating severity."

大規模言語モデルは脆弱性を見つけるのは得意だが、深刻度の見積もりは苦手だ。

できないこと

記事は限界についても率直に書いている。プロンプトで明示的に避けるよう指示しても、モデルは低深刻度の問題を報告しがちだ。緩和策が講じられている脆弱性については、実際の危険度を正しく判断できない。複雑なデータフローの優先順位付けの問題は見つけられない。信頼できる概念実証コードを得るには何度も試行が必要で、デバッガーの併用や追加のプロンプトが要ることもある。結論として、すべての発見はモバイルセキュリティに詳しい研究者による人手のレビューが必要だという。

コスト面では、実行にはGitHub Copilotライセンスが必要で、プレミアムなモデルリクエストを消費する。記事は、大規模なリポジトリでは大量のツール呼び出しが発生しトークン消費が大きくなると注意を促しているが、具体的にどのモデルを使ったかは明記していない。

中国の開発者にとって

タスクフローとスクリプトはGitHub上でオープンソース公開されており、中国のチームも手を加えれば自社のAndroidアプリの監査に使える。ハードルとなるのはCopilotライセンスと海外モデルへの依存だ。タスクフロー自体はYAMLで書かれたプロンプトと手順の組み合わせにすぎないため、国産モデルへの置き換えは理論上可能だが、実際の性能を比較した公開データは今のところない。

Androidの断片化が進む中国市場では、この種のツールの価値はより大きい。各端末メーカーのアプリストアやミニプログラムのコンテナ、スーパーアプリに組み込まれたWebViewやJavaScriptブリッジは、まさにこのチェックリストが対象とする脆弱性の範囲に含まれる。GitHubは今後、タスクフローをWebアプリやデスクトップアプリにも拡張し、コミュニティからの貢献を受け付ける計画だという。

参考資料:GitHub公式ブログ、CocoLoop、GitHub Security Labのオープンソースリポジトリ。脆弱性の件数、OsmAndのダウンロード数、1回あたりの監査時間はいずれもGitHubブログの記載に基づく。