Skip to content

fix(security): URLTest 与 fetch 默认拒绝私网目标#24

Open
milangree wants to merge 3 commits into
MiChongs:mainfrom
milangree:pr/ssrf-private-target-guard
Open

fix(security): URLTest 与 fetch 默认拒绝私网目标#24
milangree wants to merge 3 commits into
MiChongs:mainfrom
milangree:pr/ssrf-private-target-guard

Conversation

@milangree

Copy link
Copy Markdown
Contributor

背景

控制面 URLTest 与订阅/规则集 fetch 可被用作 SSRF:探测 loopback、RFC1918、云元数据等目标。

实现

net_guard

  • 新增 core-outbound::net_guard,统一判断主机名/IP 是否允许作为外部拉取目标

fetch

  • 解析前后与 redirect 每跳复查目标
  • 日志只记录 host
  • FetchOptions::allow_private_targets 默认 false,仅单测可显式放行

URLTest

  • test_node_with 在 dial 前拦截私网/元数据目标

安全与兼容边界

  • 生产路径 default-deny private
  • 不改变正常公网订阅与 generate_204 测速

验证

  • cargo test -p core-outbound -p core-fetch -p core-runtime
  • 本地 chunked body 测试在 allow_private_targets=true 下通过
  • URLTest 对 127.0.0.1 / 169.254.169.254 返回 BlockedTarget

新增 core-outbound net_guard,拦截 loopback/RFC1918/CGNAT/链路本地/云元数据。
URLTest 与订阅/规则集 fetch 在解析前后及 redirect 每跳复查目标。
fetch 日志仅记录 host;单测可通过 allow_private_targets 显式放行本地服。
从 health 中剥离 dial 短期 dead 逻辑,本 PR 只保留目标拦截。
@MiChongs

Copy link
Copy Markdown
Owner

@copilot resolve the merge conflicts in this pull request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants