DF-4498 / verdict.json
{ "finding_id": "DF-4498", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Logic defect confirmed at source level: a frame with 0 < m_pkthdr.len < 5 makes encap_frame() repack it forever (repack() preserves the sub-5 length at if_sbsh.c:721, the m_len<5 test at :667 re-fires after every goto look_for_nonzero), an unbounded alloc/copy/free spin holding ifp->if_serializer. Runtime execution impossible on the audit guest: the Granch SBNI12/16 PCI device is absent, sbsh0 never exists; trigger compiled and failed only at BIOCSETIF.", "exploit_chain": "runt frame into if_snd (bpf write as root, or unprivileged LAN peer via a bridge member) -> one CPU spins forever in kernel holding the interface serializer -> permanent local/remote DoS", "evidence": "VERDICT.md (line-by-line loop proof); run.log (BIOCSETIF: Device not configured); env.txt (pciconf absence); fix.diff (repack refuses <5 byte frames + drop-path m_freem fixing the packet leak)", "kernel_refs": [ "sys/dev/netif/sbsh/if_sbsh.c:636-643", "sys/dev/netif/sbsh/if_sbsh.c:660-672", "sys/dev/netif/sbsh/if_sbsh.c:698-724", "sys/dev/netif/sbsh/if_sbsh.c:313-321" ], "poc_changes": "authored trigger from scratch (2-byte BPF runt injection); include set for DF: sys/socket.h + net/if.h + net/bpf.h", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64", "runtime_sec": 40, "guest_dirty": 0, "build_cmd": "cc -O2 -o /tmp/df4498_trigger /tmp/df4498_trigger.c", "run_cmd": "/tmp/df4498_trigger sbsh0", "code_hash": "d59e35fb4e74b894a790a4ebb389462d243f310378a7e73c563d47fac8de72c3", "notes": "severity Low: unprivileged reachability requires sbsh0 to be a bridge member (runt from LAN peer); direct bpf vector is root-gated. Includes adjacent fix for the repack-failure mbuf leak at :668-671.", "recommended_fix": "repack(): return NULL for m_pkthdr.len < 5; encap_frame(): m_freem(m_head) on repack failure", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored post-verification against read-only sys/; no runtime baseline possible on this guest (device absent)", "fix_evidence": "fix.diff" } |