OWASP Top 10 - 2010 Presentation
OWASP Top 10 - 2010 Presentation
OWASP Top 10 - 2010 Presentation
The Top 10 Most Critical Web Application Security Risks Dave Wichers COO, Aspect Security OWASP Board Member dave.wichers@aspectsecurity.com dave.wichers@owasp.org
Copyright The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
Whats Changed?
OWASP - 2010
=
=
= +
OWASP - 2010
1 2 3
http://www.owasp.org/index.php/Top_10
OWASP - 2010
A1 Injection
OWASP - 2010
AccountsTransactions Bus. Functions Administration E-Commerce Communication Finance Knowledge Mgmt Custom Code
DB Table
Acct:5424-9383-2039-4029 Acct:4128-0004-1234-0293
1. Application presents a form to the attacker 2. Attacker sends an attack in the form data 3. Application forwards attack to the database in a SQL query
4. Database runs query containing attack and sends encrypted results back to application
5. Application decrypts data as normal and sends results to the user
Network Layer
Firewall
Firewall
OWASP - 2010
References
For more details, read the new
http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
OWASP - 2010
OWASP - 2010
Attacker enters a malicious script into a web page that stores the data on the server
Script runs inside victims browser with full access to the DOM and cookies
Dont include user supplied input in the output page Primary Recommendation: Output encode all user supplied input (Use OWASPs ESAPI to output encode: http://www.owasp.org/index.php/ESAPI Perform white list input validation on all user input to be included in page For large chunks of user supplied HTML, use OWASPs AntiSamy to sanitize this HTML to make it safe See: http://www.owasp.org/index.php/AntiSamy
References
For how to output encode properly, read the new
http://www.owasp.org/index.php/XSS_(Cross Site Scripting) Prevention Cheat Sheet
(AntiSamy)
OWASP - 2010
JavaScript Data
(e.g., <script> some javascript </script> )
OWASP - 2010
Knowledge AccountsCommunication Administration Bus. Funct Finance Transactions E-Commerce Mgmt Custom Code
Hacker checks referer logs on www.hacker.com and finds users JSESSIONID 5 Hacker uses JSESSIONID and takes over victims account
OWASP - 2010
Forget automated analysis approaches Check your SSL certificate Examine all the authentication-related functions Verify that logoff actually destroys the session Use OWASPs WebScarab to test the implementation
OWASP - 2010
OWASP - 2010
Attacker notices his acct parameter is 6065 ?acct=6065 He modifies it to a nearby number ?acct=6066 Attacker views the victims account information
OWASP - 2010
http://app?file=Report123.xls
http://app?id=9182374
Access Reference Map
Report123.xls Acct:9182374
Verify the parameter value is properly formatted Verify the user is allowed to access the target object Verify the requested mode of access is allowed to the target object (e.g., read, write, delete)
OWASP - 2010
OWASP - 2010
OWASP - 2010
CSRF Illustrated
1 Attacker sets the trap on some website on the internet (or simply via an e-mail)
Knowledge AccountsTransactions Finance Communication Administration Bus. Functions E-Commerce Custom Code Mgmt
3 <img> tag loaded by browser sends GET request (including credentials) to vulnerable site Vulnerable site sees legitimate request from victim and performs the action requested
OWASP - 2010
Options
Store a single token in the session and add it to all forms and links
Beware exposing the token in a referer header Hidden fields are recommended Can have a unique token for each function Use a hash of function name, session id, and a secret Can require secondary authentication for sensitive functions (e.g., eTrade)
Hidden Field: <input name="token" value="687965fdfaew87agrde" type="hidden"/> Single use URL: /accounts/687965fdfaew87agrde Form Token: /accounts?auth=687965fdfaew87agrde
Properly encode all input on the way out This renders all links/requests inert in most interpreters
OWASP - 2010
A6 Security Misconfiguration
OWASP - 2010
Database
AccountsTransactions Bus. Functions Administration E-Commerce Communication Finance Knowledge Mgmt Custom Code App Configuration
Development
Insider
Source Control
OWASP - 2010
OWASP - 2010
OWASP - 2010
Communicatio Knowledge Accounts Administration Finance Transactions Functions E-Commerce Bus. Mgmt Custom Code n
Log files Error handler logs CC details because merchant gateway is unavailable 3 2
OWASP - 2010
Use standard strong algorithms Generate, distribute, and protect keys properly Be prepared for key change
A standard strong algorithm is used, and its the proper algorithm for this situation All keys, certificates, and passwords are properly stored and protected Safe key distribution and an effective plan for key change are in place Analyze encryption code for common flaws
OWASP - 2010
OWASP - 2010
https://www.onlinebank.com/user/getAccounts
OWASP - 2010
Verify the server configuration disallows requests to unauthorized file types Use WebScarab or your browser to forge unauthorized requests
An external filter, like Java EE web.xml or a commercial product Or internal checks in YOUR code Use ESAPIs isAuthorizedForURL() method
OWASP - 2010
OWASP - 2010
External Victim
Custom Code Backend Systems
Business Partners
Employees
1 External attacker steals credentials and data off network External Attacker 2
Internal attacker steals credentials and data from internal network Internal Attacker
OWASP - 2010
Use standard strong algorithms (disable old SSL algorithms) Manage keys/certificates properly Verify SSL certificates before using them Use proven mechanisms when sufficient
E.g., SSL vs. XML-Encryption
OWASP - 2010
FinanceCommunication Accounts Transactions Bus. Functions Administration E-Commerce Knowledge Mgmt Custom Code
Request sent to vulnerable site, including attackers destination site as parameter. Redirect sends victim to attacker site
Evil Site
Request sent to vulnerable page which user does have access to. Redirect sends user directly to private page, bypassing access control. Application authorizes request, which continues to vulnerable page
public void sensitiveMethod( HttpServletRequest request, HttpServletResponse response) { try { // Do sensitive stuff here. ... } catch ( ...
Filter
public void doPost( HttpServletRequest request, HttpServletResponse response) { try { String target = request.getParameter( "dest" ) ); ... request.getRequestDispatcher( target ).forward(request, response); } catch ( ...
Forwarding page fails to validate parameter, sending attacker to unauthorized page, bypassing access control
OWASP - 2010
a)Validate each parameter to ensure its valid and authorized for the current user, or b)(preferred) Use server side mapping to translate choice provided to user with actual target page
Defense in depth: For redirects, validate the target URL after it is calculated to make sure it goes to an authorized external site ESAPI can do this for you!!
See: SecurityWrapperResponse.sendRedirect( URL )
http://owasp-esapijava.googlecode.com/svn/trunk_doc/org/owasp/esapi/filters/SecurityWrapperResponse.html#sendRedirect(java.lan g.String)
Use OWASPs Application Security Verification Standard as a guide to what an application needs to be secure Use standard security components that are a fit for your organization
Use OWASPs ESAPI as a basis for your standard components http://www.owasp.org/index.php/ESAPI http://www.owasp.org/index.php/ASVS
Have an expert team review your applications Review your applications yourselves following OWASP Guidelines
OWASP Code Review Guide: http://www.owasp.org/index.php/Code_Review_Guide OWASP Testing Guide: http://www.owasp.org/index.php/Testing_Guide
OWASP - 2010
OWASP (ESAPI)
Acknowledgements
Wed like to thank the Primary Project Contributors
Aspect Security for sponsoring the project Jeff Williams (Author who conceived of and launched Top 10 in 2003) Dave Wichers (Author and current project lead)
OWASP - 2010