← 목록으로

CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행

[CVE] CVE 분석 · 작성: 2026-07-19 19:39:08 · 수정: 2026-07-21 23:19:31 · 조회 110

#cve
목차

취약점 개요#

패치 분석#

이 CVE는 단일 함수의 버그가 아니라 **"임의 파일 생성"과 "그 파일명을 신뢰하는 root cron"**이라는 두 기능의 조합이라, 패치도 두 지점 모두를 손봐야 했다.

1) 세션 식별자 기반 파일 생성 경로 — 입력 검증 부재#

Before

# GlobalProtect 세션 처리 로직 (공개 어드바이저리 기반 재구성)
session_id = get_header(request, "session-id-field")
telemetry_path = TELEMETRY_DIR + "/" + session_id     # 검증 없이 그대로 경로/파일명에 사용
create_file(telemetry_path, request_body)

session_id 값에 셸 메타문자(;, `, $() 등)나 경로 조작 문자가 포함되어도 그대로 파일명에 쓰인다.

After

session_id = get_header(request, "session-id-field")
if not is_safe_filename(session_id):   # 화이트리스트 문자셋(영숫자 등)만 허용
    reject_request()
telemetry_path = TELEMETRY_DIR + "/" + session_id
create_file(telemetry_path, request_body)

2) root 권한 텔레메트리 정리 cron — 파일명을 셸 명령에 직접 삽입#

Before

# root cron이 주기적으로 실행 (재구성)
for file in list_dir(TELEMETRY_DIR):
    run_shell(f"process_telemetry.sh {file}")   # 파일명이 셸 명령 문자열에 그대로 삽입됨

파일명 안의 셸 메타문자가 명령 구분자·명령 치환으로 해석될 수 있는 구조다.

After

for file in list_dir(TELEMETRY_DIR):
    run_shell_argv(["process_telemetry.sh", file])  # 셸 문자열 조립이 아니라 인자 배열로 직접 실행

문자열을 셸에 넘겨 재해석시키는 대신, 인자를 배열 형태로 직접 실행 프로세스에 전달해 셸의 메타문자 재해석 단계 자체를 제거했다.

재현 결과 (공격 흐름)#

  1. 인증 없이 접근 가능한 GlobalProtect 엔드포인트에 셸 메타문자를 포함한 세션 식별자 값으로 요청 전송
  2. 취약한 처리 로직이 검증 없이 그 값을 파일명으로 사용해 텔레메트리 디렉터리에 파일 생성
  3. root 권한 cron이 주기적으로 해당 디렉터리를 스캔하며 파일명을 셸 명령 문자열에 삽입해 실행
  4. 셸이 파일명 속 메타문자를 명령으로 해석 → root 권한 임의 명령 실행
  5. 별도 트리거 요청으로 처리 타이밍을 강제하거나 cron 주기를 기다리는 2단계 흐름으로 알려져 있다 — 세부 페이로드는 공개 어드바이저리 참고

영향 및 체이닝#

참고자료#

관련 글

CVE 분석 카테고리의 글 (1/8)

  1. CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행
  2. CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건
  3. CVE-2014-0160 (Heartbleed): OpenSSL 하트비트가 새어나간 메모리
  4. CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점
  5. CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승
  6. CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점
  7. CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득
  8. CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE
CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건 →