DF-4763 / verdict.json
{ "finding_id": "DF-4763", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "NOT runtime-testable on the audit guest: fwe(4) requires an OHCI-1394 FireWire controller and the QEMU guest has none (env.txt / run.log: if_nametoindex(fwe0) -> Device not configured); QEMU has no 1394 device model - contract status not_testable, mapped to inconclusive for the poc_results enum. The bug itself is unambiguous straight-line code: M_PREPEND(m, ETHER_ALIGN, M_NOWAIT) at if_fwe.c:506 frees the mbuf chain and returns NULL on allocation failure (sys/sys/mbuf.h:465-482, sys/kern/uipc_mbuf.c:1500-1521), and fwe_as_output() unconditionally dereferences m->m_pkthdr.len at if_fwe.c:509 and 511 -> NULL+offset read -> guaranteed kernel panic. Reachable by any unprivileged local user sending traffic on an admin-configured fwe0 under mbuf starvation; pure DoS, no write primitive.", "exploit_chain": "", "evidence": "VERDICT.md (path:line proof incl. M_PREPEND contract); run.log (PoC builds BUILD_OK on guest, exits 2 fwe0 not present as root and unprivileged); fix.diff (NULL check returning xfer to the free list)", "kernel_refs": [ "sys/dev/netif/fwe/if_fwe.c:506", "sys/dev/netif/fwe/if_fwe.c:509", "sys/dev/netif/fwe/if_fwe.c:511", "sys/sys/mbuf.h:465", "sys/kern/uipc_mbuf.c:1500", "sys/kern/uipc_mbuf.c:1511" ], "poc_changes": "Authored from scratch (no seed); if_nametoindex probe + SO_BROADCAST UDP flood; built and ran first try on guest (BUILD_OK, exit 2 hardware-absent).", "attempts": 2, "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": 120, "guest_dirty": 0, "build_cmd": "cc -O -o fwe_trigger fwe_trigger.c", "run_cmd": "./fwe_trigger fwe0 (plus mbuf-pressure spray on real hardware)", "code_hash": "9ce2d397e81255dd447f4c4ee1f858b257fb5c74c4cd982afd61aef5d841d1df", "notes": "Contract-status not_testable persisted as inconclusive (poc_results enum lacks not_testable). Guest left clean. Confidence certain refers to the bugs existence in code (deterministic deref of NULL on a documented failure path); triggering probability is governed by m_gethdr(M_NOWAIT) failure under memory pressure.", "recommended_fix": "Check m == NULL after M_PREPEND: count oerror, STAILQ_INSERT_TAIL the xfer back onto fwe->xferlist, and continue (see fix.diff).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored against read-only sys/; cannot validate on the guest (fwe driver cannot attach without OHCI-1394 hardware).", "fix_evidence": "fix.diff in this pack" } |