โฌข DragonFlyBSD Kernel Audit
DF-2932 / verdict.json
โ† back to finding โ†“ download raw
{
  "finding_id": "DF-2932",
  "status": "reproduced",
  "reproduced": 1,
  "impact": "leak",
  "confidence": "certain",
  "verdict": "REPRODUCED. Wall-clock component proven end-to-end as unprivileged uid 1001 (run.log, run.determinism.log: decoded v1 timestamp equals host wall clock to the second, 3/3 runs, version nibble 1). MAC component proven at the helper level on the same guest (module.tap.log): for arpcom-first tap0, if_getanyethermac() returns the interface's exact MAC, which uuid_node() copies into the UUID node field with only the multicast bit ORed (kern_uuid.c:90) โ€” any observer clears that bit and recovers the hardware address; end-to-end via the syscall requires the first IFT_ETHER driver to be arpcom-first (all classic PCI NICs), which this vtnet-only guest lacks (its branch is DF-2931). RFC 4122 sec 6 names this exact MAC exposure; uuidgen(2) is unprivileged and jail-visible (no priv_check/prison check at kern_uuid.c:160), and the MAC/timestamp persist into on-media artifacts (hammer2 PFS ids, disklabel64 stor_uuid).",
  "exploit_chain": "",
  "evidence": [
    "run.log โ€” uid 1001, 4ร— v1 UUIDs, 'v1 timestamp decoded' == 'host wall clock'",
    "run.determinism.log โ€” timestamp tracks wall clock across 3 runs",
    "module.tap.log โ€” conforming tap0: if_getanyethermac returns exact MAC 00:bd:e8:3f:01:00 (the 6 bytes uuid_node places in the node field)",
    "VERDICT.md โ€” full narrative and impact ceiling"
  ],
  "kernel_refs": [
    "sys/kern/kern_uuid.c:86",
    "sys/kern/kern_uuid.c:90",
    "sys/kern/kern_uuid.c:99",
    "sys/kern/kern_uuid.c:142",
    "sys/kern/kern_uuid.c:160",
    "sys/net/if.c:3033",
    "sys/vfs/hammer2/hammer2_ioctl.c:902",
    "sys/kern/subr_disklabel64.c:472"
  ],
  "poc_changes": "No orchestrator seed (new pass-2 finding); trigger shared with DF-2931 (same uuidleak.c), which decodes the RFC4122 v1 timestamp to demonstrate the wall-clock disclosure.",
  "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": 90,
  "guest_dirty": 0,
  "build_cmd": "cc -O2 -o /tmp/uuidleak /tmp/uuidleak.c",
  "run_cmd": "/tmp/uuidleak (as uid 1001)",
  "code_hash": "3da1904abf6ab697031ccb4a7b40e69c4f2100f0f04147c98d6434ee2032bd72",
  "notes": "Privacy/info-disclosure class โ€” no write primitive, no uid=0 route (objective (2): manifests, ceiling = hardware identity + generation-time metadata persisted in UUID artifacts; jail-reachable). MAC end-to-end needs an arpcom-first first NIC (physical boxes); demonstrated at helper level on this guest since its only ether is vtnet (see DF-2931 for that branch).",
  "recommended_fix": "uuid_node(): always use read_random() for the node id (RFC 4122-conformant random node) instead of embedding the host MAC.",
  "fix_status": "not_testable",
  "fix_kernel_uname": "",
  "fix_baseline_reproduced": 1,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff authored (random node ids in uuid_node) and verified git-apply-clean against sys/kern/kern_uuid.c; kernel rebuild validation skipped per contract (leak-class, rebuild mandated only for memory corruption) to keep the guest clean.",
  "fix_evidence": "findings/poc/DF-2932/fix.diff (git apply --check: clean)"
}