操作
機能 #10509
未完了[VEND-SEC-02] safeFetch SSRF境界強化・IPv6ループバック遮断
ステータス:
解決
優先度:
通常
担当者:
-
開始日:
2026-07-26
期日:
進捗率:
100%
予定工数:
自動実行:
from_agent:
to_agent:
lock_required:
context_json:
session_id:
priority_custom:
start_time:
end_time:
execution_time:
acceptance_criteria:
assigned_role:
human_gate:
gate_type:
chain_root_id:
wave_id:
説明
背景¶
診断V2のセキュリティレビューで、既存safeFetchはURL scheme制限、DNS解決後IP固定、IPv4 private/link-local、リダイレクト毎の再解決を実装済みと確認した。一方、isPrivateIpのIPv6判定で::1(loopback)と::(unspecified)が明示遮断されていない。
目的¶
V1/V2共通の公開URL取得基盤を堅牢化し、内部ネットワーク・メタデータ・ローカルサービスへのSSRFを防止する。
作業¶
- IPv6 loopback
::1と unspecified::を遮断 - IPv4-mapped IPv6のprivate判定を維持
- ULA
fc00::/7、link-localfe80::/10を維持 - IPv4 loopback/private/link-local/CGNATの回帰確認
- unsupported scheme、credentials、single-label container hostnameの拒否確認
- リダイレクトごとにresolvePublicAddressが実行される構造を契約テスト
- 秘密値・内部URLをログへ出さない
受入基準¶
- isPrivateIp境界テスト合格
-
::1、::、IPv4 mapped privateを遮断 - 公開IPv4/IPv6を誤遮断しない代表試験
- V1/V2構文・既存診断回帰合格
- Claude Codeレビューapprove
- #10507本番反映前に解決
Redmine Admin さんが12日前に更新
- ステータス を 新規 から 解決 に変更
- 進捗率 を 0 から 100 に変更
[PM/開発リード最終検収]
SSRF境界強化を完了。
commit: 95a4bd0 fix(vend): harden SSRF address validation
実装:
- IPv6 literal角括弧正規化
- :: / ::1 / ULA / link-local / multicast / IPv4-mapped privateを遮断
- IPv4 private / loopback / link-local / CGNAT / metadata / benchmark / documentation / multicast-reservedを遮断
- public IPv4/IPv6代表値を許可
- scheme、credentials、single-label container hostnameを外部接続前に拒否
- redirectごとにcurrent hostnameをDNS/IP再検証する契約をテスト
Node20 Docker試験: SSRF・DB・V2採点を含む13/13合格。V1/V2実診断回帰合格。Claude Code再レビュー approve / Blockingなし。
操作