DF-2498 / manifest.json
{ "finding_id": "DF-2498", "title": "Intel MatrixRAID heap OOB read via untrusted disk_idx and unvalidated map pointer", "verdict": "reproduced", "impact": "none", "impact_note": "impact enum has no 'silent memory corruption' value; demonstrated impact is a deterministic kernel-heap OOB WRITE (44 entries in-object past disks[15] + 11/11 entries past the 2424-byte allocation + adjacent chunk smashed) and an executed ~3.0MB OOB READ -- no panic or userland leak observed on the guest (same profile as DF-2494)", "reproduce": { "build": "guest /root/dfrig3: ./build.sh (production ata-raid.c #included into dfrig3_ata.ko)", "run": "kldload ./dfrig3_ata.ko; sysctl kern.dfrig3_ata_test=10; sysctl -n kern.dfrig3_ata_status; sysctl kern.dfrig3_ata_test=24; sysctl -n kern.dfrig3_ata_status", "expected": "test10 (map->total_disks=60): parse rc=1 retained; in-object proof disks[16].serial=d0d1 CONFIRMED; past-object proof 11/11 entries disks[49..59] carry 0xC0FFEE at victim+2488..+2992 (object ends +2424); guard[33] smashed 324/2424 bytes. test24 (disk_idx 1/0xffff mixed): loop-ran marker e0e1 CONFIRMED and the 0xffff iterations read meta+3145996 (~3.0MB past the 1536-byte object; zeroed heap here, no fault)." }, "kernel_refs": [ "sys/dev/disk/nata/ata-raid.c:2165", "sys/dev/disk/nata/ata-raid.c:2190", "sys/dev/disk/nata/ata-raid.c:2230", "sys/dev/disk/nata/ata-raid.c:2243-2263", "sys/dev/disk/nata/ata-raid.c:2266-2283", "sys/dev/disk/nata/ata-raid.h:295-354" ], "fix": "fix.diff: in ata_raid_intel_read_meta() reject meta->total_disks outside [1,MAX_DISKS], reject map->total_disks outside [1,MAX_DISKS], skip disk_idx >= meta->total_disks", "artifacts": [ "README.md", "VERDICT.md", "dfrig3_ata.c", "Makefile", "atastat.c", "build.sh", "run.sh", "run_nonfatal.log", "run_test23_24.log", "env.txt", "fix.diff", "fix_build.log", "fix_validation.log", "manifest.json", "verdict.json" ] } |