[CVE] CVE 분석 · 작성: 2026-07-19 19:39:08 · 수정: 2026-07-21 23:19:31 · 조회 24
이 CVE는 단일 함수의 버그가 아니라 **"임의 파일 생성"과 "그 파일명을 신뢰하는 root cron"**이라는 두 기능의 조합이라, 패치도 두 지점 모두를 손봐야 했다.
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)
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]) # 셸 문자열 조립이 아니라 인자 배열로 직접 실행
문자열을 셸에 넘겨 재해석시키는 대신, 인자를 배열 형태로 직접 실행 프로세스에 전달해 셸의 메타문자 재해석 단계 자체를 제거했다.