57
Dissecting CSRF Attacks & Defenses Mike Shema October 16, 2013

Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Dissecting CSRF Attacks & Defenses

Mike Shema

October 16, 2013

Page 2: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Cross Site Request Forgery

Identifying the confused, session-riding deputy.

Putting the attack in context.

Analyzing & implementing countermeasures.

Defending the browser.

2

WHAT

WHEN

WHY

HOW

Page 3: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

User Agent

3

<!DOCTYPE html><html><head> <meta http-equiv="refresh" content="0;url=https://one.origin/"> <link ref="prefetch" href="https://two.origin/resource"></head><body> <img src="https://three.origin/image" alt=""> <iframe sandbox src="https://four.origin/content"></iframe> <a href="https://five.origin/something">click here<a></body></html>

Cross-origin requests are an integral design and expected behavior of HTML.

Double AgentSecret Agent

Page 4: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

CSRF Mechanism vs. Exploit

4

Force a victim’s browser to request a resource of the attacker’s choosing.

<img src="https://target.site/icon.png" alt=""><img src="https://another.site/images/button.png" alt=""><iframe src="https://web.site/article/comments/a/b/c/"></iframe>

The request affects the victim’s context with the web app in a way that either benefits the attacker or is detrimental to the victim.

https://target.site/changePassword?newPass=kar120c

Page 5: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Request Context

5

The attacker chooses an action to be performed.

The browser includes cookies to perform that action against the target app under the victim’s session context.

https://target.site/changePassword?newPw=kar120c

Page 6: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Two Senses of Forgery

CreationSOP restricts reading the response from a cross-origin request, not making the request.Many elements automatically initiate a request.XHR object can compose complex requests.

CounterfeitCompose request with attacker’s choice of values. The request triggers a behavior of the attacker’s choice made under the victim’s context.

6

Page 7: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Request Creation

7

<form method="POST" action="changePassword"><input type="password" name="newPass" value=""><input type="password" name="confirmPass" value=""><input type="submit"></form> POST /changePassword HTTP/1.1

Host: web.siteUser-Agent: Mozilla/5.0 ......Cookie: sessid=12345Connection: keep-alive

newPass=kar120c&confirmPass=kar120c

https://website/changePassword?newPass=kar120c&confirmPass=kar120c

GET /changePassword?newPass=kar120c&confirmPass=kar120c HTTP/1.1Host: web.siteUser-Agent: Mozilla/5.0 ......Cookie: sessid=12345Connection: keep-alive

Page 8: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

<iframe frameborder="0" height="0" width="0"...

<iframe seamless height="0" width="0"...

Request Subterfuge

8

<img style="visibility:hidden"...

<iframe style="position:absolute; left:-1000px; top:-1000px"...

Page 9: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Risk Considerations

9

http://192.168.1.1/apply.cgicurrent_page=Main_Analysis_Content.asp&next_page=cmdRet_check.htm&next_host=192.168.1.1&group_id=&modified=0&action_mode=+Refresh+&action_script=&action_wait=&first_time=&preferred_lang=EN&SystemCmd=nvram%20%show&firmver=3.0.0.4&cmdMethod=ping&destIP=localhost&pingCNT=5

h*p://www.exploit-­‐db.com/exploits/28652/

http://www.bing.com/search?q=deadliestwebattacks

Page 10: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Are You Experienced?

Fundamentally, we want to distinguish between a user-intended action and a browser-initiated one.

Cross-origin requests that assume the victim’s authorization are the problem (i.e. session riding).

Hence, a countermeasure might try to...prevent the initiation of the request...make it difficult to correctly compose the request...separate the user’s context from the request

Authorized

10

Page 11: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Make requests harder to create.CORS isolation

Make requests harder to counterfeit by including entropy or secrets.

Double submit cookieAnti-CSRF token (nonce)

Tie the request to the user’s session.Separate authorization & authentication tokens

Castles Made of Sand

11

Page 12: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Secrets & Entropy

PRNG

hash(hash(hash(...(PRNG)...)))

hash(PRNG, salt)

HMAC-SHA256(PRNG, secret)HMAC-MD5HMAC-SHA512

12

sizeof(PRNG)

sizeof(PRNG)

sizeof(PRNG + salt)

sizeof(PRNG + secret)

Page 13: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

PRNG & Entropy

“Deterministic”Poor seedingPoor algorithmExposed state

Cryptographically secure algorithms designed to ...self-measure entropy to improve seeding...resist prediction, bias...resist compromise in case of state exposure

13

srand(1);$x = rand();

$x = sha256(rand());

Page 14: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Heuristics

14h*p://mathworld.wolfram.com/NoiseSphere.html

𝜃=2πXn

𝜙=πXn+1

𝜌=√Xn+2

Page 16: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

HMAC & Secrets

Something other than the default valuekeyboard cat

Something outside a dictionary1123secretShad0wfax

16

$ ./john --format=hmac-sha256 --wordlist=words.txt sids.john

$ ./hashcat-cli64.app -a 0 -m 1450 sids.hashcat words.txt

Page 17: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

.gitignore

17

explore

OAUTH_CONSUMER_SECRET

session_secret

secret_token.rb

mongodb://admin

ssh://root@

hmac-­‐sha256

...

http://www.phenoelit.org/blog/archives/2012/12/21/let_me_github_that_for_you/

http://nakedsecurity.sophos.com/2013/01/25/do-programmers-understand-private/

Page 18: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

CSRF Exposes Weak Design

Password change mechanisms that don’t require current password.

Missing authentication barriers for sensitive actions.

e.g. check-out and shipping to known vs. new address

Loose coupling of authentication, authorization, and session.

18

Page 19: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Dangerous Design

GET/POST negligence and mismatchform method modificationPHP $_GET vs. $_POST vs. $_REQUEST

Unrestricted redirectione.g. https://web.site/page?returnUrl=https://CSRF/

“Link-based links”e.g. https://web.site/page?resource=CSRF.html

19

Page 20: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Attack Payloads

GriefingActions detrimental to userhttp://justdelete.me/

ManipulationUpvotes/downvotes

SpammingMessages from the user without authorization of user

20

POST http://stackoverflow.com/posts/6655321/vote/2 HTTP/1.1Host: stackoverflow.com

fkey=d2aad1a4a5e8326b26eb82307f25a072

Page 22: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Detection Methodologies

Pattern-based detection of token namesSecurity by regexityChecks for presence, not effectiveness or implementation

Active test“Cookie Swap” between user session contextsDetermine enforcement, not predictability

22

Page 23: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Mobile Apps

Recreating vulns from first principlesUsing HTTP instead of HTTPSNot verifying HTTPS certsBut at least the apps are signed...

More areas to exploreNot a browser, but making HTTP requestsCSRF potential of malevolent ad banners

23

Page 24: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Wherever Browsers Roam

Does it speak HTTP(S)?Gaming systemsTelevisionsEmbedded devices

Does it have a user context?...or integration with social media?...or control a security barrier?

24

Page 25: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Cross Origin Resource Sharing

Control the forgery (i.e. creation) of “non-simple”, cross-origin requests

X-CSRF: 1

XCSRF /foo HTTP/1.1

25

Page 26: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

CORS Isolation

Guarantees same Origin (or allowed cross-Origin)

But only for “non-simple” XHR requestsMust start inspecting the Origin header

LimitationsMust be part of app’s design and implementationBreaks “simple” cross-origin requests

26

Page 27: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

<form id=”dragon”>

27

(function(){"use strict"; $(document).ready(function() { $("#dragon").submit(function(event) { $.ajax({ url: "dragon.php", data: "foo", error: function(jqXHR, textStatus, errorThrown) { $("#results").html(textStatus + ", " + errorThrown); }, headers: { "X-CSRF" : "1" }, success: function(data) { $("#results").html(data); } }); return false;}); }); })();

Page 28: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Pre-Flight

28

HTTP/1.1 200 OKDate: Wed, 16 Oct 2013 07:13:31 GMTServer: Apache/2.2.25 (Unix)X-Powered-By: PHP/5.3.27Set-Cookie: PHPSESSID=mkpb5bn4cbp86orsjekmp6asb7; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Pragma: no-cacheAccess-Control-Allow-Origin: http://web.siteAccess-Control-Allow-Headers: X-CSRFAccess-Control-Max-Age: 10Content-Length: 0Keep-Alive: timeout=5, max=100Connection: Keep-AliveContent-Type: text/html; charset=utf-8

OPTIONS http://web.site/CsrfLab/CORS/dragon.php?act=increase&gems=1 HTTP/1.1Host: web.siteUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Origin: http://evil.siteAccess-Control-Request-Method: GETAccess-Control-Request-Headers: x-csrfConnection: keep-alive

Page 29: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Content Security Policy

29

CSP: default-src 'self'

<input type="text" name="q" value="foo" autofocus/onfocus=alert(9)//"">

CSP: default-src 'self' 'unsafe-inline'

<input type="text" name="q" value="foo" autofocus/onfocus=alert(9)//"">

Page 30: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Speaking of CSP

<!doctype html><html><head><meta http-equiv="X-WebKit-CSP" content="img-src 'none'; report-uri 'https://csrf.target/page?a=1&b=2&c=3'"></head><body><img alt="" src="whatever"></body></html>

30

Page 31: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Partial POST ForgeryPOST /page?a=1&b=2&c=3 HTTP/1.1Host: csrf.targetUser-Agent: Mozilla/5.0 ...Content-Length: 116Accept: */*Origin: nullContent-Type: application/x-www-form-urlencodedReferer: http://web.site/HWA/ch3/csrf.htmlCookie: sessid=12345Connection: keep-alive

document-url=http%3A%2F%2Fcsrf.target%2FHWA%2Fch3%2Fcsrf.html&violated-directive=default-src+%27none%27

31

Page 32: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

32

ONE ATTACK AMONG MANY

Page 33: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Crosstown Traffic

HTML injection, cross-site scriptingIt’s executing in Same OriginCSRF countermeasures are intended to prevent cross-origin attacksStart using Content Security Policy

DNS, cache poisoning, sniffing, ...Start using HSTSWhere did DNSSEC go?

33

Page 34: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Vuln Background Radiation

34

Total  Scans

20  months  starRng  November  2011

0%

8%

15%

23%

30%

Insecure  Flash/ScanInsecure  Java/ScanInsecure  Silverlight/Scan

1/5th !?

Page 35: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Plugins

Outside of SOPOutside of privacy settings

Compose requestsUnrestricted header creationRaw packets

Eternally insecureTo be replaced by HTML5, <canvas>, <audio>, <video>

35

Page 36: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

... --- ...

AND THEY HAVE A PLAN.

36

Page 37: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Security of Sessions

Focus on the abuse of session contextSession-riding, confused deputy

Control when cookies accompany requests initiated from a cross-origin resource

Similar to CORS enforcement of “non-simple” requestsIsolate the user’s session context

37

Page 38: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Simplicity of Settings

Syntax like CSP, behavior like CORSSimple behavior with fewer chances of mistakesLeverage pre-flight as a permission check for context

Don’t require changes to application codeAdd headers via WAFProvide more flexibility by opt-in to exceptions

38

Page 39: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Should Often Succeed

Don’t break the web, ease adoptionAd banners“first visit”, blank browsing contextDeal with domains & subdomains vs. Origins

Browsers have to support itOld, unpatched browsers forsaken to the demons of insecurity anyway

39

Page 40: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Some Ordinary Syntax

On the web application, define a policy:

Set-Cookie: cookieName=...Content-Security-Policy:

sos-apply=cookieName ‘self‘ sos-apply=cookieName ‘any‘ sos-apply=cookieName ‘isolate‘ sos-apply=* ‘self’

40

Page 41: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Policies

self -- trigger pre-flight, cookie included only from same origin unless given exceptionany -- trigger pre-flight, cookie included unless given exceptionisolate -- no pre-flight, no exceptions. Cookie only included from same Origin.

(?) sos-remove=cookieName to remove policy

41

Page 42: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Some Ordinary Syntax

If a cookie has a policy (or no policy), and a request is generated by a resource from the same Origin.

...work like the web works today.

If a cookie has a policy of ‘isolate’, and a request is generated by a cross-origin resource.

...never include the cookie.

If a cookie has a policy of ‘any’ or ‘self ’, and a request is generated by a cross-origin resource.

...make a pre-flight check42

Page 43: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Why Pre-Flight?

Cookies apply site-wide (including subdomains!), without granularity of resources.

The /path attribute is not a security boundary

An SOS policy instructs the browser for default handling of a cookie.

A particular resource can declare an exception by responding to the pre-flight.

43

Page 44: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Pre-Flight Request

[prereq] A policy of ‘any’ or ‘self ’[prereq] Cross-origin resource initiates request

Browser makes CORS-like request:

OPTIONS http://web.site/resource?a=1&b=2 HTTP/1.1Host: web.siteUser-Agent: ...Origin: http://evil.siteAccess-Control-SOS: cookiename cookiename2Connection: keep-aliveContent-Length: 0

44

Page 45: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Pre-Flight Response

Web app receives a pre-flight request.

Supply an expires value so the browser can cache the response.

...if a policy should be enforced for the specific resource:

HTTP 200 OKAccess-Control-SOS-reply: ‘allow’ | ‘deny’; expires=seconds

45

Page 46: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Pre-Flight Response

...if the resource is not exceptional, browser follows established policy

‘any’ would include the cookie for cross-origin‘self ’ would exclude the cookie for cross-origin

BenefitsWeb app can enforce per resource, per cookieSees the Origin headerExpiration eases performance with caching

46

Page 47: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Two Sets

Policy applies to cookies for all resources (entire Origin)Policy can be adjusted by a resourcePre-flight response shouldn’t leak information about cookies for which it has a policy

If the client can’t ask for the right cookie, then no response.Respond with ‘deny’ if the cookie doesn’t exist

47

Page 48: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Remember

Browser tracks...Cookies for which a policy has been applied.Resources that respond to cross-origin requests with exceptions to the policy.Cookies and destination origin, source origin doesn’t matter

Web AppApplies a policy at each Set-CookieApplies a policy at a bottleneck

48

Page 49: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Goals

Ease adoptionFamiliar syntaxSmall command set

Acknowledge performanceCache pre-flight responsesOnly track “all other origins” to origin, not pairs of origins

49

Page 50: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

The “WordPress Problem”

Strong anti-CSRF token is present in WordPress trunk

WP plugins keep forgetting to use it../wp-admin/admin.php?page=...

Must continually protect every new action...or protect the /wp-admin/ directory

sos-apply=cookieName; ‘self ’

50

Page 51: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Mitigate Social Engineering

Should prevent situations where user is tricked onto clicking a link/submitting a form on attacker’s page (i.e. different origin) that submits to targeted origin

Use X-Frame-Options to deal with clickjacking

51

Page 52: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

If 6 Was 9

No secrets, no entropyEasier on embedded devices, fewer mistakes

Enforcement by originException-based for flexibilityShift state tracking from server to browser

Pre-flight can be handled by WAF‘isolate’ and expire deal with overhead of pre-flight

(Which is only for cross-origin anyway)

52

Page 53: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Imperfect

Much easier to isolate an origin than work with cross-origin requests.

Decorates resources instead of decorating the cookie.

53

Page 54: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

When Old Becomes New

Update browsersStill have to support legacy, although the window to the past is shrinkingPeople still use old browsers for good reasons, TorBrowser using FireFox ESR

Fix frameworksUse cryptographically secure PRNGDon’t reuse example passphrasesUse XHR brokering with custom headersSeparate authentication and authorization

54

Page 55: Dissecting CSRF Attacks & Defenses - XSS Payloads Shema-CSRFLab.pdf · 2016-04-09 · Pre-Flight 28 HTTP/1.1 200 OK Date: Wed, 16 Oct 2013 07:13:31 GMT Server: Apache/2.2.25 (Unix)

Strong Foundations

Use HSTS

Use CORS isolation (i.e. “non-simple” requests)

Send an SOS

55

SIX:  ALL  OF  THIS  HAS  HAPPENED  BEFORE.BALTAR:  BUT  THE  QUESTION  REMAINS,  DOES  ALL  OF  THIS  HAVE  TO  HAPPEN  AGAIN?