1 minute read

취약점은

Path Traversal 취약점의 한 부분으로 아카이브 파일에서 파일을 추출하는 동안 디렉터리를 통과하는 과정에서 발생한다. 이게 무슨 소리냐? 압축된 파일 혹은 아카이브 파일에서 파일명이 절대경로 로 표시된 경로 명으로 되어 있는 경우, Unarchive 되면서 파명의 절대경로로 파일을 이동시키거나, 동일한 파일이 존재할 경우 이를 덮어쓸 수 있게 된다.

왜 발생되는걸까?

이러한 ZIP Slip 취약점은 여러 언어로 작성된 에코시스템에서 발견되지만, 높은 수준의 아카이브 파일 처리를 제공하는 라이브리가 없는 JAVA 환경에서 주로 발견된다. 이는 라이브러리가 존재하지 않기에, 개발자들이 Code Snippet을 통해 수동적으로 만들어지며, 이를 서로 공유하여 사용하기 때문에 발생된다.

공격 표면(Attack Vactor)

해당 취약점이 잠재적으로 내포되어 이를 테스트하는 구간은 아카이브를 처리하는 앤드포인트에서 모두 시도해볼 수 있다. 즉 압축된 형태의 파일을 업로드하는 구간이라면 해당 취약점 테스트를 시도해봐야한다. 아카이브파일 ZIP, 7z.. 등 압축파일 형태의 파일의 내부 파일에 디렉터리에서 벗어날 수 있는 이름의 파일이 존재해야한다.

zip파일 내부

a.txt
b.py
../../../../evil.sh

위와같은 파일들이 압축되어 있는 압축파일을 해제하는 과정에서 Path Traversal이 발생하며, 시스템의 특정 위치에 파일이 생성되어 RCE를 유도하나, 혹은 중요 파일을 덮어쓸 수 있게 된다.

zip slip을 효과적으로 악용하기 위해서는 디렉토리에 대한 실행권한이 어떻게 주어져여 있는지 명확히 인지해야하한다.

이러한 아카이브를 생성하기 위해서는 사전에 미리 공격자는 수동적으로 해당 파일을 제작하여 가지고 있어야한다. 최상위 디렉터리에 “evil.sh” (예를 들어 Reverse Shell Code)을 제작하여 아래와 같이 아카이브를 생성할 수 있다.

tar cvfzP zipslip.tar.gz '../../../../evil.sh'

Bypass

ZIP Slip의 경우 Path Traversal에서 파생됐다고 봐도 무관하기에 이를 우회하는 방법도
Path Traversal과 동일하게 문자열을 기반으로 체크할 경우 다양한 경로 이동 문자에 대한
인코딩을 통해 우회 할 수 있다.

Reference

  • https://security.snyk.io/research/zip-slip-vulnerability
  • https://www.hahwul.com/cullinan/zip-slip/

Leave a comment