Is Secure Ajax an Oxymoron - Scott Matsumoto Principal Consultant Cigital, Inc Dulles, VA
←
→
Page content transcription
If your browser does not render page correctly, please read the page content below
Is Secure Ajax an Oxymoron
Scott Matsumoto
Principal Consultant
Cigital, Inc
Dulles, VA
smatsumoto@cigital.comCourse Objectives • Have you write more secure Ajax applications • Give you and appreciation of how Ajax is insecure • Provide you with guidance about how to work around Ajax security problems
Ajax Applications Are Cool
• Real end-user benefit
from more responsive
apps
• We want our
application UIs to be
as cool as Google
maps and NetflixAjax Pushes Code and Data to the
Client
Traditional Web Applications
• Coarse-grained APIs
• State and Logic on Server
Ajax Applications
• Fine-grained APIs
• Client-side state and logicIt Sounded Like a Good Idea at the
Time…
• Why are you adopting Ajax?
– Competitive advantage
– Better, faster user experience
– Higher user satisfaction
– Lower abandonment rates
• Is adopting Ajax free?[in]Security is Part of the Price
Resist attacks on the:
Integrity of the client-
side business logic
4 Integrity of the client-
1
2 3 side data
Integrity and
confidentiality of
communication
channel
Integrity of the data
exchanged between
the client and server
(both directions)Securing the Client Is Hard
• The attacker owns the
Client Trust
machine and local network
Zone
• Client state cannot be
1 3
2
secured; all sensitive
information must remain
DOM
View
opaque
Controller
End User
• Javascript is just text with
no way of validating the
integrity of the code
• Same problems as
securing a MMOGFine-Grained Server API Woes • Overall increased attack surface • Allows for more sophisticated cross-site scripting attacks by abusing your server API • Denial of Service through use
The Dangers of Exposing Server
Side Objects
3 Increases the overall attack surface
Overload 2
server with too
many requests
(DoS)
Enables more 1
sophisticated
XSS attacksAjax Enables More Sophisticated
XSS Attacks
• The application has created a richer server
API to support Ajax
• The application has a cross-site scripting
(XSS) vulnerability (not necessarily)
related to the Ajax APIs
• An attacker can also use that rich Ajax API
as part of the XSS exploitOverload the Server with Too Many
Requests
• Fine-grained APIs require more requests
to get work done
• Extreme case is Google Search Suggest
API
– Incremental search on each character you
type
• Inadvertently design in Denial of ServiceIncreased Attack Surface
• Server-side
– Heightens the need for a comprehensive
approach to input validation and output
encoding in your application design
• Client-side injections
– JSON
– DOMClient-side Injections
Attacker can inject Injected code
1. Javascript 1 is stored in
2. JSON the model
3. XML
Injected JSON
subverts client-
side objects
Javascript
Injected JSON gets injected
and XML are into dynamic
written into the pages
DOM by the
Javascript
Injected Javascript
subverts to client-
side logicRemediation Through Better API
Design
• Use Façade objects to reduce attack
surface
• Design a systemic way of handling input
validation and output encoding
• Ensure that all entry points require proper
authenticationUse Façade Objects to Reduce
Attack Surface
• Better separation of concerns
• Simplified interface
• Coarse-grainedMashup – A Tale of Two Servers • Mycoolmashup.com • Want to integrate store locations with Google maps • You make the following call: xmlhttp.open(“maps.google.com/…”) • ARG ! – Same origin policy
Javascript Same Origin Policy
(Simplified) app2 would
get its own
cigital.com
sandbox
app.youtoo.com app.cigital.com
sandbox sandbox
browser
app.cigital.com app2.cigital.com
youtoo.com
app.youtoo.com app.cigital.com
End User
app.youtoo.com
Browser maintains a The same origin policy
separate Javascript prevents cross server
sandbox for each Javascript requests
serverBuilding Your Mashup
Solution 1: Subvert the browser security
– will load cross site code
Solution 2: Write the mashup code on the
server
– Proxying doesn’t scale well
Solution 3: Wait for new HTML tags
– IE8/Firefox3…?Subverting Same Origin Policy
Insecure, Bad Practice*
The same origin policy Page is from
prevents cross server app.cigital.com
Javascript requests
youtoo( )
The same origin policy
doesn’t apply to HTML
* Gmail got bit by this type of bug
tags!Mashup on the Server
(Not Perfect, but Recommended)
• Disadvantages
– Additional server resources to scale
• Advantages
– Write business logic in a trusted environment
– More mature development, execution and
testing environmentCSRF Solution Using Ajax • Cross-site Request Forgery (CSRF) attacks can be mitigated using Ajax • Best mitigation involves a one-time-use token • Solutions vary the scope of the token during “action” creation • Leverages the Single Origin Policy
Double Submit the Cookie Pattern
The same origin policy prevents
1 Javascript in the app.cigital.com
sandbox from reading the
app.youtoo.com session cookie
Compare session cookie
Pass the session cookie as part 3 parameter against session
2
of the data in forms and URIs cookie HTTP HeaderToolkits
How Do You Choose?
Back End Front End Toolkits
• Small Frameworks • Cross Browser Libraries
– DWR Supported
– CPaint Which
Browsers?
– SAJAX Languages? – Dojo
– JSON-RPC – Sarissa
• GWT – Prototype Which
Widgets?
• Atlas Support for • Widgets
Client and
• Backbase Server? – Scriptaculous
– Rico
– RialtoToolkit Security Checklist
• Server side
– API Authorization mechanism integrated with
platform
– Session Management managed as part of the
framework
– XSS and/or CRSF prevention
• Client side
– Integration with the server-sideSoftware Security Checklist
• Ajax just re-arranges where code lives
• Ajax Security is just Software Security
• Security of your Ajax application depends
on you
– Tools and Toolkits help, but are not silver
bullets
– Practice good secure development hygiene
• Be careful with sample codeSample Code Is Not Secure
What’s Wrong with this Code?
function OnFailed(error)
{
var stackTrace = error.get_stackTrace();
var message = error.get_message();
var statusCode = error.get_statusCode();
var exceptionType = error.get_exceptionType();
var timedout = error.get_timedOut();
// Display the error.
var RsltElem = document.getElementById("Results");
RsltElem.innerHTML = "Stack Trace: " + stackTrace + "" +
"Service Error: " + message + "" +
"Status Code: " + statusCode + "" +
"Exception Type: " + exceptionType + "" +
"Timedout: " + timedout;
}
Printing a Stack Trace is not
“Failing Securely” – one of the
Ten Principles of Secure DesignIs Ajax Less Secure?
• How much code and data is being moved
to the client?
• What code and data is being moved to the
client?
4
1 3
2Ajax Is As Secure As You Design
and Code It
• Does your SDLC already handle secure
development practices?
– Abuse Cases and Security Requirements
– Secure Design Analysis
– Secure Code Review
– Risk-based Security TestingWrap Up • Ajax presents an application development paradigm that provides benefit • Ajax presents software security challenges that build on you web application security hygiene • Your Ajax application will be as secure as you make it
Thank You for Your Time
Scott Matsumoto
Principal Consultant
Cigital, Inc
Dulles, VA
smatsumoto@cigital.comYou can also read