2019. 11. 27.

HTTP Parameter Pollution (HPP) 취약점

HTTP Parameter Pollution 취약점을 줄여서 HPP 라고 부른다.
HTTP 파라미터 오염 취약점은 서버단과 클라이언트 단 에서 설명이 가능하다.

[서버단] 

https://backend.example/doTransfer.php
파라미터 : toAccount=9844&amount=1000&fromAccount=12345

이를 toAccount=9844&amount=1000&fromAccount=12345&toAccount=99999

[클라이언트 단]

<? $val=htmlspecialchars($_GET['par'],ENT_QUOTES); ?>
<a href="/page.php?action=view&par='.<?=$val?>.'">View Me!</a>

이러한 php 소스가 있다고 하자

http://host/page.php?par=123%26action=edit 이라고 par의 인자값을 전달하면

<a href="/page.php?action=view&par=123&amp;action=edit">View Me!</a>
위와 같이 action 값이 view 가 아니라 edit 으로 변경되는 경우도 있다

위 자료(https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004))를 보면 어느 파라미터가 유효한지 확인 할 수 있다. 즉, 같은 이름으로 중복 파라미터가 제공되도록 해서는 안된다. 아래 사례를 보면 꽤 위험한 취약점 임을 알 수 있다.

(사례)

Twitter Unsubscribe Notifications

트위터에서 온 이메일을 unsubscribe 하기 위해 버튼을 눌를 때, 다음과 같은 url이 사용된다.

  • https://twitter.com/i/u?t=1&cn=bWV&sig=657&iid=F6542&uid=1134885524&nid=22+26
해커는 UID 를 변경해보았지만, 에러페이지가 리턴된다. 


HPP 취약점을 이용하여 기존 UID 파라미터 앞에 새로운 파라미터값을 삽입한 후 전달하면 성공이 된다. 즉 다른 사람의 계정의 메일링이 해지가 되는 것이다.

  • https://twitter.com/i/u?iid=F6542&uid=2321301342&uid=1134885524&nid=22+26

비슷한 사례로, twitter 에서는 사용자를 팔러우하거나 좋아요를 하거나 리트윗을 하거나 트윗을 하거나 할 수 있는데 이러한 4개 행위에 대해서 HPP 취약점이 있었다.

예를 들면, 팔로우 하기 위한 URL이 다음과 같이 변경될 수 있다.

  • https://twitter.com/intent/follow?screen_name=twitter&screen_name=test1234

또 다른 시나리오는 다음과 같다

정상적인 흐름
  • read.jsp?num=7  -> board.jsp?cmd=read&num=7

공격 흐름
  • read.jsp?num=7%26cmd=delete
  • board.jsp?cmd=read&num=7&cmd=delete

# 참고
  • web-hacking-101
  • https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004)
  • https://ericrafaloff.com/parameter-tampering-attack-on-twitter-web-intents/

Popular Posts

Recent Posts

Powered by Blogger.