Skip to content

fix/net-traffic-validate-remote-ip - #153

Merged
xu-lang merged 1 commit into
DKapture:mainfrom
yuKing123-king:fix/net-traffic-validate-remote-ip
Sep 17, 2026
Merged

xu-lang merged 1 commit into
DKapture:mainfrom
yuKing123-king:fix/net-traffic-validate-remote-ip

Conversation

@yuKing123-king

Copy link
Copy Markdown
Contributor

修复的 Bug

net-traffic-r/--remote 参数未校验 inet_addr() 返回值。当传入非法 IP(如 1.2.3.999、空串、拼写错误)时,inet_addr 返回 INADDR_NONE = 0xFFFFFFFF,经 ntohl 后仍为 0xFFFFFFFF,被原样写入 filter map。

随后在 BPF 侧过滤逻辑(bpf/observe/net-traffic.bpf.c:96):

if (rule->remote_ip && rule->remote_ip != log->remote_ip)
    return 0;

0xFFFFFFFF 非零为真,且不等于任何真实流量 IP,导致该判断恒成立,屏蔽全部可观测流量。工具表面正常运行实际无任何输出,形成监控盲区——对常驻观测工具而言,这种静默失效比报错退出更危险。

  • 影响-r 一旦写错,工具完全失明且无任何错误提示
  • 安全等级:低危。无法借机提权,但可造成 DoS / 监控盲区
  • 触发条件:用户输入非法 IP 即可,无权限要求

改了哪些地方

仅修改 observe/net-traffic.cppparse_args()case 'r' 分支(3 行 → 9 行),不涉及 BPF 侧、Rule 结构、其他参数分支。

case 'r':
{
    in_addr_t addr = inet_addr(optarg);
    if (addr == INADDR_NONE)
    {
        fprintf(stderr, "Invalid remote ip: %s\n", optarg);
        Usage(argv[0]);
        exit(-1);
    }
    rule.remote_ip = ntohl(addr);
}
break;

为什么这样修复

  1. 在入口处拦截,而非在 BPF 侧兜底:非法输入本就不应进入 filter map,在 parse_args 校验是职责最清晰的拦截点,避免无效规则污染内核态过滤逻辑。
  2. fail-fast 报错退出:与文件内 default 分支(Usage + exit(-1))的错误处理风格保持一致,让用户立即看到原因并纠正,而不是静默运行却无输出。
  3. 最小改动:保留原有 inet_addr API(本文件已使用,无需新增 include),仅在写入 rule.remote_ip 前加一层 INADDR_NONE 校验,不改动 BPF 侧、Rule 结构或其它参数分支,回归风险最低。
  4. 打印具体非法值fprintf(stderr, "Invalid remote ip: %s\n", optarg) 比单纯 Usage 更便于定位用户输入错误。

验证方式

# 修复前:非法 IP 静默屏蔽全部流量
./net-traffic -r 1.2.3.999   # 无报错,无输出(监控盲区)

# 修复后:明确报错退出
./net-traffic -r 1.2.3.999
# Invalid remote ip: 1.2.3.999
# Usage: net-traffic [option] ...
# (exit -1)

# 合法 IP 不受影响
./net-traffic -r 8.8.8.8     # 正常工作

@github-actions

github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown

PR Reviewer Guide 🔍

(Review updated until commit b091fe0)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected

Signed-off-by: Wang Yu <wangyu6@uniontech.com>
@yuKing123-king
yuKing123-king force-pushed the fix/net-traffic-validate-remote-ip branch from 3558129 to b091fe0 Compare September 17, 2026 11:41
@xu-lang
xu-lang merged commit e6f377e into DKapture:main Sep 17, 2026
1 of 3 checks passed
@github-actions

Copy link
Copy Markdown

Persistent review updated to latest commit b091fe0

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants