OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint,...

68
OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Transcript of OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint,...

Page 1: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP Top 10from a developer’s perspectiveJohn Wilander, OWASP/Omegapoint, IBWAS’10

Page 2: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

John Wilanderconsultant at Omegapointin Sweden

Researcher in application security

Co-leader OWASP Sweden

Certified Java Programmer

Page 3: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP Top 10Top web applicationsecurity risks 2010

OWASP

Page 4: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

1. Injection2. Cross-Site Scripting (XSS)3. Broken Authentication and Session

Management4. Insecure Direct Object References5. Cross-Site Request Forgery (CSRF)6. Security Misconfiguration7. Insecure Cryptographic Storage8. Failure to Restrict URL Access9. Insufficient Transport Layer Protection10.Unvalidated Redirects and Forwards

OWASP

Page 5: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

1. Injection2. Cross-Site Scripting (XSS)3. Broken Authentication and Session

Management4. Insecure Direct Object References5. Cross-Site Request Forgery (CSRF)6. Security Misconfiguration7. Insecure Cryptographic Storage8. Failure to Restrict URL Access9. Insufficient Transport Layer Protection10.Unvalidated Redirects and Forwards

OWASP

Page 6: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Injection ...the good old, boring stuff

OWASP

Page 7: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

sql = "SELECT * FROM users WHERE firstName = '" + fname + "' AND surName = '" + sname + "'";

OWASP

Page 8: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

sql = "SELECT * FROM users WHERE firstName = '" + fname + "' AND surName = '" + sname + "'";

OWASP

Page 9: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = ’ OR 1=1--sname = blabla

OWASP

Page 10: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

sql = "SELECT * FROM users WHERE firstName = '" + ’OR 1=1-- + "' AND surName = '" + blabla + "'";

Page 11: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

SELECT *FROM usersWHERE firstName = ''OR 1=1--' AND surName = 'blabla'

OWASP

Page 12: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

SELECT *FROM users

OWASP

Page 13: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Input Validation?

OWASP

Page 14: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Johnsname = Wilander

Accept:A-Za-z

OWASP

Page 15: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Luíssname = Grangeia

Accept:A-Za-zí

OWASP

Page 16: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Joãosname = Franco

Accept:A-Za-zíã

OWASP

Page 17: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = {some name}sname = {some name}

Accept:A-Za-zíãåäöüû..........

OWASP

Page 18: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = {some name}sname = {some name}

Accept:\p{L}

OWASP

Page 19: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Oliversname = O’Heir

Accept:\p{L}

OWASP

Page 20: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Oliversname = O’Heir

Accept:\p{L}’

OWASP

Page 21: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Fredriksname = Jägare-Lilja

Accept:\p{L}’

OWASP

Page 22: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = Fredriksname = Jägare-Lilja

Accept:\p{L}’-

OWASP

Page 23: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = John Ericsname = Wilander

Accept:\p{L}’-

OWASP

Page 24: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

fname = ’OR ‘a’ IS NOT NULL--sname = blabla

Accept:\p{L}’-

OWASP

Page 25: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

But ...

’OR ‘a’ IS NOT NULL--

is not a name!

OWASP

Page 26: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

PreparedStatement preparedStmt = connection.prepareStatement( ”SELECT a, b FROM table WHERE c = ?”);preparedStmt.setInt(1, column);ResultSet resultset = preparedStmt.executeQuery();

OWASP

Page 27: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

PreparedStatement preparedStmt = connection.prepareStatement( ”SELECT a, b FROM table WHERE c = ?”);preparedStmt.setInt(1, column);ResultSet resultset = preparedStmt.executeQuery();

OWASP

Page 28: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

PreparedStatement preparedStmt = connection.prepareStatement( ”SELECT a, b FROM table WHERE c = ?”);preparedStmt.setInt(1, column);ResultSet resultset = preparedStmt.executeQuery();

OWASP

Page 29: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

XSS ...much more exciting!

OWASP

Page 30: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Run

script

Cross-site

Scripting

OWASP

Page 31: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Is ...

<script src=”http://attacker.com/c.js”></script>

a name?

OWASP

Page 32: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Just filter <script>, huh?

<img src=javascript:alert('XSS')>

<body onload=alert('XSS')>

<table background="javascript:alert('XSS')">

¼script¾alert(¢XSS¢)¼/script¾

OWASP

Page 33: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

<dependency> <groupId>org.owasp</groupId> <artifactId>antisamy</artifactId> <version>1.4</version></dependency>

OWASP AntiSamy

OWASP

Page 34: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Content Security Policy

X-Content-Security-Policy: allow 'self';

OWASP

Page 35: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Session Management ...just a quick one

OWASP

Page 36: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

HTTP StatelessGET http://www.site.com/ HTTP/1.1

HTTP/1.1 200 OK

OWASP

Page 37: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

HTTP StatelessGET http://www.site.com/ HTTP/1.1

HTTP/1.1 200 OK

OWASP

Page 38: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Hold Your Sessions

• Session ID in URLwww.site.com/ … ;sessionid=1234

• Session ID in hidden form fields<INPUT TYPE=”hidden” NAME=”sessionid” VALUE=”1234”>

• Session ID in cookieSet-Cookie: sessionID=”1234” …

OWASP

Page 39: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

HTTP + SessionGET http://www.site.com/ HTTP/1.1

HTTP/1.1 200 OK

OWASP

Page 40: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

HTTP + SessionGET http://www.site.com/ HTTP/1.1

HTTP/1.1 200 OK

Cookie Monster©2009 Sesame Workshop

OWASP

Page 41: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

About Cookies

• Enduser owns the cookies

• don’t trust cookies backend

• don’t hide anything in them

• JavaScript (thus XSS) can read cookies

• use httpOnly attribute

• Cookies are sent for all requests

• use secure attributeOWASP

Page 42: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Insecure Direct Object Reference

just a quick one

OWASP

Page 43: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

http://site.com/cms?file=report524.pdf

http://site.com/cms?file=../../../../../../../../../etc/passwd

OWASP

Page 44: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Filter ”../” huh?..%2F (URL encoding)%2E%2E%2F (URL encoding)Li4v (Base64 encoding)%002E%002E%002F (Unicode)

”..\” often the same meaning as ”../”..%5C (URL encoding)%2E%2E%5C (URL encoding)Li5c (Base64 encoding)%002E%002E%005C (Unicode)

OWASP

Page 45: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP ESAPIAccess Reference Map

Browser URL

Access Ref Map

WS

DB

FSfile=456772 456772 report524.pdf

OWASP

Page 46: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

CSRF ...my current favorite!

OWASP

Page 47: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind? What’s on your mind?POST POST

OWASP

Page 48: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

I love OWASP!

What’s on your mind? What’s on your mind?POST POST

OWASP

Page 49: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

I love OWASP!

What’s on your mind? What’s on your mind?POST POST

John: I love OWASP!

OWASP

Page 50: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind? What’s on your mind?POST POST

OWASP

Page 51: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind?I hate OWASP!

What’s on your mind?POST POST

OWASP

Page 52: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind?I hate OWASP!

What’s on your mind?POST POST

OWASP

Page 53: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind?I hate OWASP!

What’s on your mind?POST POST

John: I hate OWASP!

OWASP

Page 54: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

What’s on your mind? What’s on your mind?POST

John: I hate OWASP!

<form id="target" method="POST" action="https://john.com/mind" style="visibility:hidden"><input type="text" value="I hate OWASP!" name="oneLiner"/><input type="submit" value="Go"/></form>

<script type="text/javascript"> $(document).ready(function() { $('#form').submit(); });</script>

OWASP

Page 55: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Insufficient Transport Layer Protection

OWASP

Page 56: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP

Page 57: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP

Page 58: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

<div class="menu_login_container"><form method="POST" action="https://login.facebook.com/login.php?login_attempt=1" id="login_form">

OWASP

Page 59: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Moxie’s SSL Strip

Terminates SSL

Changes https to http

Normal https to the server

Acts as client

OWASP

Page 60: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Moxie’s SSL Strip

Secure cookie?

Encoding, gzip?

Cached content?

Sessions?

Strip the secure attribute off all cookies.

Strip all encodings in the request.

Strip all if-modified-since in the request.

Redriect to same page, set-cookie expired

OWASP

Page 61: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

OWASP Transport Layer Protection Cheat Sheet

http://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet

OWASP

Page 62: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Unvalidated Redirects and Forwards ...

phising all the way home!

OWASP

Page 63: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Return Path et al

www.site.com/login?returnPath=www.site.com/secure?page=3

OWASP

Page 64: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Return Path et al

www.site.com/login?returnPath=www.attacker.com

OWASP

Page 65: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

Return Path et al

www.site.com/login?returnPath=bit.ly/Kl89GT

OWASP

Page 66: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

ESAPI sendRedirect()

http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/HTTPUtilities.html

sendRedirect(HttpServletResponse, String)

OWASP

Page 67: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

1. Injection2. Cross-Site Scripting (XSS)3. Broken Authentication and Session

Management4. Insecure Direct Object References5. Cross-Site Request Forgery (CSRF)6. Security Misconfiguration7. Insecure Cryptographic Storage8. Failure to Restrict URL Access9. Insufficient Transport Layer Protection10.Unvalidated Redirects and Forwards

OWASP

Page 68: OWASP Top 10 · OWASP Top 10 from a developer’s perspective John Wilander, OWASP/Omegapoint, IBWAS’10

[email protected]: @johnwilander

Blog: appsandsecurity.blogspot.com

OWASP