Node.js向けHapi関連ライブラリの@hapi/contentとjoiに、認証前のHTTP入力などからサーバーのイベントループを長時間停止させるHIGH脆弱性が公表された。いずれも正規表現の非効率な処理が原因で、開発元は@hapi/content 6.0.3、joi 17.13.9/18.3.1で修正した。影響はmultipartの受付設定やメール検証の使用条件によって異なる。
30秒でわかる / THE SIGNAL
Node.js向けHapi関連ライブラリの@hapi/contentとjoiに、認証前のHTTP入力などからサーバーのイベントループを長時間停止させるHIGH脆弱性が公表された。いずれも正規表現の非効率な処理が原因で、開発元は@hapi/content 6.0.3、joi 17.13.9/18.3.1で修正した。影響はmultipartの受付設定やメール検証の使用条件によって異なる。
multipart/form-dataの解析が認証前に止まる恐れ
CVE-2026-119202(GHSA-8494-f6mr-cjpv)は、@hapi/contentのContent.disposition()がContent-Dispositionパラメータを正規表現で解析する際、イコール記号を持たない長いトークンを繰り返し検査して二次計算量になる問題だ。@hapi/pezがmultipart/form-dataを処理するHapiルートでは、ハンドラや入力検証に到達する前に発生する。開発元の検証では約128KBの入力で約7秒、約1MBでは数分間処理が停止する例が示されている。外部公開のmultipart受付ルートがある場合、認証不要のDoSにつながり得る。
@hapi/content 6.0.3で修正、サイズ制限は補助策
公式GHSAによると@hapi/content 6.0.2以前が影響を受け、修正版は6.0.3。旧名contentの3.0.6~4.0.6も対象で、旧パッケージ側の修正版は記載されていない。パーサーの正規表現を変更し、長いトークンでも線形時間で処理できるようにした。更新までの一時的な負荷軽減策として、multipartを受け付けるルートのpayload.maxBytesを小さくすることが示されているが、根本的な修正の代替ではない。
Joiの複数メールアドレス検証にもHIGHのDoS
CVE-2026-118772(GHSA-4528-x5fx-h6hg)は、Joi.string().email({ multiple: true })の区切り文字処理に関する別件だ。長い空白文字列が入力されると、正規表現の試行が二次計算量になり、開発元の検証では約100KBの空白を処理するのに数秒かかった。外部入力をこのルールで検証し、事前の有効な長さ制限がない場合にイベントループがブロックされ得る。通常の単一メール検証すべてに影響するとの意味ではない。
修正版と現場の確認ポイント
joiは17.13.9と18.3.1で修正された。旧@hapi/joiの16.0.0以降についてはGHSAに修正版が記載されていない。更新できない場合、Joiの.max()による事前の長さ制限が回避策として示されている。ただしabortEarly:falseでは最大長に違反してもemailルールが動くため、同じ回避策が成立しない。依存関係の実際の解決バージョンと、外部公開のmultipartルート・multiple:trueの利用有無を確認することが重要だ。今回の2件について、CISA KEVへの掲載や実環境での悪用を裏付ける情報は確認していない。