๐ Introduction
ZIP Slip์ Path traversal(directory traversal) ๊ตฌ๋ฌธ์ด ํฌํจ๋ Archive ํ์ผ(zip, tar, jar, etc..)์ extractํ ๋ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ๊ฒฝ๋ก๋ก ์ํ๋ ํ์ผ์ ์ด๋์ํค๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Unarchive ๊ด๋ จํด์ ์์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด ํฌ๊ฒ ์ํฅ๋ฐ์ง ์์ง๋ง, ์ผ๋ถ ์ธ์ด๋ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ถ์ฌ๋ก ๊ฐ๋ฐ์๋ค์ด ์์ฑํ Code snippet ์ผ๋ก extract ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋์ ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ํ ๋์์ด ์ฝ๋์ธ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ฝ๊ฒ ์์ ๋๋ ํ ๋ฆฌ ๋ฑ์ผ๋ก ์ํ๋ ํ์ผ์ ์ด๋์ํฌ ์ ์์ต๋๋ค.
e.g
|
|
์ด๋ป๊ฒ ๋ณด๋ฉด OOXML XXE์ ์ ์ฌํ ๋ถ๋ถ๋ ์๋ค์.
๐ก Offensive techniques
Detect
Archive๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ตฌ๊ฐ์์๋ ํ ์คํธํด๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํน์ ์์ฒญ ๋ฑ์ ์ด์ฉํด ์๋น์ค์ ์์ถ ํ์ผ ํํ๋ก ์ ๋ก๋ํ์ฌ ์ฒ๋ฆฌ๋๊ฑฐ๋, ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ค์ด ์กฐํฉ๋์ ZIP๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ ๊ฒฝ์ฐ ์ ํจํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ฝ๊ฒ ์๋ณํ๊ธฐ ์ดํด์๋ Path traversal๊ณผ ๊ฐ์ด ๋จ์ํ ๊ฒฝ๋ก๋ฅผ ์ฐ์ ์ง์ ํ์ฌ extract ๋๋์ง ์ฒดํฌํด์ผํฉ๋๋ค.
ZIP
|
|
Check
|
|
Exploitation
์ค์ ๊ณต๊ฒฉ์ ๋จ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด์ ์์คํ ์ ์ค์ ํ์ผ์ ๋ฎ์ด์ฐ๊ฑฐ๋, ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ก ํ์ผ์ ์ด๋์์ผ RCE๋ฅผ ์ ๋ํ ์ ์์ต๋๋ค.
|
|
๋ฌผ๋ก ์ด ๊ฒฝ์ฐ ์คํ ๊ถํ์ด ์๋ ๋๋ ํ ๋ฆฌ๋ฅด ์ ํํ๊ฒ ์์์ผํ๊ณ , ์ด๋ค ์กฐ๊ฑด์ผ๋ก ์ธํด ์คํ์ด ๋์ด์ผ ํฉ๋๋ค. ์ด์ธ์๋ ๋ค๋ฅธ ์ทจ์ฝ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์๋ ๋ธ๋ฆฟ์ง ์ญํ ์ ํ ์ ์์ต๋๋ค.
Bypass protection
์ ๊ทผ ๊ฒฝ๋ก์ ๋ํด ๊ถํ ๊ธฐ๋ฐ์ผ๋ก Limit์ด ์๋ ๊ฒฝ์ฐ๋ ์ฐํํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ค๋ง Path traversal๊ณผ ๋์ผํ๊ฒ ๋ฌธ์์ด ๊ธฐ๋ฐ์ผ๋ก ์ฒดํฌํ๋ ๋ก์ง์ธ ๊ฒฝ์ฐ Path traversal์ bypass ํจํด์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://www.hahwul.com/cullinan/path-traversal/#bypass-protection
๐ก Defensive techniques
Extract ์ path๋ฅผ ๊ฒ์ฆํ๋ ํํ๋ก ๋์์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ํ extract ํ๋ ํ๋ก์ธ์ค์ ๊ถํ์ ์ด์ฉํด์ ์ต๋ writeํ ์ ์๋ ๋ฒ์๋ฅผ ๋ช ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ณต๊ฒฉ์ ์๋ฐฉํ ์ ์์ต๋๋ค.
Example
golang ์ฝ๋๋ก ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
Vuln code
|
|
Validation code
|
|
๐น Tools
- ์ทจ์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- https://github.com/clevernyyyy/zip-slip-poc
- https://github.com/ptoomey3/evilarc