03 a10 unvalidated redirects and forwards.pptx

16
A10 Unvalidated Redirects and Forwards Problem and Protection

description

Part of the Web Application Security Course

Transcript of 03 a10 unvalidated redirects and forwards.pptx

Page 1: 03 a10 unvalidated redirects and forwards.pptx

A10 Unvalidated Redirects and Forwards

Problem and Protection

Page 2: 03 a10 unvalidated redirects and forwards.pptx

Phishers Pwn eBay

o  If you got an email that said "80% off anything on eBay", would you be interested?

o  What if the click here link was this? •  http://Couponpalooza.com

o  Would you feel better if the link was this? •  http://cgi4.ebay.com/ws/eBayISAPI.dll?

MfcISAPICommand=RedirectToDomain&DomainUrl=http://www.Couponpalooza.com

o  World's biggest spammers were doing exactly this five years ago until eBay plugged the hole.

o  Many other sites have the same vulnerability.

Page 3: 03 a10 unvalidated redirects and forwards.pptx

Unvalidated Redirects and Forwards

o  But when combined with other threats, it is harmful.

o  When an attacker uses our website to redirect the victim to a malicious site.

o  Not a big deal in and of itself.

Page 4: 03 a10 unvalidated redirects and forwards.pptx

How attackers do it

Unvalidated Redirects o  He finds our page with a redirect on it: http://www.tic.com/validpage.aspx?name=Ralph& dest=tic.com/page2.jsp

o  Through phishing or something else, he gets the user to click on his link:

http://www.tic.com/validpage.aspx?name=Ralph& dest=www.evilSite.com/stealItAll.jsp

o  Because the domain is valid, the users are more likely to click on the link.

Page 5: 03 a10 unvalidated redirects and forwards.pptx

How attackers do it

Unvalidated Forwards o  Say a site has a login page and behind that

is Protected.jsp which isn't accessible normally. But the site also has a TrySomething.jsp page which says:

if (someCondition) response.sendRedirect(Protected.jsp);

else response.sendRedirect(DoSomethingElse.jsp);

o  Attackers can go directly to TrySomething.jsp and get access to Protected.jsp, bypassing the login page.

Page 6: 03 a10 unvalidated redirects and forwards.pptx

How we protect ourselves

o  Avoid redirects and forwards o  Don't take user input as a redirection target. o  Use white-lists o  Use mapping to translate the user-supplied

target

Page 7: 03 a10 unvalidated redirects and forwards.pptx

Avoid redirects and forwards

o  Review your code for: Response.Redirect(otherPage) Server.Transfer(otherPage)

•  Can you rewrite them? o  Create/use a spider to crawl your own site

•  Look at the logs for redirects •  300-series statuses

― 302 = old-school page moved ― 307 = proper redirection.

Page 8: 03 a10 unvalidated redirects and forwards.pptx

Don't take user input

o  After finding all redirects, look at the pages that generated them •  These will be in the spider's log

o  Try to change the URL by hand o  Try to brute-force change it via an HTTP re-

writer o  If either works, you have a vulnerability o  Solutions:

•  Modify the page to hard-code the destination •  If that isn't possible, only allow the user to choose

from a list

Page 9: 03 a10 unvalidated redirects and forwards.pptx

Use whitelists to limit where the user can go

o  Filter the allowed input so the user can't put in anything he wants.

o  Terrible: <input type="text" id="destURL" />

o  Better: <select id="destURL"> <option value="tic.com/AboutUs">About</option> <option value="tic.com/catalog">View our catalog</option> <option value="dwb.com/PartnerProgram">Partnership</option> <option value="failblog.com">Today's fail</option> </select>

o  Note that this option is still tamperable, so whitelist server-side as well.

Page 10: 03 a10 unvalidated redirects and forwards.pptx

Whitelists are better than blacklists

o  Two ways to filter: 1.  Blacklists

― "Any pattern is fine except these ..."

2.  Whitelists ― "Only these patterns are allowed..."

o  Whitelists apply in many security areas •  XSS •  Injection attacks •  More

Page 11: 03 a10 unvalidated redirects and forwards.pptx

Use mapping to limit where the user can forward

o  Client-side: <select id="destURL"> <option value="1">About</option>

<option value="2">View our catalog</option>

<option value="3">Partnership</option> <option value="4">Today's fail</option>

</select>

Page 12: 03 a10 unvalidated redirects and forwards.pptx

Use mapping to limit where the user can forward

o  Server-side: switch (ddlDestURL.SelectedValue)

{

case 1: Response.Redirect("tic.com/About");

case 2:

Response.Redirect("dwb.com/PartnerProgram");

...

case else: throw new Exception("Invalid value");

}

Page 13: 03 a10 unvalidated redirects and forwards.pptx

More concise mapping

o  Store the values and URLs in a database table called ValidURLs.

o  Create list: var validUrls =

dc.ValidURLs.ToDictionary(

v => v.ID, v => v.Description);

o  Pull user's choice from list: string url =

validUrls[ddlDest.SelectedValue];

Response.Redirect(url);

Page 14: 03 a10 unvalidated redirects and forwards.pptx

Summary

o  Unvalidated redirects and forwards leave a hole that attackers can use to send our users to malicious sites.

o  To protect them, we should: o  Eliminate all redirects and forwards. o  Failing that, at least provide a whitelist of

acceptable values. o  Map the values that the user sends us to

accepted URLs so the values can't be spoofed on the client side.

Page 15: 03 a10 unvalidated redirects and forwards.pptx

Oh, and one more thing ...

o  URL shortening services are being used as attacks: •  bit.ly •  goo.gl •  su.pr •  is.gd

o  Hint: Put "+" at the end of the bit.ly, su.pr and goog.gl to check its destination.

o  is.gd takes a "-"

Page 16: 03 a10 unvalidated redirects and forwards.pptx

Further study

o  eBay Redirect Becomes Phishing Tool •  http://bit.ly/EBayRedirectFlaw

o  WebScarab has a spider tool: o  http://bit.ly/WebScarab

o  Overview of AppSec/OWASP top 10: o  http://scr.bi/AppSecTop10

o  Google blog article on open redirects: •  http://bit.ly/OpenRedirects