Portswigger-Web cache poisoning with multiple headers
풀이
웹 캐시 포이즈닝 취약점이 있고, 여러 헤더를 조작하면 악성 응답을 만들 수 있다. 유저가 약 1 분에 한 번씩 홈페이지를 방문할 때, 방문자의 브라우저에 alert(document.cookie)를 실행시켜라.

Param Miner를 이용하여 헤더를 찾아냈다.

x-forwarded-scheme 헤더를 붙이면 302로 리디렉션 했다.

x-forwarded-scheme 헤더를 붙인 상태에서 다시 Param Miner로 헤더를 찾으면 함께 쓰이는 헤더를 찾을 수 있다. x-forwarded-host 헤더를 이용한다는 것을 찾아냈다. 또한 캐시 포이즈닝 취약점이 있다고 알려준다.

x-forwarded-scheme헤더와 x-forwarded-host 헤더를 함께 사용하면 x-forwarded-host의 내용을 이용하여 리디렉션 URL을 생성한다.
(x-forwarded-scheme 헤더가 HTTPS가 아니라면 리다이렉트 한다.)

상단의 Go to exploit server 버튼을 누르면 공격자 HTTP 서버를 수정할 수 있다. 경로는 원 서버에서 참조하는 js 파일과 동일하게 한다.

기존 js 경로에 접근하는 Request에 x-forwarded-scheme과 x-forwarded-host 헤더를 넣고, x-forwarded-host에 공격자 도메인을 넣으면 원 js 파일 대신 공격자의 파일을 다운로드하도록 리다이렉트하는 응답이 캐싱된다.

다른 사용자가 여기 붙어서 스크립트를 실행하면 성공한다.
이 취약점은 사용자가 조작할 수 있는 헤더를 그대로 믿고 사용해서 발생했다. 숨겨진 헤더지만 헤더 인젝션으로 찾아낼 수 있다는 점을 간과했다. 웹 캐시 포이즈닝을 통해 다른 사람도 이 리다이렉트에 영향을 받을 수 있어 취약점의 영향력이 커졌다.
tags: writeup, web-cache-poisoning, xss, reflected xss, wstg-inpv-01, business-logic-vul, wstg-busl-02, host-header-injection, wstg-inpv-17, web hacking