Why AJAX Applications Are Far More Likely To Be Insecure (And What To Do About It) OWASP AppSec Seattle Oct 2006 Dave Wichers, OWASP Conferences Chair COO, Aspect.
Download
Report
Transcript Why AJAX Applications Are Far More Likely To Be Insecure (And What To Do About It) OWASP AppSec Seattle Oct 2006 Dave Wichers, OWASP Conferences Chair COO, Aspect.
Why AJAX Applications Are Far
More Likely To Be Insecure
(And What To Do About It)
OWASP
AppSec
Seattle
Oct 2006
Dave Wichers, OWASP Conferences Chair
COO, Aspect Security
[email protected]
301 604 4882
Copyright © 2006 - The OWASP Foundation
Permission is granted to copy, distribute and/or modify this document under the
terms of the Creative Commons Attribution-ShareAlike 2.5 License. To view this
license, visit http://creativecommons.org/licenses/by-sa/2.5/
The OWASP Foundation
http://www.owasp.org/
What Is AJAX?
AJAX is collection of
techniques used to improve
user experience
Dynamic HTML
XmlHttpRequest
JavaScript in browser
Issues asynchronous requests
Handles responses
AJAX causes web applications
to extend beyond the server
into the browser
AJAX is supposedly not an
acronym, but in reality it
stands for:
Asynchronous
JavaScript
And
XML
The reason for all this:
Jesse James Garrett, AJAX pioneer
OWASP AppSec Seattle 2006
2
Google Maps – AJAX Killer App
JavaScript is used
asynchronously to talk to the
server in the background
Browser has no idea the
page’s JavaScript is talking
to the server
Back/Forward buttons not
what you expect since
browser does not know
about JavaScript’s
communications
Normal visual cues that
activity is going on are
missing
OWASP AppSec Seattle 2006
3
Web 1.0 and Web 2.0 Architectures
Compared
“Web 1.0” Architecture
Traditional Client/Server
Synchronous
Click-Wait-Refresh
______________________________________________
“Web 2.0” Architecture
Used with AJAX/Flash/Applet
Asynchronous
Time or user-driven refreshes
User never has to leave page
Application feels “richer”
OWASP AppSec Seattle 2006
4
Why Use AJAX?
More interactive interfaces
More smaller messages may improve network use
Content feeding
Download content from the server and process it
Content can be HTML, JavaScript, XML, pictures, anything
On-demand JavaScript
Download code as needed
Client Prediction
User actions help predict next actions
Queue up data to speed up delivery
OWASP AppSec Seattle 2006
5
AJAX Security – Summary
“AJAX applications face exactly the same
security issues as all other web
applications, plus they
add their own particular set of risks that
must be correctly managed.
By their complex, bidirectional, and
asynchronous nature, AJAX applications
increase attack surface area.”
OWASP Guide 3.0 – Chapter on AJAX and
Other “Rich” Interface Technologies
OWASP AppSec Seattle 2006
6
AJAX – Nothing New, but …
In one way,
nothing new here
Just client-side
presentation
enhancements
Neat tool for
improving
interactivity and
responsiveness
Simply requires
more code on the
client side
All HTTP under the
covers
All the same
security concerns
apply
function reloadContents() {
httpObj = new XMLHttpRequest();
httpObj.onreadystatechange = getAjaxData;
httpObj.open(
"GET", "/GetContentsServlet", true);
httpObj.send(null);
}
GET http://maps.google.com/GetContentsServlet HTTP/1.0
Accept: */*
Referer: http://maps.google.com/
Accept-Language: en-us
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0)
Host: maps.google.com
Cookie: PREF=ID=8e2690f29f4050c8:TB=2:TM=1142526213;
OWASP AppSec Seattle 2006
7
Example AJAX Code
function reloadContents() {
httpObj = new XMLHttpRequest();
httpObj.onreadystatechange = handleReloadContents;
httpObj.open("GET","/GetContentsServlet",true);
httpObj.send(null);
}
function handleReloadContents() {
if (httpObj.readyState == 4 ||
httpObj.readyState=="complete") {
var cell = document.getElementById("mainBody");
cell.innerHTML = httpObj.responseText;
}
}
OWASP AppSec Seattle 2006
8
AJAX XmlHttpRequest (XHR)
Same-origin policy
Can’t request outside of parent domain
(JavaScript sandbox)
XHR is not new but is relatively untested
XHR introduced in 1998, but use only recently
popular
First security problems only uncovered recently
Implementations in browsers vary
OWASP AppSec Seattle 2006
9
New AJAX Security Threats to Consider
Developer Issues
Testing Issues
Architecture Issues
Server Side AND
Client Side
New Technology Issues
AJAX Privacy Concerns
New and Existing Injection Issues
AJAX Bridges
OWASP AppSec Seattle 2006
10
New Threat: Developer Issues
More wizards and tools
Hide client-server distinction
AJAX applications have
larger Attack Surface than
traditional web applications
Lack of examples
Developers invent stuff
Many novices
HTML “programmers” now
using AJAX (because its cool
/ popular)
Tools aren’t there
Very hard to debug
Mozilla’s Venkman JS
debugger
OWASP AppSec Seattle 2006
11
How Developers See AJAX
Service
(server-side)
Application
(client-side)
OWASP AppSec Seattle 2006
12
How Attackers See AJAX
Sniffing
Interception
Tampering
Service
(server-side)
Application
(client-side)
Chained Attacks on
Other Services or
Other Clients
Attacks on
Local Hosts
and Networks
Attacks on Client
Attacks on Server
OWASP AppSec Seattle 2006
13
Dangerous Developer Assumptions
Nobody can find my service
If the client knows, then the hacker knows
Where my code runs doesn’t have a security impact
Security decisions must not be made on the client
Frameworks and code generators handle security
Making things talk is easy, making them secure can’t be
automated
The only way to access my service is with my client
You cannot do security testing with a browser
My code is too tricky to understand
Attackers can reverse engineer anything
OWASP AppSec Seattle 2006
14
New Threat: Testing Issues
Complexity
More moving parts in
distributed systems
Only getting worse with Web
Services/SOA
Hidden code
AJAX code is difficult to
manage
Google Web Toolkit solves
this problem by compiling
Java into JavaScript
Difficulty of testing
No testing tools
OWASP AppSec Seattle 2006
15
Google Web Toolkit (GWT)
An example of
‘Why it can be hard for developer to define server
interface’
In GWT, all code is written in Java
Its then translated into Java code and JavaScript
Java code stays on server (defining server interface)
JavaScript goes to browser
Magically Deployed (nasty details hidden)
This is really cool!!
But … developer has no idea where client-server
boundary is
Therefore, developer doesn’t know where its safe to put
OWASP AppSec Seattle 2006
security checks
16
New Threat: Architecture Issues
Must synchronize security checks on both client and server
Must keep the business logic on the server (IP issues)
New client-side attack surface
Server-side attack surface closer to backend
Now function calls instead of simpler requests
Untrusted
Trusted, controlled
Secure, controlled
Highly protected
Business logic
Limited state
Web Service
XMLRPC
AJAX - JSON
SOA layer
OWASP AppSec Seattle 2006
17
Attack Surface Change When Moving to
AJAX Enabled Web App
AJAX Standard Web App
Browser
(HTML and
JavaScript)
(PL)
Data
Layer
AJAX
(BL)
AJAX
(DL)
Browser
(HTML
and
Browser
(HTML
and
JavaScript)
Present.
Layer
Client-Server
Interface
Interface
Changes
AJAX
Busin.
Logic
Pure AJAX Web App
AJAX
Bus.
Logic
Data
Layer
Present.
Layer
Client-Server
Interface
Busin.
Logic
(PL)
Goal: Understand the Server
interface and make it as
simple as possible
Browser
(HTML and
JavaScript)
Data
Layer
Client-Server
Interface
*Of course, any architecture is possible
OWASP AppSec Seattle 2006
18
New Threat: New Technology Issues
JavaScript
Language is not great
Not standard
Still evolving
Protocols and parsers
Brand new
Web services
Still very new
OWASP AppSec Seattle 2006
19
REST vs. SOAP
Deciding on a protocol
REST
Simple HTTP requests
(generally GET)
Simple HTTP response
containing XML in body
80% of exposed Web
Services traffic is REST
SOAP
POST protocol
SOAP headers
XML in request body,
XML in response body
SOAP more capable
and robust, but harder
to build
GET http://ajax.com/getData HTTP/1.0
Accept: */*
Referer: http://ajax.com/
Accept-Language: en-us
HTTP/1.1 200Keep-Alive
OK
Proxy-Connection:
Content-Type:
text/xml
User-Agent:
Mozilla/4.0
Date:
Wed,
03
Nov
2004 23:31:00 GMT
Host: ajax.com
Server:
Apache
Coyote/1.0
Cookie: JSESSIONID=9ABF9B823A874823A874
Connection: close
<books>
<book>
<title>JavaScript Guide</title>
POST /webservices/getData HTTP/1.1
Host: ajax.com
Content-Type: text/xml
Content-Length: 140
200 OK
Cookie:HTTP/1.1
JSESSIONID=9ABF9B823A874823A874
Content-Type: text/xml
Date: Wed, 03 encoding=“utf-8”?>
Nov 2004 23:31:00 GMT
<?xml version=“1.0”
Server: Apache Coyote/1.0
<soap:Envelope>…
Connection: close
<soap:Body>
…xml parameters…
<?xml version=“1.0” encoding=“utf-8”?>
<soap:Envelope>…
<books>
<book>
<title>JavaScript Guide</title>
OWASP AppSec Seattle 2006
20
XML vs. JSON
Deciding on a data format
JSON
JavaScript Object
Notation
Message format for
passing JavaScript objects
between client and server
Interpreted in the browser
using eval()
XSS attacks on clients
possible through JSON
messages
XML
Extensible Markup
Language
Universal - many parsers
available
Many known attacks
associated with parsers
and validators
{"books":[{"book":
{
"title":"JavaScript Guide",
"publisher":"O'Reilly",
"author":"David Flanagan",
"cover":"/images/cover_defguide.jpg",
"blurb":"Lorem ipsum."
}
}, ...
var data = eval('(' + req.responseText + ')');
<books>
<book>
<title>JavaScript, Definitive Guide</title>
<publisher>O'Reilly</publisher>
<author>David Flanagan</author>
<cover src="/images/cover_defguide.jpg" />
<blurb>Lorem ipsum.</blurb>
</book>
<book> ...
OWASP AppSec Seattle 2006
21
AJAX Privacy Concerns
AJAX has client side state
Cookies
XML Data
DOM
All of these can be manipulated by
Hostile code injected into client
By user directly
Not private in any way
OWASP AppSec Seattle 2006
22
Increased Threat: Injection Attacks
Server Side
Code Injection – e.g., Most PHP AJAX tool kits (e.g.:
AJason, JPSpan and CPAINT) allow remote code
injection by allowing client-side server code invocation
XML and XPATH injection – just like SQL injection
Client Side
Script Injection – i.e., Cross Site Scripting (XSS)
DOM injection – client side attacks now much easier
JSON injection – be careful how you decode!
XML and XSLT injection – access or reformat data
Custom AJAX Engine Injection – If AJAX client includes
an interpreter
Probably more …
* Source: Many of these points came from Andrew Van Der Stock’s Ajax Security presentation from
OWASP EU 2006
OWASP AppSec Seattle 2006
23
Lets Look at Client Side Injection Threats
XSS – Any such flaw completely compromises the
client side
Can access any client side data
Can modify any client side code (its all in the DOM)
DOM Injection
Introduces XSS of the 3rd kind and exposes private data
JSON/XML/XSLT Injection
Access or reformat data or kill parser
Custom AJAX Engine Injection (New!!)
Can inject commands into engine
Can modify engine itself
Complete client side compromise!!
OWASP AppSec Seattle 2006
24
New Type of Application: Mashups
Mashup - Web Application that combines data from multiple
sources (typically different Web Services)
E.g., Google Maps with locations of all OWASP Chapters
AJAX frequently used to implement Mashups
Problem - Browser prevents client application from accessing
more than one Web Service (due to source-of-origin rule)
Solutions
One Web Service serves as proxy to the other (allowing client to
only talk to one site). Introduces Trust Relationship.
Ask user for ‘permission’ to access second site
Problems with both approaches
Client side can’t gain access to other site’s data (authentication?)
Server side may pass malicious requests through to other service
OWASP AppSec Seattle 2006
25
Browser Sandbox
Currently, most only allow access to original site
But lots of developers are pushing for crossdomain XHR
Means your client could request data from some other
site
They want “mashups” to happen on the client
If “other site” is outside your control
No opportunity to validate or encode data
Could include bad data or malicious scripts
Could encourage passing sensitive data unprotected
If successful, attacker script could…
Drive the client and do anything the user could do
Steal data
Disclose session cookie
OWASP AppSec Seattle 2006
26
New Threat: AJAX Bridges
AJAX Bridge: Proxy AJAX Requests through one Server to
Another
Bridge can be used to anonymously attack other service
Bridge might have more privileges that normal user
Service might trust bridge more than normal user
If service detects attacks from bridge, might cut off the bridge,
thus causing denial of service to bridging app
Service might prohibit access through Bridge (against rules of
use)
User might not trust Bridge to access his info on the target
service (e.g., financial analysis bridge not allowed to access
user’s actual account, but mixing data directly on client might
be OK, if cross domain XHR were allowed)
Many AJAX Frameworks include Bridges
* Source: Many of these points came from Billy Hoffman’s Ajax (in)security presentation from Black Hat
2006
OWASP AppSec Seattle 2006
27
High Level Recommendations (Server Side)
As always, never trust anything done on Client
Clearly understand the Server Interface (i.e., your
attack surface)
If AJAX framework includes server side code, carefully
validate it, or avoid using it (i.e., write your own)
Many AJAX frameworks are 100% client based, which is
good (since they don’t introduce server side risks), but
there are still other issues (as discussed later)
E.g., Tibco, Atlas, Backbase
Warning: There are LOTS of frameworks (and they are all
different)
See: http://ajaxpatterns.org/Ajax_Frameworks
Ensure proper protections on Server Interface
See AJAX Security Checklist
OWASP AppSec Seattle 2006
28
High Level Recommendations (Client Side)
Don’t Store Sensitive Data
Minimize Business Logic (easily tampered with)
Be Extra Careful about XSS Flaws
Since more likely to have sensitive data
Could modify AJAX interpreter
Identify All Client Side Interpreters and Parsers
Be careful to avoid ANY injection attacks against these
Particularly any fancy new AJAX Engine (on client or
server)
OWASP AppSec Seattle 2006
29
AJAX Security Checklist
Security Areas (Client and Server
Note:
Side)
Secure Communications
Almost no built-in
security in AJAX
Authentication and Sessions
environments, so
you have to build
Access Control
these yourself
Data Protection
Input Validation and Output Encoding
Error Handling
Logging & Intrusion Detection
Availability
Concurrency
OWASP AppSec Seattle 2006
30
Other Types of Rich Internet Applications (Like
AJAX)
Flash
Runs .swf files in browser VM plugin
Many known flaws in Flash Player
Java applets
All Java security benefits
Not as integrated in browser
Java web-start applications
More like a desktop application
Strong security
ActiveX controls
Windows only
Powerful - no sandbox!
User interface languages (XUL)
future?
OWASP AppSec Seattle 2006
31
Summary
Some new interesting
problems in AJAX / Web
2.0
Make sure developers
know trust boundaries
and security issues
With good coding policy
and good design, risk
can be mitigated
OWASP AppSec Seattle 2006
32
AJAX Security Resources
Guide to Building Secure Web Applications and
Web Services
Chapter: Ajax and Other "Rich" Interface Technologies
http://www.owasp.org/index.php/Ajax_and_Other_%2
2Rich%22_Interface_Technologies
AJAX Patterns Site Security Links:
http://ajaxpatterns.org/Security_Links
Andrew Van der Stock’s forthcoming book
OWASP AppSec Seattle 2006
33
Questions and Answers
QUESTIONS
ANSWERS
OWASP AppSec Seattle 2006