DF-3178 / manifest.json
{ "finding_id": "DF-3178", "title": "hpfs_mountfs performs no super/spareblock census validation: unvalidated su_btotal panics the kernel at mount (bread > MAXBSIZE) or wires attacker-chosen kernel heap (32 MiB demonstrated) and is echoed verbatim into statfs", "file": "sys/vfs/hpfs/hpfs_vfsops.c", "verdict": "reproduced", "impact": "panic", "confidence": "certain", "reproduce": { "build": "./build.sh", "run": "panic variant: python3 craft_img.py df3178p.img panic; guest: vnconfig vn0 df3178p.img && /root/mount_ro /dev/vn0 /tmp/hpfsmp | wiring variant: ./run_wiring.sh", "expected": "panic variant: 'panic: getblk: size(1048576) > MAXBSIZE(65536)' with hpfs_bminit in the trace. wiring variant: MOUNT_RC=0 wall=0s, vmstat -m 'HPFS_mount 3 32.1M', v_free_count drops ~9,000 pages, released on umount." }, "kernel_refs": [ "sys/vfs/hpfs/hpfs_vfsops.c:265-291", "sys/vfs/hpfs/hpfs_vfsops.c:301", "sys/vfs/hpfs/hpfs_vfsops.c:408", "sys/vfs/hpfs/hpfs_subr.c:109-120" ], "artifacts": [ "README.md", "VERDICT.md", "craft_img.py", "mount_ro.c", "statfs_probe.c", "build.sh", "run_wiring.sh", "run_full.sh", "build.log", "run.log", "run_wiring_partial_df0927_trip.log", "run_panic_attempt.log", "boot_panic_console.log", "panic.txt", "env.txt", "fix.diff", "manifest.json", "verdict.json" ] } |