DF-2279 / verdict.json
{ "finding_id": "DF-2279", "status": "reproduced", "reproduced": 1, "impact": "leak", "confidence": "certain", "verdict": "REPRODUCED as root on the stock guest (/dev/pass0 present from the QEMU storage, 0600 root:operator): CAMIOCOMMAND with XPT_PATH_INQ succeeds and returns ccb_h.path = 0xfffff8008d6c0e80 plus another canonical kernel pointer (offset 0x98) in the copied-back CCB. Kernel text/data addresses disclosed to the privileged caller; kernel-internal codes (XPT_GDEVLIST, XPT_DEV_MATCH, XPT_ASYNC, ...) remain exposed to operator-group members. Privilege-gated surface: open is caps_priv_check(SYSCAP_RESTRICTEDROOT)-checked and the node is 0600 root:operator.", "exploit_chain": "no escalation path: /dev/pass0 is 0600 root:operator and open is SYSCAP_RESTRICTEDROOT-gated; kernel pointer disclosure to privileged callers", "evidence": "run.log: CAMIOCOMMAND XPT_PATH_INQ rc=0 and the copied-back CCB contains ccb_h.path = 0xfffff8008d6c0e80 plus another canonical kernel pointer at offset 0x98", "kernel_refs": [ "sys/bus/cam/scsi/scsi_pass.c:474", "sys/bus/cam/scsi/scsi_pass.c:494", "sys/bus/cam/scsi/scsi_pass.c:596" ], "poc_changes": "Userland cam headers live under bus/cam/ (not sys/cam/) and CAMIOCOMMAND is kernel-side only - mirrored the _IOWR(CAM_VERSION,2,union ccb) definition locally. fix.diff v1 denied FreeBSD-only func codes (XPT_ASYNC/XPT_RESET) that do not exist here and failed the batch build; corrected the denylist to the DFly enum actually present (XPT_GDEVLIST, XPT_REL_SIMQ, XPT_TERM_IO) after confirming XPT_DEV_MATCH/XPT_RESET_BUS are already XPT_FC_XPT_ONLY-gated.", "attempts": 3, "guest_uname": "DragonFly dfbsd 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": 20, "guest_dirty": 0, "build_cmd": "cc -o pass_xpt pass_xpt.c", "run_cmd": "as root: ./pass_xpt", "code_hash": "f3b2e54947891ebecfd0ac62da2cc3c6044c0d5d59706298f35eb82c92ad63e4", "notes": "", "recommended_fix": "Deny the kernel-only function codes not already XPT_FC_XPT_ONLY-gated (XPT_GDEVLIST, XPT_REL_SIMQ, XPT_TERM_IO) before executing them.", "fix_status": "not_testable", "fix_kernel_uname": null, "fix_baseline_reproduced": null, "fix_patched_reproduced": null, "fix_verdict": "fix.diff compile-validated in the batch combined kernel build (all 37 diffs of this batch applied to in-guest /usr/src; make -j6 nativekernel KERNCONF=X86_64_GENERIC, see batch build log referenced in VERDICT.md); no behavior A/B performed for this Info-tier item; behavior A/B intentionally skipped for Info tier", "fix_evidence": "batch combined kernel build log (see findings/poc/_batch41 note in VERDICT.md)" } |