← 목록으로

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

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

취약점 개요

패치 분석

이 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): 로그 한 줄로 서버를 장악당한 사건 →