プロジェクト

全般

プロフィール

機能 #10509

未完了

[VEND-SEC-02] safeFetch SSRF境界強化・IPv6ループバック遮断

Redmine Admin さんが12日前に追加. 12日前に更新.

ステータス:
解決
優先度:
通常
担当者:
-
開始日:
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:

説明

親Epic: #10493
先行対象: #10507

背景

診断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-local fe80::/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なし。

他の形式にエクスポート: Atom PDF