
Symantec Encryption Desktop의 CVE-2019-9702에 대한 SYSTEM 셸을 획득하는 로컬 권한 상승 PoC.
PGPwded.sys 로컬 권한 상승 PoC이 리포지토리는 낮은 권한의 원시 디스크 읽기/쓰기 프리미티브를 기반으로 하는 Symantec Encryption Desktop의 PGPwded.sys 스토리지 필터에서 로컬 권한 상승 경로에 대한 개념 증명을 포함합니다.
이 PoC는 Symantec Encryption Desktop Pro 10.4.2 MP3를 대상으로 개발 및 테스트되었습니다. 다른 버전은 이 구현으로 테스트되지 않았습니다.
이 작업은 Kyriakos Economou / Nettitude(현재 LRQA Nettitude)의 원래 공개 연구에서 영감을 받아 구축되었습니다:
해당 게시물은 PGPwded.sys 장치 액세스 검사, 신뢰할 수 있는 PGP 프로세스 인젝션 아이디어, 원시 읽기/쓰기 IOCTL 및 NTFS 기반 악용 접근 방식을 설명합니다. 이 PoC는 재부팅 시 트리거되는 서비스 바이너리 덮어쓰기 변형에 초점을 맞추며 읽기 전용 사전 확인 유틸리티를 포함합니다.
src/
sym_portable_launcher.c # single-EXE launcher; embeds and drops the staging worker
portable_stage_worker.c # injected worker; maps C:, opens PGPwded, stages payload
spooler_payload.c # service payload run by Spooler as LocalSystem after reboot
sym_portable_precheck.c # single-EXE read-only precheck launcher
precheck_worker.c # injected read-only diagnostic worker
*_bytes.h # generated embedded payload/worker byte arrays
tools/
sym_target_diag_lite.cmd # wrapper script for collecting target diagnostics
재부팅 단계 익스플로잇은 단일 32비트 Windows 실행 파일입니다. 높은 수준에서:
C:\Users\Public)에서 런처를 실행합니다.%TEMP%에 드롭합니다.\\.\PGPwdef를 엽니다.C:\Windows\System32\spoolsv.exe를 NTFS 익스텐트에 매핑하고 백업 디스크 섹터를 계산합니다.\Device\000000xx PGP 디스크 객체를 찾습니다.C:\Users\Public\spoolsv.exe.orig.portable에 백업합니다.spoolsv.exe를 백업하는 섹터를 원시 덮어씁니다.읽기 전용 사전 확인은 동일한 신뢰 프로세스 경로를 따르지만 원시 읽기 IOCTL만 사용합니다. 파일을 덮어쓰지 않으며 익스플로잇을 스테이징하지 않습니다.
MinGW-w64가 설치된 Linux 호스트에서 빌드:
make
예상 출력:
bin/sym_portable_reboot_stage32.exe # exploit/stager
bin/sym_portable_precheck32.exe # read-only precheck
먼저 사전 확인을 실행하세요. 보호된 파일을 수정하지 않고 현재 익스플로잇 조건이 존재하는지 확인하기 위한 것입니다.
C:\Users\Public\sym_portable_precheck32.exe
notepad C:\Users\Public\sym_portable_precheck.log
실행 가능한 대상은 다음으로 끝나야 합니다:
[OK] current reboot exploit conditions
로그에 읽을 수 있는 PGP PDO가 없거나 C: 섹터 일치가 없으면 익스플로잇을 실행하지 마세요. 이는 일반적으로 OS 디스크가 Symantec WDE로 관리/계측되지 않음을 의미합니다.
더 완전한 대상 보고서를 보려면 아래 두 파일을 동일한 디렉터리에 복사하고 CMD 래퍼를 실행하세요:
sym_target_diag_lite.cmd
sym_portable_precheck32.exe
그런 다음 실행:
C:\Users\Public\sym_target_diag_lite.cmd
notepad C:\Users\Public\sym_target_diag_lite.log
보호된 시스템 파일을 수정할 권한이 있고 사전 확인이 통과된 시스템에서만 익스플로잇을 실행하세요.
스테이저를 쓰기 가능한 경로에 복사하고 낮은 권한의 사용자로 실행하세요:
C:\Users\Public\sym_portable_reboot_stage32.exe
스테이징 로그 확인:
type C:\Users\Public\sym_portable_launcher.log
type C:\Users\Public\sym_portable_stage.log
스테이징이 성공하면 워커 로그에 다음이 포함됩니다:
STAGED_OK_REBOOT_TO_TRIGGER
머신을 재부팅하세요. 재부팅 후 Spooler 서비스가 LocalSystem으로 페이로드를 시작하고 다음 제목의 명령 프롬프트를 엽니다:
SYSTEM_CMD_FROM_PORTABLE_REBOOT_LPE
스테이저는 대상을 덮어쓰기 전에 다음 백업을 생성합니다:
C:\Users\Public\spoolsv.exe.orig.portable
공개 원클릭 복원 모드는 포함되어 있지 않습니다. 테스트에서는 동일한 매핑된 섹터에 백업을 원시 쓰기하고 재부팅하여 복원을 수행했습니다. 바이너리를 게시하기 전에 안전한 복원 흐름을 추가하고 검증해야 합니다.
C:\Windows\System32\spoolsv.exe를 대상으로 합니다.PGPwded.sys를 통해 노출되어야 합니다. Symantec 설치만으로는 충분하지 않습니다.이는 승인된 테스트 및 방어적 검증을 위한 연구 코드입니다. 소유하지 않거나 평가할 명시적 권한이 없는 시스템에서 실행하지 마십시오.