DF-3318 / manifest.json
{ "finding_id": "DF-3318", "title": "in6_update_ifa() accepts arbitrary ifra_dstaddr.sin6_len -> OOB heap read (unprivileged SIOCGLIFADDR kernel-pointer leak) + kernel stack overflow (SIOCDLIFADDR)", "verdict": "reproduced", "reproduced": 1, "impact": "leak", "confidence": "certain", "fix_status": "fixed", "reproduce": { "build": "cc -O -o setup setup.c && cc -O -o leak leak.c && cc -O -o delete delete.c", "run": "./setup gif0 200; su -m nobody -c './leak gif0'; ./delete gif0", "expected": "leak: dstaddr.sin6_len=200, kernel heap pointers at dstaddr[64..71] and dstaddr[120..127], identical across runs; delete: Fatal trap 12, ip=0x8:0x0, fp=0x0; patched kernel: setup EINVAL, everything else EADDRNOTAVAIL, no crash" }, "kernel_refs": [ "sys/netinet6/in6.c:901", "sys/netinet6/in6.c:1052-1067", "sys/netinet6/in6.c:1570-1572", "sys/netinet6/in6.c:1598-1602", "sys/netinet6/in6.c:490-499", "sys/kern/sys_generic.c:668-680", "sys/kern/sys_generic.c:730" ], "artifacts": [ "setup.c", "leak.c", "delete.c", "build.sh", "run.sh", "build.log", "run.log", "run.2.log", "run.3.log", "leak_sample.txt", "delete.log", "panic.txt", "console-full.txt", "setup-run1.log", "leak-run-linklocal.log", "fix_run.log", "fix_build.log", "fix.diff", "env.txt", "README.md", "VERDICT.md", "manifest.json", "verdict.json" ] } |