⬢ DragonFlyBSD Kernel Audit
DF-3319 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-3319",
  "file": "sys/netinet/in.c",
  "title": "v4 SIOCDLIFADDR kernel stack buffer overflow: unvalidated/confused ia_sockmask.sin_len as bcopy length into 64-byte on-stack in_aliasreq (in.c:949-956)",
  "verdict": "reproduced",
  "impact": "panic",
  "confidence": "certain",
  "reproduce": {
    "build": "cd findings/poc/DF-3319 && sh build.sh",
    "run": "as root on the guest: ./getlif lo0; ./smash lo0   (stock kernel: Fatal trap 12, guest wedges in DDB)",
    "expected": "Fatal trap 12: page fault while in kernel mode; fault virtual address = 0xe4 (supervisor write); instruction pointer = 0xfffff8004f308f46 (heap-derived, smashed return path); current process = Idle (netisr0); guest wedged in DDB, ssh dead. On the fix.diff-patched kernel: EADDRNOTAVAIL, guest stays up, lo0 intact."
  },
  "kernel_refs": [
    "sys/netinet/in.c:911",
    "sys/netinet/in.c:915-916",
    "sys/netinet/in.c:923",
    "sys/netinet/in.c:941-959",
    "sys/netinet/in.c:955-956",
    "sys/netinet/in.c:230-248",
    "sys/netinet/in.c:437-441",
    "sys/netinet6/in6_var.h:116-132"
  ],
  "artifacts": [
    "README.md", "VERDICT.md", "smash.c", "getlif.c", "build.sh", "run.sh",
    "precheck.log", "run.log", "smash.log", "panic.txt",
    "fix.diff", "fix_run.log", "fix_build.log", "verdict.json", "manifest.json"
  ]
}