コンテンツに移動

コードを盲信する危険性: なぜ信頼されているソフトウェアほど検証が不十分なのか。

GitHub、Anthropic、Google、dbt、および MISP で最近確認された CVE によって、ある単純な事実が浮き彫りになりました。それは「最も信頼されているコードほど、疑問を持たれにくい」ということです。組織が AI エージェントを本番システムに接続するようになり、こうした見過ごされがちな前提条件が、強力な攻撃経路になる可能性があります。

He Wei

本記事は、ソフォスのスペシャリストによる連載記事の 1 つです。世界をリードするソフォスの Managed Detection and Response (MDR) サービスを強化し、AI 時代の脅威からお客様を保護するために活用されている最先端の研究成果をご紹介しています。

あるチームがセキュリティパッチをリリースし、アドバイザリのステータスを「解決済み」にして、次のタスクへと移りました。数週間後、アナリストたちが元のパッチから数行しか離れていない場所に、密接な関連性のある脆弱性を発見しました。外部から見ると、こうした発見は偶然や幸運、あるいは並外れた脆弱性発見の才能によるものに見えるかもしれません。しかし実際には、コードレビューに対して規律あるアプローチで臨んだ結果であるケースがほとんどです。

著名なプロジェクトで CVE の報告に携わってきた筆者自身の経験から言えば、精査に耐えうる発見は、長期間一貫して実践されてきたレビュー習慣から生まれます。それらは、「忍耐力」「粘り強さ」「他の誰もが『問題ない』と判断したコードをあえて読み進める意志」という単純な習慣です。

本記事では、そうしたレビューの習慣について掘り下げ、脆弱性の開示事例を詳しく辿りながら、AI エージェントを本番環境に接続するリスクについて検証します。開発者からアナリストに至るすべてのコードスペシャリストに向けて、攻撃者に先んじて脆弱性を特定し、安全でレジリエントなソフトウェアを構築する能力を高めるためのガイドとなります。

成果をもたらす 4 つの習慣

本記事で取り上げる脆弱性のほとんどは、厳選されたコードレビュー手法を用いて発見されました。その中に斬新な手法や複雑な手法は一つも含まれていません。単に、思い込みが積み重なり、精査が疎かになりがちなコードベース内の領域に注意を向けさせるための実践的な習慣です。以下に、筆者が特に重要だと考える 4 つの習慣をご紹介します。

類似する脆弱性を探索する

すべての修正を「解決済み案件」ではなく「新たな手がかり」として扱います。多くの場合、同じエラーが複数箇所に現れます。ある箇所でミスを犯した開発者は、同時期に別の箇所でも同じミスを犯している可能性があるからです。既知のバグや脆弱性は、次のバグや脆弱性を見つけるための最も手っ取り早いルートになります。

パッチのギャップを読み解く

元のバグ報告だけでなく、修正内容そのものを読み込みます。セキュリティパッチは通常、解決しようとしている問題よりも、範囲が狭くなっています。報告された攻撃経路がパッチによって遮断されても、その隣にある経路はそのままになっていることがあります。修正によって「何が変わったのか」、そして「何が変わらなかったのか」を理解することは、関連する脆弱性をあぶり出す上で最も確実な方法の一つです。

スキャナーによる検査に依存せず、手作業でソースレビューを行う

パターンの発見にはスキャナーを使い、動作を理解するにはソースレビューを実施します。自動化されたツールは既知のカテゴリの問題を特定するのには効果的ですが、ビジネスロジック、権限付与、または信頼境界に潜む欠陥を発見する能力ははるかに劣ります。多くの場合、こうした脆弱性は「コードが実際に行っていること」と、「開発者が意図していたこと」とのギャップに存在しており、それらを発見するには手動でコードを読み解く必要があります。

一貫性の検証

例外を探します。成熟したコードベースでは、類似した問題は往々にして同じような方法で解決されています。そうしたパターンから外れているものはすべて、詳細に調査する価値があります。例えば、共通のアプローチを使用せずに独自のクエリを組み立てている関数、検証ステップを省略しているリクエストハンドラー、他のツールとは異なる動作をするツールなどです。一貫性が欠如しているこうした場所にこそ、脆弱性が潜んでいます。

ここに目新しい要素は何もありません。すべての習慣に共通しているのは、集中力と忍耐力を持った意図的なコードレビューです。特に、すでに「修正済み」とされている、安全と見なされたコードを対象としたレビューです。

どこを見るべきか

対象の選定は、レビューの手法と同じくらい重要です。大規模なコードベースの多くには、誰にとっても詳細に検証できる限界をはるかに超える量のコードが含まれているため、どこに注意を向けるべきかを知っていることが、重要な問題を発見できるかどうかの分かれ目になります。

入念な精査をすることで、成果がもたらされる領域がいくつか存在します。これは、その領域が本質的に欠陥を抱えているからではなく、時間の経過とともに前提条件や複雑さ、そして信頼が蓄積されやすい場所だからです。

最近変更されたコード

最近変更されたコード、特にパッチが適用されてから日が浅いコードを探します。新しい修正によって新たな前提が生まれ、それらが十分に検証されていない可能性があります。パッチは報告された問題を解決する一方で、関連する経路が検証されないまま残される場合があります。

権限付与とパーミッションのロジック

「誰が、誰に対して、どのような条件下で何を実行できるか」という権限付与ロジックは、モデル化が極めて難しいことで知られています。自動化されたツールがこの点を十分理解することは稀であり、開発者によって実装方法が毎回異なることもあります。そのため、権限付与コードは、見逃される脆弱性が頻出する箇所となっています。

統合ポイント

統合ポイントとは、あるシステムが別のシステムからの入力を信頼しなければならない境界であり、データが「信頼できない状態」から「信頼できる状態」へと遷移する箇所です。時としてこの遷移は、その信頼を正当化する明確な判断や検証手順を経ずに行われることがあり、その結果、脆弱性が発生します。

上記の領域はいずれも難解なものではなく、主に、コードの意図された動作実際の動作のギャップが最も大きくなる箇所です。

CVE-2026-54358: 発見から公開まで

ある公開された事例を見れば、これらの推奨されるレビュー習慣がどのように連携して機能しているかが分かります。例に挙げられているのは、AI セキュリティなどの新しい分野とは無関係の、単純な Web アプリケーションの脆弱性です。なぜなら、対象よりも手法そのものの方が重要であるからです。

MISP は、広く利用されているオープンソースの脅威インテリジェンスプラットフォームです。権限付与関連の脆弱性 (CVE-2026-44380) に対する最近の修正では、権限の低い組織管理者がサイト管理者アカウントにアクセスできないようにすることで、権限の境界が強化されていました。

セキュリティを攻撃者の視点で見ると、この種の修正は「解決済み案件」ではなく「手がかり」に過ぎません。これは、誰がサイト管理者アカウントに対してアクションを実行できるかというルールを確立するものですが、「そのルールは、適用されるべきすべての場所で適用されているか?」という単純な疑問が浮かんできます。

大部分の管理パスでは適用されていました。しかし、1 つだけ目を引く箇所がありました。オプションのパスワードリセット操作を含む管理用メールを処理するコードが、同じ境界を同じ方法で適用する代わりに、独自のユーザークエリを実行していたのです。このコードは受信者を組織ごとにフィルタリングしてはいたものの、サイト管理者ロールを持つアカウントを排除していませんでした。「パッチのギャップを読み解く」と「一貫性の検証」が同じ場所を指し示していました。それは、以前の修正が及んでいなかった経路であり、周囲のコードとは異なる動作をしていたのです。

報告に先立ち、筆者は検証のために作成した安全なテストアカウントを使用し、自分専用のローカル環境でこの問題を再現しました。このステップは非常に重要です。概念実証 (PoC) は疑念を払拭するためのものであり、他組織のシステムやデータを使用すべきではありません。

実際、この脆弱性は、同じ組織内の組織管理者が、特権モデルで自身の上位に位置するサイト管理者アカウントのパスワードリセットをトリガーすることを可能にするものでした。公開されたアドバイザリでは、確認された影響について、「その上位特権を持つアカウントへの干渉」と説明されています。共有されているか、または設定ミスのあるメールインフラ上でリセットメールを傍受できるといった条件が重なれば、この干渉はアカウント乗っ取りへと発展する可能性があります。

この問題はプロジェクトの調整チームに報告され、その後 CVSS v4.0 スコア 7.5 (重要) の CVE-2026-54358 として公開されました。ここでは動作するエクスプロイトコードは示しません。公開アドバイザリには、必要とする方向けの情報が記載されています。

この発見には、メモリ破損も、斬新な攻撃手法も、そして「幸運」も必要ありませんでした。既知の修正内容を注意深く読み込み、完全に網羅されているかどうかを検証しただけです。この脆弱性は隠されていたわけではなく、元の修正が届いていなかった唯一の経路に存在していました。

このアプローチを採用している他のプロジェクト

この分野における筆者の研究の大部分は、AI エージェントが実際のシステムに接続するレイヤー、すなわち、ベンダーが急速にリリースを進めている Model Context Protocol (MCP) サーバーやソフトウェア開発キット (SDK) に焦点を当てています。ここでも同じ習慣が活きており、いくつかの主要プロジェクトでは、ベンダーが認めた CVE の発見につながっています。

  • dbt Labs の dbt-mcp: CLI ツールラッパーにおける引数インジェクション (CVE-2026-44968、CVSS 6.3) や、機密性の高いツール引数がマスキングされずにログやテレメトリに記録されてしまう 2 件の事例 (CVE-2026-44969CVE-2026-44970) を含む、計 3 件の問題を報告。
  • GitHub の MCP サーバー: ロックダウンモードにおける複数ユーザー間の状態混同の問題 (CVE-2026-48529)。この件は独立して報告され、同じ問題を発見した別の研究者と並んでクレジットに記載。
  • Anthropic の MCP Python SDK: 認証済みプリンシパルの検証を行わずにセッションリクエストを処理していた HTTP トランスポートの問題 (CVE-2026-52869、CVSS 7.1)。独立して報告され、別の報告者と並んでクレジットに記載。
  • Google の MCP Toolbox for Databases: 古いプロトコルバージョンにおいて、ツールごとのスコープチェックが省略されていたことによる権限付与バイパスの問題 (CVE-2026-11719、CVSS 8.6)。
  • Contentful の MCP サーバー: LLM によって制御されるホストパラメーターを管理クライアントに渡してしまうエクスポートおよびインポートツールの問題。これにより、サーバーのアクセストークンが攻撃者の制御下にあるエンドポイントへリダイレクトされる危険性があった (CVE-2026-53957、CVSS 7.7)。

これらの発見はいずれも、大規模な調査や専用のツールによるものではありません。同じレビュー習慣を、プロジェクトごとに注意深く、かつ体系的に適用した際に明らかになる種類の問題です。それぞれ非公開で報告され、責任ある開示プロセスを通じて修正されました。

(CVSS 値は、対応するアドバイザリから公開されたベーススコアです。)

報告は作業の半分に過ぎない

脆弱性を見つけることは、プロセスの一部に過ぎません。発見した問題を修正へとつなげるには、保守担当者が迅速に対応できるようにするためのレポートが必要です。そのレポートを作成すること自体が、一つのスキルと言えます。

効果的なレポートは、内容を確認してから再現するまでの時間を最小限に抑えます。多くの場合、簡潔な要約、コード内の正確な位置、問題を再現するための条件、そして非公開で共有される最小限の PoC があれば、保守担当者は数分で発見内容を確認できます。深刻度の評価は有用ではありますが、過度に重視すべきではありません。保守担当者から、実際の影響を左右する導入環境や実装の詳細が提示される場合があるからです。目標は、できるだけ高い評価を獲得することではなく、最も正確な評価を得ることにあります。長期的に見れば、明確で誠実な報告を行うという評判のほうが、個々の CVSS スコアよりもはるかに価値があります。

同様に、忍耐強さも重要です。「責任ある開示」とは、詳細が公表される前にベンダーに対して調査と修正のための妥当な機会を提供することであり、協議が停滞した際にはプロフェッショナルな姿勢でフォローアップを行い、修正プログラムが利用可能になるか、合意された開示期限が過ぎた時点で初めて公開することを意味します。

これは決して最速のアプローチではありません。しかし、保守担当者、ユーザー、そしてセキュリティコミュニティ全体にとって最も有益なアプローチなのです。

バグ追跡ツールの枠を超えて、なぜこれが重要なのか

CVE のリストを、巧妙なエクスプロイトや斬新な手法のコレクションとして捉えたくなるかもしれません。しかし現実には、多くの脆弱性は平凡なミスから生じています。例えば、ロールチェックの欠如、検証せずに渡された信頼できない入力、1 行手前で終了してしまったコードの修正、などです。これらは、アプリケーションセキュリティチームが何十年にもわたって対処し続けてきたものと同じカテゴリの脆弱性です。

変化したのは、その影響範囲です。組織が AI エージェントに対して自社のデータベース、リポジトリ、およびコンテンツシステムへのアクセス権を付与した瞬間、その統合レイヤーは既存のバグや脆弱性をすべて引き継ぐと同時に、新たなトリガーを獲得することになります。その新たなトリガーとは、「エージェントの動作を操作し得る、信頼できないコンテンツ」です。認証済みのユーザーがアプリケーションを操作するだけでは、もはや権限チェックの欠如に到達できません。エージェントが読み込み、処理し、または行動を起こすよう求められたコンテンツを介して、到達できる可能性もあります。

これに応じて、攻撃対象領域も拡大します。攻撃者はアカウントも、ブラウザセッションも、アプリケーションへの直接アクセスも必要としない場合があります。エージェントがアクセスする箇所に、巧妙なコンテンツを配置するだけで十分な場合があるのです。これにより、組織が考慮すべき脅威の範囲が広がり、対処されずに残された権限付与のギャップがもたらすコストが増大します。

共有ドキュメントの要約や、受信トレイの優先順位付けを求められたエージェントを想像してみてください。そのコンテンツ内の行が指示として解釈され、エージェントが読み取った内容に基づいて行動できる場合、信頼できないテキストによって、エージェントは付与されている権限を任意に利用してしまう可能性があります。

ただ幸いなことに、こうした状況においても、推奨されるコードレビュー手法の多くは依然として有効です。根本にある脆弱性が難解であることは滅多にありません。以前と変わらず、信頼、境界、検証、そして権限付与の問題であり、入念なソースレビューを行うことで常に発見できる種類の問題です。

自社のコードで何をチェックすべきか

本記事で紹介したコードレビュー習慣はいずれも、脆弱性の発見に役立つだけでなく、脆弱性の予防にも有効です。保守担当者にとっては、定期的に自問すべき質問リストとなります。以下に、検討すべきポイントを挙げます。

セキュリティパッチが適用された際には、それをレビューの「終わり」ではなく「始まり」として扱ってください。同じミスが他の場所 (関連する関数、並行するコードパス、あるいはそのパッチの対象外だった別のコンポーネント) に存在しないか、誰か確認しましたか?パッチが適用されたばかりのコードは、人々が安全だと思い込んでしまうからこそ、レビューで最も成果の上がる対象となります。

共通のセキュリティコントロールが導入された際は、適用されるべきすべての場所に適用されていることを確認してください。ルールは、存在するだけでは不十分であり、一貫して適用されていなければなりません。6 つの関数には適用されているが、7 つ目の関数には適用されていない境界は、ルールが技術的に存在していたとしても、脆弱性であることに変わりはありません。

AI によって生成されたツール呼び出しについては、他の信頼できない入力に対するのと同じ懐疑的な姿勢で臨んでください。モデルが、自身が読み込むコンテンツの影響を受ける可能性があるならば、モデルが生成するあらゆる出力もまた影響を受けている可能性があります。ホスト名、ファイルパス、クエリフラグメントなどのパラメーターには、Web フォームを介して送信されるデータと同様に、厳密な調査が必要です。

最後に、システム間の「継ぎ目」には細心の注意を払ってください。データがコンポーネントから別のコンポーネントへと移動するにつれて、信頼が徐々に蓄積されていく傾向にあります。信頼できないデータが信頼できるデータへと変わるポイントは必ずしも明確ではなく、往々にしてそこからセキュリティ上の前提が崩壊し始めます。

これらの知見を顧客対応業務に活かす

本記事で述べた原則はすべて、脆弱性調査の枠を超えて適用できます。ソフォスにおいて、攻撃エミュレーションや脅威主導型のペネトレーションテストは、単にスキャナーを実行して出力を確認するだけの演習ではありません。実際に、攻撃者と同じ方法でのシステム検証も行います。つまり、信頼の境界線をたどり、前提に疑問を投げかけ、他の人々が疑問を抱かなくなった経路を綿密に調べるのです。

組織が AI エージェントを本番システムに接続するようになり、その重要性はさらに増していきます。新たに統合が行われるたびに、新たな信頼関係、新たなデータフロー、そして影響経路に関する新たな前提が生まれます。今、自問すべき重要な質問は、「そうした継ぎ目が存在するかどうか」ではなく、「誰かがその継ぎ目を綿密に検証したかどうか」です。もしその問いに答えることが難しいのであれば、そこが調査を始めるべき場所です。

こうしたリスクに対して先手を打ち続けられる組織・チームとは、境界を継続的に見直し、AI 時代の統合に対しても、他の重要な攻撃対象領域に向けるのと同じ厳格な検証を行うことができる組織・チームです。

Sophos MDR サービスの詳細については、こちらをクリックしてください。

本記事では、すでに一般に公開され、文書化されている調査結果のみを扱っています。