꿈을꾸는 파랑새

오늘은 Zip Slip 취약점으로 발생할 수 있는 악성코드 실행 문제에 대해 알아보겠습니다. Zip Slip 이라는 것은 Directory Traversal 또는 Path Traversal  이라고 부르고 있으며 사용자의 입력을 제대로 검증하지 않아 발생하는 취약점입니다.
악의적인 목적을 가진 사람이 상대경로 혹은 절대경로를 사용하여 원래는 접근할 수 없는 파일 또는 의도하지 않은 경로의 파일을 읽고 수정 그리고 새로운 파일을 만들 수가 있는 문제입니다. 해당 취약점은 오랫동안 발견이 되고 있지만, 현재 계속 발견이 되는 문제이며 다양한 환경 및 프로그램에서도 발견되면 압축 프로그램의 압축 해제하는 동안에 발행하는 Path Traversal인 Zip Slip에 대해 알아보겠습니다.

Zip Slip 이란?

압축 파일 내에 포함된 파일 경로를 악의적으로 조작 압축 해제 시 대상 디렉터리 외부에 파일을 생성하거나 기존 파일을 덮어쓰는 취약점을 악용해서 공격하는 방법이며 악의적인 목적이 있는 공격자가 원하는 경로에 파일이 생성할 수가 있습니다.
Windows 환경 같은 경우 상대 경로를 이용하여 사용자 Startup 폴더에 압축을 해제한다면, 시스템 부팅 시마다 공격자가 삽입한 파일이나 명령이 실행되고 만드는 방식입니다.
AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/
공격 방식 예
AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe
윈도우 에서 계산기 앱(calc.exe)을 시작 프로그램 폴더(Startup)를 통해 자동으로 실행하도록 설정
리눅스(linux) 환경 같은 경우도 마찬가지로 압축 파일에 아래와 같이 상대 경로가 포함되어 있고, Zip Slip 취약점이 존재하는 압축 프로그램 내부에서 경로를 제대로 검증하지 않고 압축을 해제한다면 /etc/passwd 파일을 덮어쓸 수 있게 됩니다.
../../../../etc/passwd

압축 해제 파일 경로 포함된 ZIP 파일
압축 해제 파일 경로 포함된 ZIP 파일

Zip Slip은 특정한 압축한 형식 예를 들어서 zip,rar,7z 같은 파일 경로 정보를 포함하며 모든 형식에서 공격할 수 있습니다.
시그니처 (Signature):50 4B 03 04 (16진수)로 데이터 블록이 로컬 파일 헤더임을 식별하는 고유한 값
압축 해제에 필요한 버전 (Version needed to extract):파일을 압축 해제하는 데 필요한 ZIP 유틸리티의 최소 버전 정보
일반 비트 플래그 (General purpose bit flag):파일이 암호화되었는지 데이터 디스크립터가 있는지 등과 같은 여러 옵션을 나타내는 비트 필드
압축 방법 (Compression method):파일을 압축하는 데 사용된 알고리즘(예:0x0000은 압축 없음, 0x0008은 Deflate)
수정 시간 및 날짜 (Last mod file time/date): 일이 마지막으로 수정된 날짜와 시간을 기록
CRC-32 체크섬 (CRC-32): 파일 데이터의 무결성을 검사하는 데 사용되는 4바이트 값
압축된 크기 및 압축되지 않은 크기 (Compressed size/Uncompressed size): 파일의 압축 후 크기와 압축 전 원본 크기를 나타냄
파일 이름 길이 및 추가 필드 길이 (File name length/Extra field length): 뒤따라오는 파일 이름과 추가 필드의 길이를 나타냄
파일 이름 (File name):실제 파일의 이름(0x1E)
추가 필드 (Extra field): ZIP64 확장 정보나 기타 사용자 정의 데이터와 같은 추가적인 정보를 담고 있음
이것을 보고 시작을 하면 0x1E(30 바이트) 부분에서 시작해서 파일 이름 부분에 해당하는 것을 할 수가 있습니다.
File name 항목은 압축 해제 시 생성될 파일의 이름을 지정하는 역할과 동시에 해당 영역에 경로를 포함한 파일 이름을 저장함으로써 하위 폴더를 생성하고 해당 위치에 파일을 추출하는 것도 가능해집니다.
악의적인 목적을 가진 공격자들은 File name에 python의 zipfile 모듈을 이용 직접 ZIP 파일을 조작해 File name 항목에 상대 경로를 삽입할 수 있습니다.
File name에 상대 경로를 삽입한 ZIP 파일을 이야기합니다.
파일 경로가 포함된 것을 확인할 수 있다. 이렇게 만들어진 압축 파일이 %USERPROFILE%\Downloads 경로에 내려진 상태에서, Zip Slip 공격에 취약한 압축 프로그램으로 압축을 해제하면 파일이 시작 프로그램 폴더에 생성되게 되는 구조입니다.

압축 해제 파일 경로가 포함된 RAR 파일
압축 해제 파일 경로가 포함된 RAR 파일

ZIP만 되는 것이 아니라 7Z, RAR 등 다양한 압축 형식에서도 파일 이름 영역에 경로 정보를 포함할 수 있습니다.
예를 들어서 RAR 같은 경로는 다음과 같이 될 것이며 내부에 파일 경로와 이름을 확인할 수 있는 형식도 있지만, 7Z처럼 평문으로 저장되어 있지 않은 형식도 존재합니다.
이런 취약점을 악용을 한것이 순회 문자인 ..\ 와 Alternate Data Stream(ADS)를 활용해 경로 검증을 우회하고, 압축 해제 시 임의 경로에 파일을 생성할 수 있으며 RAR 같은 경우에는 RAR 7.12 이전 버전을 사용하는 경우에는 공격자가 삽입한 상대 경로에 대해 충분한 검증을 하지 않아 상위 디렉토리 접근을 통한 원격 명령 실행 (Remote Code Execution) 취약점이 발견되어서

[소프트웨어 팁/보안 및 분석] - WinRAR CVE-2025-6218 디렉토리 트렉버설 취약점 해결

 

WinRAR CVE-2025-6218 디렉토리 트렉버설 취약점 해결

WinRAR은 CVE-2025-6218로 추적된 디렉터리 트래버스 취약점을 해결했습니다.해당 취약점은 특정 조건으로 악성 아카이브 를 추출하고 나서 악성 코드가 실행될 수 있는 문제를 포함CVE-2025-6218로 추적

wezard4u.tistory.com

 

해당 문제가 수정된 RAR 7.13 버전으로 업데이트 파일을 제공하고 있으며 만약 취약점을 악용하는 경우에는 압축 파일 해제 시 생성한 파일 이름에 상대 경로가 포함되어서 상대경로 검증 필터링을 우회할 수 있으면 특히 공백 문자가 같이 포함된 경우 이것을 악용하는 경우 악성코드가 컴퓨터에 설치될 확률이 높습니다. 해당 취약점(CVE-2025-6218)
즉 해당 취약점을 악용한 공격을 방어하려면 자신이 사용하는 압축 프로그램을 최신 버전으로 유지하는 것을 권장합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band