テック技報最新号へ →
コード

Hono の ipRestriction() は 4.12.12 以上に(IPv4 射影 IPv6 アドレスで許可・拒否がすり抜ける)

Node.js のデュアルスタック環境では IPv4 のクライアントが ::ffff:127.0.0.1 のような IPv4 射影 IPv6 アドレスとして見える。hono 4.12.11 以前の ipRestriction() はこれを IPv4 に正規化しないため、denyList: ['127.0.0.1'] や 10.0.0.0/8 のような IPv4 ルールが一致せず、拒否したはずの相手が通る(逆に許可リストでは正規の相手が弾かれる)。

@r74tech · 投稿 2026-04-09
#security#hono#typescript#cloudflare#ip-restriction#CVE

対応

sh
npm ls hono          # 使っているバージョンを確認
npm i hono@^4.12.12  # CVE-2026-39409 / CVE-2026-39408 の修正版
  • 上げられない間は、IPv4 ルールに加えて ::ffff: 付きの表記も並べる、あるいは手前のリバースプロキシや WAF で IP 制限をかける。

同時に直ったもう1件(CVE-2026-39408)

hono/ssg の toSSG() で、ssgParams に ../pwned のような値が入ると出力ディレクトリの外にファイルを書けた(4.0.0〜4.12.11)。ビルド時だけの問題だが、外部データから SSG のパラメータを作っている場合は影響する。

一般化できる教訓

  • IP で許可・拒否するときは、比較する前に必ずアドレスを正規化する(IPv4 射影 IPv6 → IPv4、表記ゆれの統一)。文字列の一致で判定しない。
  • アプリ内の IP 制限は「前段のプロキシが渡すアドレスをどう解釈しているか」に左右される。X-Forwarded-For を使う構成では信頼するプロキシも明示する。

出典

X の元の投稿を開く