본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
-분석 레포트-
https://hackerone.com/reports/1898305
summary
https://www.acrxxxx 사이트의 코드 브라우저로 공격자가 x-clickref라는 GET 매개변수를 통해 cookie bomb을 심을 수 있는 문제를 발견하였다. 이로 인해 사용자가 *. acrxxx.com 범위의 서비스에 액세스 하지 못하게 될 수 있다.
Steps to Reproduce
1. 해당 사이트에 접근 후, 개발자 모드를 이용해 아래의 자바스크립트 코드를 분석한다.
var c = 'x-clickref',
d = '.acronis.com',
e = '/',
a = 90,
f = new Date(Date.now() + 86400000 * a);
var b = (new URL(window.location.href)).searchParams.get(c);
b && a.forEach(function (g) {
document.cookie = g + '=' + b + ';domain=' + d + ';path=' + e + ';expires=' + f;
});
* 코드 분석 *
c: URL에서 검색할 매개변수의 이름 (x-clickref),
d: 쿠키가 적용될 도메인 (. acronis.com),
e: 쿠키의 경로 (/, 즉 루트 경로),
a: 쿠키의 유효 기간 (90일),
f: 현재 시간에서 90일 후의 날짜. 이는 쿠키 만료 시간을 지정하는 데 사용된다.
window.location.href: 현재 웹페이지의 전체 URL을 가져온다.
new URL(): URL 객체를 생성.
. searchParams.get(c): x-clickref 매개변수의 값을 가져온다.
b: x-clickref 매개변수의 값이 있는지 확인.
a: 쿠키 이름 목록 (cb_prf_837 및 cb_prf_882).
. forEach(): 배열 a의 각 요소에 대해 반복 실행.
document.cookie: 쿠키를 설정. 설정된 쿠키는 다음을 포함: 쿠키 이름 (g): cb_prf_837 또는 cb_prf_882.
쿠키 값 (b): URL에서 가져온 x-clickref 값.
쿠키 도메인 (d):. acronis.com.
쿠키 경로 (e): /.
쿠키 만료 날짜 (f): 현재 시간에서 90일 후.
2. 아래와 같은 url 요청을 보낸다.
https://www.acronis.com/?x-clickref=HEYYYYYYHEYYYYYYHEHEYYYYYYHEY.........(생략)........
쿠키 값을 설정할 때 길이 제한이 없어, 위와 같은 요청이 가능하며, 공격자는 *. acronis.com을 가리키는 충분히 긴 쿠키를 만들 수 있다. 결과적으로 *.acronis.com 범위로 전송된 모든 요청은 HTTP 4XX를 발생시켜 피해자가 해당 쿠키를 삭제할 때까지 클라이언트 측에서 DoS를 발생시킨다.
Impact
쿠키 설정 시 사용자 입력을 안전하지 않게 처리하면 사용자가 *.acronis.com 범위에서 Acronis 서비스에 액세스 하지 못하게 될 가능성이 존재