DF-3456 / manifest.json
{ "verdict": "reproduced", "impact": "pf-policy-bypass", "confidence": "certain", "reproduce": { "build": "cc -O2 -o ab anchor_bypass.c && cc -O2 -o dns dns_flood.c (in-guest, unprivileged)", "run": "sh setup_pf.sh (root) ; ./ab recv 5555 110 & ./ab recv 5556 110 & ; ./ab flood 6 90 & ./dns 24 90 400 (unprivileged)", "expected": "receiver on 5555 (pf 'block drop' inside anchor sandwich) logs 'BYPASS! should be 0' datagrams; control 5556 (identical block in main ruleset) stays 0; per-rule counters show the sandwich block lagging surrounding decoys by thousands of evaluations (walk-skip signature). On the fixed kernel: 0 deliveries and flat counters." }, "kernel_refs": [ "sys/net/pf/pf.c:143-148", "sys/net/pf/pf.c:2501-2533", "sys/net/pf/pf.c:2535-2570", "sys/net/pf/pf.c:3141-3146", "sys/net/pf/pf.c:3978-3986", "sys/net/pf/pf.c:4389-4393", "sys/net/pf/pf_ioctl.c:3199-3263", "sys/kern/lwkt_token.c:726-785" ], "artifacts": [ "README.md", "VERDICT.md", "anchor_bypass.c", "dns_flood.c", "setup_pf.sh", "run.sh", "build.log", "run.log (v1: ruleset misconfiguration caught by control port)", "run.2.log (v2: flat anchor - no tear)", "run.3.log (v2 nested: inline nested anchors not walked - 0 evals)", "run.4.log (v4: empty inline anchors optimized out by pfctl)", "run.5.log (v5: walked inner anchors populated via pfctl -a spam/spam/innerN; no tear lo-only)", "run.6.log (REPRODUCED: 117 bypassed datagrams + counter forensics 20,791 skips)", "run8_supplement.log (2nd reproduction: 1 bypassed datagram, +8,700 skips)", "run.9_fixed.log (fix validation run 1: 0 deliveries, flat counters)", "env.txt", "kbuild_tail.txt", "scale.conf (diagnostic ruleset for the separate single-sender wedge observation)", "fix.diff", "manifest.json", "verdict.json" ] } |