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 ルールが一致せず、拒否したはずの相手が通る(逆に許可リストでは正規の相手が弾かれる)。
対応
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を使う構成では信頼するプロキシも明示する。
出典
- @r74tech 2026-04-09(報告者本人): @r74tech · 2026-04-09
- GHSA-xpcf-pg52-r92g(ipRestriction): github.com
- GHSA-xf4j-xp2r-rqqx(toSSG パストラバーサル): github.com