深いスレート色の背景に描かれた抽象的なテクニカルイラスト:左側の細いドキュメンテーションサーバーの柱が、小さな長方形のカードを照らされたチャネルに沿って右側の単一のエージェントノードへ送り、そのノードは小さな鍵形のオブジェクトのリングを保持している。カードの1枚は琥珀色で縁取られ、かすかな鍵のシルエットを帯びており、それがエージェントのリングに反映されている。柱の背後にはライブラリエントリの緩やかなグリッドがあり、そのうち1つは他より暗く陰影が付けられている。細いティール色の線がチャネルを配送セグメントに分割している。人物、ロゴ、いかなる文字も含まれていない。OrcaRouterのロゴが右下隅に合成されている。
AI Safety Incidents

CVE-2026-75130:Context7のMCPドキュメントサーバーが9.0を記録し、記録には修正済みバージョンが記載されていません

著者

Alistair Wren

公開日

最新モデル · 20すべてのモデルを見る →
ベンチマーク:Artificial Analysis · 毎日更新
すべての記事に戻る

2026年8月18日、VulnCheckはContext7に対してCVE-2026-75130を公開した。Context7は、UpstashがModel Context Protocol向けに運用するライブラリドキュメントサーバーであり、コーディングエージェントがバージョン固有のドキュメントを問い合わせる先である。この脆弱性は、UpstashがCustom AI Instructionsと呼ぶ機能に存在する。ライブラリ所有者がドキュメントエントリにガイダンスを添付すると、Context7はそのガイダンスを、そのライブラリを参照するすべてのエージェントのコンテキストウィンドウに供給し、その経路上では何もそれをサニタイズしない。Noma Security(上級AI脆弱性研究者Eli Ainhornが発見者としてクレジットされている)は、汚染されたエントリによって、接続されたエージェントがプロジェクトルート内の.envファイルを読み取り、その内容を攻撃者が管理するGitHubリポジトリにissueとして送信し、「クリーンアップ」という口実でローカルフォルダを削除できることを実証した。しかもそのすべてが、通常のドキュメントリクエストから発生する。被害者は記録されていない。文書化されたエージェントインシデントの残りは、それぞれ独自の重大度、信頼度グレード、異議フラグを持ち、AIインシデントアーカイブに収められている。そこでは、この記録の隣接エントリをその隣に並べて読むことができる。

Context7のサーバーは小規模で、まず理解すべきなのはその点です。Nomaの記事は、それが2つのツール、resolve-library-idとquery-docsを公開しており、単独ではコードを実行できず、ファイルを書き込んだり、ネットワークに到達したりすることもできないと指摘しています。文書に記載された影響はすべて、開発者のマシン上でファイルシステム、シェル、ネットワークへのアクセスを実際に持つ反対側のエージェントによって実行されます。npmレジストリは、インストールベースがどれほど大きいかを示しています:@upstash/context7-mcpは4,064,176回、2026年7月22日から8月20日までの30日間、つまり公開前後の期間にダウンロードされました。

仕組み:1つの汚染されたライブラリ、それに問い合わせるすべてのエージェント

2026年3月5日のContextCrushの解説記事で説明されたNomaのデモは、サーバーではなくエージェントが実行する3つのステップで行われた。Context7のレジストリに、有害なルールを付けたライブラリを登録した。それらのルール内の指示は、エージェントにプロジェクトルート内のすべての.envファイルを検索して読み取るよう命じた。さらに指示は、その内容を攻撃者が管理するGitHubリポジトリにissueとして投稿するよう命じた。最後の一連の指示は、「クリーンアップ」のためにローカルのフォルダーとファイルを削除するよう伝えた。これらすべてをコンテキストに引き込むリクエストはごく普通のものだ — コーディングアシスタントにライブラリについての支援を求めるものにすぎない。

これが通常のプロンプトインジェクションではなくサプライチェーン問題である理由は、ペイロードがどこに存在するかにある。攻撃者は被害者のマシンに到達せず、ユーザーが開く文書にテキストを仕込む必要もない。汚染された命令はContext7自身のレジストリ上にあり、Context7自身のインフラストラクチャによってホストされ提供され、正規のドキュメントと同じ信頼済みチャネルを通じて届き、それと見分けがつかない。Nomaは、ライブラリをその背後にあるGitHubの履歴に基づいて評価するContext7の信頼スコアが、これに対する防御にならないと指摘する。長期間存在するアカウントは購入され、乗っ取られ、または作り出されうるからだ。同社自身による構造上の要点の要約は率直だ。「攻撃対象領域は、MCPサーバーが何をできるかではない。AIエージェントに何をさせられるかにある。」

1つのバグに2つのスコア

このアドバイザリには次の記載があります:CVSS 3.1 9.0(重大)およびCVSS 4.0 6.4(中)。両方のベクトルは、割り当てを行った CNA である VulnCheck から提供され、NVD も両方を変更せずに掲載し、それぞれを VulnCheck に帰属させています。この分断は誤りではありません。それは、2 つのフレームワークが同じ損害を異なるマシンに対して数えていることによるものです。CVSS 3.1 は Scope を Changed としてフラグします — インジェクションがサーバーから開発者のマシンへ、さらにその先へと越えるためです — そのため、エージェントの能力が及ぼす機密性・完全性・可用性への高い影響をすべて最大の重みで計上します。CVSS 4.0 は Scope を、脆弱なシステムと後続システムに対する個別のメトリクスに置き換えます:Context7 自体については機密性・完全性・可用性への影響を一切記録せず(VC:N/VI:N/VA:N)および下流のシステムへの高い影響(SC:H/SI:H/SA:H)、その計算式ではこれをより軽く重み付けします。サーバーは運び屋であり、被害者ではありません。

この食い違いはデータベースにまで波及している。GitHubのアドバイザリ、GHSA-97r6-3rgm-v39rは、CVEの30分後の8月18日18:32 UTCに公開され、その概要の深刻度はmediumと記載されているが、同じレコード内のCVSS 3.1ベクターは9.0を記録している。ENISAのEU脆弱性データベースは当該項目をEUVD-2026-61099としてミラーリングし、バージョン4.0のみでベーススコア6.4を保存している。本記事が参照するアーカイブレコードはこのインシデントをhighと評価している——これは公開された2つのスコアのいずれにも該当せず——またそれはアーカイブによる評価であって、それ自体の測定値ではない。

HTML card titled 'One advisory, two scores', kicked 'OrcaRouter · AI incident archive · 2026-08-18', with the subtitle 'Identical facts, two severity bands apart. Both vectors were supplied by VulnCheck as the assigning CNA; NVD carries both unchanged and attributes each to VulnCheck'. Four chips read CVSS 3.1 9.0 critical, CVSS 4.0 6.4 medium, archive grade high and EPSS 0.49%. Three columns. 'Where the vectors agree' lists attack vector network with low complexity, privileges required low because the attacker needs a registry entry rather than the victim's machine, a routine documentation request as the trigger, and high confidentiality, integrity and availability impact in both frameworks. 'Where they diverge' lists CVSS 3.1 setting Scope to Changed and booking the jump to the developer's machine at full weight, CVSS 4.0 recording the vulnerable system as unharmed at VC:N, VI:N and VA:N, the same harms booked downstream at SC:H, SI:H and SA:H with less weight, and user interaction at required in 3.1 against passive in 4.0. 'How the databases record it' lists NVD keeping both vectors each tagged disclosure@vulncheck.com, GHSA-97r6-3rgm-v39r carrying a summary severity of medium while its own v3 vector reads 9.0, ENISA EUVD-2026-61099 storing 6.4 under version 4.0 only, and the archive grading the record high, which is neither score. A footer reads 'Sources: CVE-2026-75130 in the MITRE CVE Services record, 18 August 2026; NVD API; GitHub Advisory API; ENISA EUVD API. EPSS as recorded in ENISA's mirror.'

3月の開示に対して8月に公開されたCVE

CVE識別子は2026年8月17日に予約され、8月18日18:02 UTCに公開されました。これがレコードに記載されている日付です。CNAコンテナには、アグリゲータのページには表示されない2つ目の日付も含まれています:datePublic、2026年3月5日 — 識別子が存在するより5か月半前であり、NomaがContextCrushを公開した同じ日です。アドバイザリの唯一の技術的参照はその3月の記事であり、VulnCheckはそれを技術的説明とエクスプロイトの両方にタグ付けしています。

Nomaの開示タイムラインがその隔たりを説明している。2026年2月18日に完全な報告書と実証コードを添えてUpstashへ脆弱性を報告し、2月19日にはUpstashが指摘を受け入れ、修復を開始したことを記録している。さらに2月23日には修正が「ルールのサニタイズとガードレールを伴って本番環境にデプロイされた」と述べ、Nomaによる公開と最終検証の日付を3月5日としている。Nomaの説明によれば、2月のバグは数日で解決された。

npmレジストリの日付はそのタイムラインと整合しており、その結果、影響を受ける範囲が奇妙に見える。@upstash/context7-mcp 2.1.2は2026年2月23日10:06 UTCに公開され、Nomaによれば修正が本番環境に到達した日である。その変更履歴の行には「不要な警告を削除し、ツールの説明を更新」とある。2.1.3は2026年3月4日、Nomaの記事の前日に続き、MCPエンドポイントでのGETリクエストの拒否と検索結果へのsourceフィールドの追加についての注記が付いていた。どちらのリリースノートにもサニタイズ、ガードレール、インジェクションについての言及はない。CNAの影響範囲は2.1.2で終わるため、2.1.3がその範囲外となる最初のバージョンである。

その日付には三つの解釈が当てはまり、VulnCheckもNomaもどれが正しいかを明言していない。第一は、Digital Appliedが8月18日の記事で主張し、AI Security Wireが8月22日に繰り返した解釈で、修正が後退したというものだ。2月のパッチを搭載したビルドが、8月の影響範囲内にある。第二は、範囲は単に研究者がテストしたビルドを基準に固定されているだけであり、公開前日にリリースされた2.1.3が実際の境界だというものだ。これはFeedlyを含む複数のアグリゲーターが機械的に行う推論で、Feedlyは緩和策として「バージョン2.1.3以降に更新する」と記載している。第三は、2月の修正がクライアントパッケージ内ではなく、ルールが配信される側で適用されたというものだ。その場合、npmのバージョン範囲は修正をまったく表していない。サイレントなセキュリティ修正はよくあることなので、対応する変更履歴の項目がないからといって、どちらの結論にも決着はつかない。

HTML card titled 'Six months, one affected range', kicked '2026-08-18-context7-mcp-ti-shi-zhu · dates', subtitled 'Times UTC. Noma's disclosure timeline and the npm registry dates do not say what the 23 February fix changed, and no release note mentions sanitisation'. Four chips read 18 Feb 2026 reported to Upstash, 23 Feb 2026 fix live and npm 2.1.2, 5 Mar 2026 datePublic, and 18 Aug 2026 CVE published. Three columns. 'Noma's February timeline' lists 18 February discovery with the report and proof of concept delivered to Upstash, 19 February acceptance and remediation, 23 February deployment of a fix with rule sanitization and guardrails, and 23 February at 10:06 UTC the npm publication of 2.1.2 with a changelog reading 'Remove unnecessary warning and update tool descriptions'. 'The March boundary' lists 4 March at 12:51 UTC the npm publication of 2.1.3 whose changelog covers 405 handling for GET requests and a source field, 5 March publication of Noma's ContextCrush writeup with final verification, 5 March as the CNA's datePublic for the CVE, and the affected range ending at 2.1.2, which makes 2.1.3 the first build outside it. 'The August record' lists 17 August reservation of the identifier, 18 August at 18:02 UTC publication by VulnCheck as CNA, 18 August at 18:32 UTC the appearance of GHSA-97r6-3rgm-v39r with no version ranges, no fixed version in the CVE, the VulnCheck advisory or the GHSA, and NVD last modified 22 October at status Deferred with no CPE configurations. A footer reads 'Sources: MITRE CVE Services record for CVE-2026-75130; Noma Security, ContextCrush, 5 March 2026; npm registry version times; GitHub Advisory API; NVD API, read 29 October 2026.'

何が確立されており、何が確立されていないのか

• 一次記録により確認済み。CVE識別子、8月18日の公開、CNAとしてのVulnCheck、LLMプロンプトに使用される入力の不適切な中和に対するCWE-1427分類、Noma SecurityのEli Ainhorn氏へのクレジット、およびContext7の2.1.2までの影響範囲。

• Nomaの調査によって確認された。 Custom AI Instructionsを通じたインジェクション経路、3段階の概念実証、サーバーがresolve-library-idとquery-docsのみを公開しているという所見、そして2月のバグについて実際の悪用の証拠は確認されなかったという記述。

• レジストリによって定められています。 2.1.2 の公開日である 2026年2月23日、2.1.3 の公開日である 2026年3月4日、そしてその後 4.0 を超えて 2026年10月19日には 4.4.4 に達したパッケージ系列です。

• 未確定:現在のビルドが影響を受けるかどうか。4.x系が脆弱であると述べる情報源はなく、影響がないと述べる情報源もない。CVEレコード、VulnCheckのアドバイザリ、GitHubのアドバイザリはいずれも修正バージョンを示しておらず、GitHubアドバイザリの脆弱なバージョン範囲のリストは空である。

• 確認されていない:被害者や実際の悪用。アーカイブは実被害を「false」と記録している。CISAによる8月19日の記録拡充では、Exploitationを「none」、Automatableを「no」、Technical Impactを「total」と評価した;この脆弱性はKEVカタログに含まれていない;ENISAのミラーではEPSSが0.49パーセントと記録されている。Nomaの研究はデモンストレーションであり、インシデント報告ではない。

• 立証されていない:回帰という解釈そのもの。これは修正のタイムラインとnpm公開の日付の一致に依拠しており、同じコードパスが二度失敗したと主張する一次資料は存在しない。

HTML card titled 'What the record establishes, and what it does not', kicked 'Evidence ledger · CVE-2026-75130', subtitled 'The archive grades this record confidence A, disputed false, real harm false, AI involvement confirmed. Those are its fields; this is what they rest on'. Four chips read confidence A, disputed false, real harm false, AI involvement confirmed. Three columns. 'Established by primary sources' lists CVE-2026-75130 published 18 August 2026 with VulnCheck as CNA and CWE-1427, credit to Eli Ainhorn of Noma Security, an affected range of Context7 through 2.1.2, the injection path and three-step proof of concept as Noma describes them, and npm dates of 2.1.2 on 23 February, 2.1.3 on 4 March and latest 4.4.4 on 19 October 2026. 'Not established' lists whether the 4.x line is vulnerable or clear with no source saying either way, whether February's fix regressed or was never in the client package, any victim or in-the-wild use with CISA's SSVC recording exploitation none and the flaw absent from KEV, and a fixed version, which the CVE, the VulnCheck advisory and the GHSA all leave unnamed. 'What corroborates it' lists VulnCheck's advisory restating the CVE and adding the weakness class and credit, GHSA-97r6-3rgm-v39r as an alias of the same submission thirty minutes later, ENISA EUVD-2026-61099 mirroring the record along with the CVE aggregator pages, and two secondary write-ups restating it with no newsroom coverage found on 29 October 2026. A footer reads 'Sources agree because the GitHub and ENISA entries derive from the same VulnCheck submission, not because a second party measured the flaw.'

裏付け:再述、そして重要な場面での沈黙

記録と一致する文書は、大部分がその記録に由来している。VulnCheckのアドバイザリはCVEの本文を再掲し、弱点分類と研究者クレジットを追加している。GitHubのアドバイザリは同じ投稿の別名で、同じ夜に公開され、バージョン範囲も独立したレビューもない。ENISAの項目はミラーである。アーカイブが引用する2つの情報源のうちの1つであるDigital Appliedは、8月18日に分析を公開し、8月22日に最新のレジストリ取得データで更新した。AI Security Wireは8月22日に2件目の記事を公開した。どちらもアドバイザリを再掲して回帰の推論を伝えており、どちらもそれを独立に検証したとは主張していない。

2026年10月29日のこのCVEについて、ニュースルームによる報道は見つかりませんでした。BleepingComputer、The Register、SecurityWeekの記事はなく、検索結果は報道ではなくCVEアグリゲータのページでした。この不在は、この記録をどう読むべきかを左右します。アーカイブはこれをAと評価しており、一致する一次資料によって十分に裏付けられています。実際、一次資料は一致していますが、ここでの一致はCNAの記録とそれが引用する研究との間のものであり、二つの独立した測定の間の一致ではありません。複数のアグリゲータページは、情報源が裏付けていない主張を追加しています。たとえばFeedlyの項目は、パッチが利用可能であると述べ、2.1.3を挙げていますが、どのアドバイザリにもそのような記述はありません。一方、VulDBのページは内容ではなくボットチェックを返し、まったく読めませんでした。

何が変わり、何が変わらなかったのか

2月のバグについては、Nomaの説明によれば、Upstashは数日で対応し、2月19日に受理され、2月23日に修正された。8月の記録については、CVEが参照する唯一のサプライヤー声明はUpstashによるLinkedIn投稿で、そこでベンダーアドバイザリとしてタグ付けされているが、その内容はセッションなしでは読めなかった。このリポジトリを対象としたGitHubセキュリティアドバイザリで修正バージョンを含むものはなく、NVDのエントリはステータス「保留」のままで、CPE設定がなく、最終更新日は2026年10月22日であるため、NVD自身の分析は記録に含まれていない。

パッケージ自体はリリースを続けていた。{{1}}2025年4月20日から2026年10月23日までの間に、upstash/context7リポジトリは163件のリリースを公開したが、そのリリースノートのいずれも、このCVEに言及しておらず、インジェクションを運ぶカスタム指示のサニタイズについて記述してもいない。{{/1}}これはメンテナーが記録に残すことを選んだ内容の記録であり、何も修正されなかったことの証明ではない。

記録が運用担当者に残すのは、パッチ適用の順列ではなく、エクスポージャー管理である。Nomaの推奨は、MCP統合を見直し、実行時にエージェントとサーバーの間でやり取りされる内容を検査することを中心としている。OpenCVEが提案する対応は、アップグレードすること、Custom AI Instructions機能を無効化または制限すること、サーバーに入力検証を追加することである。それらすべての運用上の形は、同じ3つの措置である。MCPサーバーのバージョンを最新版に追随させるのではなく固定し、本番用認証情報をエージェントが読める平文の環境ファイルに置かず、ツールの応答を、エージェントが従うかもしれないドキュメントとしてではなく信頼できない入力として扱うことである。

公開から10週間が経過しても、公開記録は8月18日から先へは進んでいない。識別子、2つの帯域を隔てた2つのスコア、上限が2月に出荷されたビルドである影響範囲、そして名前の示された修正はない。CVE-2026-75130のトリアージを担当する者は、自分たちのエージェントが到達できる範囲を基に判断するしかない。記録がどのバージョンをインストールすべきかを示していないからだ。