本文へ移動
情シスのミカタ
ニュース約4分で読めます

GraphQL Toolsにプロトタイプ汚染の脆弱性 ゲートウェイは12.0.2以降へ

GraphQLの開発に広く使われる部品@graphql-tools/utilsに、プロトタイプ汚染の脆弱性CVE-2026-114604(High)が見つかりました。対象は10.10.1から12.0.1までで、12.0.2で直っています。上流のGraphQLのサーバーから届く分割された応答を、ゲートウェイなどでまとめる処理が入口です。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
GraphQL Toolsにプロトタイプ汚染の脆弱性 ゲートウェイは12.0.2以降へ

この記事のまとめ

  • @graphql-tools/utilsのmergeIncrementalResultという関数に、プロトタイプ汚染の脆弱性CVE-2026-114604がありました。深刻度はHigh(CVSS 4.0で8.4)で、10.10.1から12.0.1までが対象、12.0.2で直っています。
  • 上流のGraphQLのサーバーから届く@defer・@streamの分割された応答に細工があると、受け取った側のNode.jsの処理全体の既定の値を書き換えられ、権限の判定などが狂うおそれがあります。
  • 勧告によると、GraphQL Tools自身の本番のコードはこの関数を直接呼んでいません。当社が確かめた範囲では、HTTPで上流に問い合わせる@graphql-tools/executor-httpが呼んでいます。
  • 依存関係の中の@graphql-tools/utilsの版を確かめ、12.0.2以降に上げます。12系より前の系列には、直った版がありません。
こんな方に#20代#30代#40代実務

GraphQLのサーバーやゲートウェイを動かしている会社は、依存関係の奥にある1つの部品の版を確かめる必要があります。GraphQLの開発に広く使われるnpmの部品@graphql-tools/utilsに、プロトタイプ汚染の脆弱性CVE-2026-114604が見つかりました。GitHubの勧告のデータベースは、深刻度をHigh(CVSS 4.0で8.4)としています。対象は10.10.1から12.0.1までで、12.0.2で直っています。

プロジェクトの勧告は2026年9月30日(米国時間)に出ており、直した12.0.2も同じ日に公開されました。GitHubの勧告のデータベースには、10月23日(日本時間)に載っています。

GitHub Advisory DatabaseのCVE-2026-114604のページ。題はGraphQL Tools: Prototype pollution in mergeIncrementalResult via non-primitive path segments。深刻度はHigh、CVSS 4.0で8.4。パッケージは@graphql-tools/utils(npm)、影響する版は10.10.1以上12.0.1以下、直った版は12.0.2。3週間前にardatan/graphql-toolsで公開、2日前に更新。
GitHubの勧告。対象は10.10.1〜12.0.1、直った版は12.0.2出典: GitHub Advisory Database「GHSA-c4qx-w738-7hr3」(引用)

何が危ないのか

問題があるのは、mergeIncrementalResultという関数です。GraphQLには、応答を一度に返さず、@deferや@streamという指示で、あとから少しずつ分けて返す仕組み(incremental delivery)があります。この関数は、あとから届いた分を、すでに受け取った結果の中のどこに入れるかを、応答に書かれた「場所(path)」をたどって決めます。

勧告によると、関数は危ない名前(__proto__など)を場所の指定から外す確かめをしていましたが、その確かめをすり抜ける書き方がありました。すり抜けると、受け取った側のNode.jsの処理の中で、すべてのオブジェクトの共通の土台(Object.prototype)に、好きな項目と値を足せてしまいます。

勧告は、検証で「管理者かどうか」を表す項目を土台に足し、あとから作った何も入っていないオブジェクトでも、管理者と判定されるようになった例を示しています。応答の中だけでなく、同じ処理の中の関係の無いコードの動きまで変わるのが、プロトタイプ汚染の怖さです。

どんな条件で影響するか

勧告が挙げる前提は次のとおりです。

前提 内容
関数を使っている 上流のGraphQLのサーバーなどから届く分割された応答を、mergeIncrementalResultでまとめている
応答を確かめていない まとめる前に、場所の指定が文字列や数字だけかを確かめていない。既定ではこの確かめは無い
上流を攻撃者が握れる 上流のサーバーが悪意を持つ、乗っ取られている、または通信の途中で書き換えられる
土台を固めていない Object.prototypeを凍結(変更できなく)していない

勧告は、GraphQL Tools自身の本番のコードはこの関数を直接呼んでおらず、分割された応答を組み立てる利用者向けに公開されている関数だとしています。当社がnpmで公開されている部品を調べた範囲では、HTTPで上流のGraphQLのサーバーに問い合わせる@graphql-tools/executor-http(3.5.0)がこの関数を呼んでいました。複数のサービスを1つにまとめるゲートウェイ(GraphQL MeshやHive Gatewayなど)は、この部品を通して上流に問い合わせることがあります(当社調べ)。

版 扱い
10.10.0以前 対象外。この欠陥が入る前の作り
10.10.1〜12.0.1 影響する
12.0.2以降 直っている。10月25日時点の最新は13.1.3

10系と11系には、直った版がありません。12.0.2以降へ上げる必要があります。

影響する会社・しない会社

  • 影響する: GraphQLのゲートウェイやBFF(画面向けの中継のサーバー)をNode.jsで動かし、ほかのGraphQLのサーバーに@defer・@streamで問い合わせている会社。とくに、社外や別の部署が運用する上流につないでいる場合
  • 確かめる: GraphQL MeshやHive Gatewayなど、@graphql-tools/executor-httpを使う部品を入れている会社。依存関係の中の@graphql-tools/utilsの版を見ます
  • 影響が小さい: 上流のサーバーも自社で管理し、通信を暗号化して経路を守っている会社。勧告の前提の「上流を攻撃者が握れる」に当たりにくくなります(当社の見立て)
  • 影響しない: @graphql-tools/utilsを使っていない会社や、10.10.0以前を使っている会社

情シスが今日やること

  1. 依存関係の版を調べます。 GraphQLを使うNode.jsのシステムで、npm ls @graphql-tools/utils などを実行し、入っている版を一覧にします。直接入れていなくても、ほかの部品を通して入っていることがあります。
  2. 12.0.2以降に上げます。 10.10.1〜12.0.1が入っていれば、12.0.2以降に上げ、lockファイルも更新します。依存する部品の版の範囲が古い系列に縛っている場合は、その部品も新しくします。
  3. 上流の範囲を確かめます。 ゲートウェイがどの上流のGraphQLのサーバーに問い合わせ、@defer・@streamの応答を受けているかを、開発の担当と確かめます。社外の上流があれば、優先して上げます。
  4. 依存関係の通知を有効にします。 GitHubのDependabotなどで、間接的に入る部品の脆弱性の通知を受け取れるようにします。今回のように、勧告がデータベースに載るまで時間がかかることもあります。

よくある質問

QGraphQLを使っていれば、全部影響しますか。

A勧告は、上流のGraphQLのサーバーなど信頼できない相手から届く分割された応答(incremental delivery)を、この関数でまとめる場合に影響するとしています。上流が悪意を持つか、乗っ取られているか、通信の途中で書き換えられることが前提です。

Q10.10.0や11系に、直った版はありますか。

AGitHubの勧告では、直った版は12.0.2だけです。10.10.0以前は、この欠陥が入る前の作りなので対象外とされています。10.10.1以降の10系と11系を使っている場合は、12.0.2以降へ上げます。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月25日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします