GraphQL向けライブラリgraphql-scalarsの電話番号検証処理に、短い不正入力だけでNode.jsのイベントループを長時間停止させ得るHIGH脆弱性が確認された。GraphQLPhoneNumberを公開入力に使うサーバーでは、認証前の検証段階でサービス停止が起こる恐れがある。修正版は2.0.1。
30秒でわかる / THE SIGNAL
GraphQL向けライブラリgraphql-scalarsの電話番号検証処理に、短い不正入力だけでNode.jsのイベントループを長時間停止させ得るHIGH脆弱性が確認された。GraphQLPhoneNumberを公開入力に使うサーバーでは、認証前の検証段階でサービス停止が起こる恐れがある。修正版は2.0.1。
電話番号スカラーの正規表現がCPUを占有
開発元のGHSA-x8rm-f576-gq67によると、GraphQLPhoneNumberに採用された正規表現は、特定の数字列に不正な末尾文字が続く場合にバックトラックが指数的に増える。GraphQLの文書検証や変数の値変換は通常、リゾルバー側の認証・認可より先に実行されるため、対象スカラーを外部入力に公開したサーバーでは未認証の要求が処理を妨げる可能性がある。開発元勧告にはNode.js上の再現計測とGraphQL Yogaでの検証結果が記載されているが、実環境の攻撃被害を確認した報告ではない。
修正版2.0.1へ更新し、スキーマの使用箇所を点検
開発元は影響する実装をgraphql-scalars 1.24.1から2.0.0までと説明し、2.0.1で正規表現の計算量を改善した。リリースノートでもPhoneNumberの正規表現を線形時間で評価できる形へ変更したと明記する。利用者は依存関係の実バージョンと公開GraphQLスキーマのPhoneNumber使用箇所を確認し、2.0.1以上への更新を優先する。脆弱性の重大度はHIGH、CVSS 7.5。特定のスカラーを使っていないアプリケーションに同じ影響があると断定すべきではない。