SlideShare a Scribd company logo
HTML5 Security Realities



           Brad Hill, PayPal
        bhill@paypal-inc.com @hillbrad

      W3Conf: Practical standards for web professionals
      21 -22 February 2013
      San Francisco
“The reason that the Web browser is
the principal entry point for
malware is the number of choices
that a browser offers up to
whomever is at the other end.
Evolving technologies like
HTML5 promise to make this
significantly worse.” – Dan Geer
In the next 30 minutes:
• Show you real code using new standards to:
  – Solve Script Injection Vulnerabilities
  – Build Secure Mashups


• HTML5 is a big step forward in security for the
  Web platform
Solving
  Script
Injection
Script Injection, also known as Cross-Site
Scripting or XSS, is the most common Web
          Application vulnerability.

In 2007, WhiteHat estimated that 90% of
         sites were vulnerable.
XSS in a nutshell:

If somebody else’s code gets to
run in your WebApp, it’s not your
WebApp anymore.

+ Same-Origin Policy = XSS
anywhere on your domain is XSS
everywhere on your domain.
Current defenses:
 • Input filtering
    – Strip dangerous characters and tags from user data


 • Output encoding
    – Encode user data so it isn’t treated as markup


“HTML5 broke my XSS filter!”
YES.

    html5sec.org lists a dozen new XSS vectors
      in new tags and attributes in HTML5.


But your filter was already broken.
</a/style='-=a&#x5c;b expr65
ss/*
&#x2a/ion(URL='javascript:&#
x25;5cu0&#48;
64ocum&#x25;5cu0&#48;64oc
um&#x25;5cu0&#48;65nt.writ&
#x25;5cu0&#48;65(1)' )'>
1;--
<?f><x:!μ!:x/style=`b&#x5c;65h
0061vior:url(#def&#x61ult#time
2)';'`/onbegin=&#x5b�=u00&#
054;1le&#114t&#40&#x31)&#x5
d&#x2f/&#xy,z>
W3 conf hill-html5-security-realities
XSS Filters Were Doomed
Filters are a server-side attempt to simulate the
client-side parser and execution environment.
But…
• Every browser parser operated differently
• The algorithms were secret
• Every browser had proprietary features, tags
   and syntax
• Accepting bad markup was a feature
W3 conf hill-html5-security-realities
Generously coercing a shambling
     mound of line noise into an
application is no longer a competitive
                feature.
By standardizing the technology for
   building Rich Web Applications,
HTML5 began a fundamental shift in
the security posture of the Web as a
               platform.
W3 conf hill-html5-security-realities
Proprietary platforms compete for
 developers by offering features.



Open platform implementers
compete for users by offering
          quality.
And now,

BACK TO SOLVING SCRIPT INJECTION
New and Better Anti-XSS Approaches
Even if we now have some hope of simulating
the browser parser for HTML5…

     Not easy, definitely not future-proof.
     Misses client-only data flows.

Why not get help from the client?
Content Security Policy

 25          6.0                   6.0        6.0          10
       X-Content-Security-Policy    X-WebKit-CSP    (sandbox only)




HTTP header to enforce, in the client, a least-
 privilege environment for script and other
                  content.
W3 conf hill-html5-security-realities
Content-Security-Policy:
default-src 'self';
object-src 'none';
img-src https://uploads.example-board.net
         https://cdn.example-board.com
         data:;
script-src https://code.example-board.net
           https://www.google-analytics.com;
frame-src *.youtube.com;
report-uri https://www.example-
board.net/cspViolations.xyz
Content Security Policy 1.0
default-src       Everything
script-src        Scripts
object-src        Plugins
style-src         CSS
img-src           Images
media-src         Audio + Video
frame-src         Frame content
font-src          Fonts
connect-src       Script-loaded content (e.g. XHR)
sandbox           Same as HTML5 iframe sandbox
reporturi         Violation reporting
The catch…
• CSP enforces code / data separation

• This means:
  NO inline script or css
  NO eval, even in libraries

(can be disabled, but sacrifices many of the
benefits of CSP)
<script> function doSomething ()…
</script>

<button onClick="doSomething()">
Click Here!</button>
<!--myPageScript.js-->
function doSomething ()…

Document.addEventListener(‘DOMContentLoader',
function() { for var b in
document.querySelectorAll('.clickme‘))
e.addEventListener('click', doSomething); });

<!--myPageContent.html-->
<script src="myPageScript.js"></script>
<button class="clickme">Click Here!</button>
Coming soon in CSP 1.1
• Whitelisting of inline scripts and CSS

•   More granular origins
•   Better control of plugins and media types
•   Control and reporting for reflected XSS filters
•   META tag support

https://dvcs.w3.org/hg/content-security-
policy/raw-file/tip/csp-specification.dev.html
Templating

Templating is one of the oldest and most widely
used Web application construction patterns.

But it is a hive of XSS villainy because it has
never been a first-class feature in the client.
HTML Templates
New spec in progress in the WebApps WG:
 https://dvcs.w3.org/hg/webcomponents/raw-
file/tip/spec/templates/index.html

Declare templates as first-class client-side
objects for increased performance, reduced XSS
risk.
With CSP and a careful application
architecture XSS can be solved today.

In the near future it will be possible
using more familiar and better
performing idioms.
Secure
            Mashups
“HTML5 and CORS give new
ways to bypass the Same-Origin
Policy!”
A “mashup” incorporates content from
    multiple origins under different
        administrative control.

    Today, more apps than not are
authenticated mashups: ads, analytics,
           federated login

 How did we do this before HTML5?
Flash, with crossdomain.xml
<?xml version="1.0"?>
<!--https://www.foo.com/crossdomain.xml--
>
<cross-domain-policy>
  <allow-access-from
     domain=“www.example-analytics.com"/>
</cross-domain-policy>
Jan’s Rule:

“Give someone an ACL, and
     they’ll put in a *.”
A “*” in your master crossdomain.xml policy means your
 users’ information is vulnerable to any malicious SWF,
                 anywhere on the Web
I can’t use Flash on iOS anyway…

What about HTML-only methods?
<script src=“foreignOrigin">
                    Same-Origin Loophole

                               Browser
 example-2.com

                           Origin=example.com


                               <script src=
                      https://example-2.com/x.js>


                          (function( window,
                             undefined ) {…
example.com
AKA – “JSONP”
• “JSON with padding”
<script src=“example.com/jsonp?callback=foo”>

• Returns JSON data “padded” with a call to the
  function you specified.

• You hope…it’s still script!
This pattern injects somebody
     else’s code into your
          application.

Remember what the definition
      of XSS was?
W3 conf hill-html5-security-realities
<script
src="//connect.facebook.net/en_US/all.js">
</script>
W3 conf hill-html5-security-realities
We can
build it better.
 We have the
 technology.
Cross-Origin Resource Sharing (CORS)

  22    5.1     3.2    15    15    2.1   10        7


Voluntarily relax the Same-Origin Policy with an
HTTP header to allow permissioned sharing on a
resource-by-resource basis

Access-Control-Allow-Credentials: true

Access-Control-Allow-Origin: someorigin.com
CORS Client Example
var xhr = new XMLHttpRequest();
xhr.open(method, xDomainUrl, true);
xhr.withCredentials = true;

xhr.onload = function() {
       var responseText = xhr.responseText;
       validatedResponse = validate(responseText); };

xhr.onerror = function() {
      console.log('There was an error!'); };

xhr.send();
The difference:


Script src gives you code you
have no choice but to TRUST

CORS gives you data you can
VERIFY
What about the * in CORS?
    * cannot be used for a resource that supports
                    credentials.

* in Access-Control-Allow-Origin gives other origins
only the same view they already have from their own
server.

            Access-Control-Allow-Origin: *
    is actually one of the safest ways to use CORS!
What if you need data from somebody
 who doesn’t publish a CORS API?
sandboxed iframes

 23   5.1   4.2     15        2.1   10   7



and


postMessage

 23   5.1   4.2   16     12.1 2.1   8    7
trusted.mydomain.com/foo.html


<iframe sandbox=“allow-scripts”
src=“integration.mydomain.com/wrapLogin.html
     ”>
</iframe>
                By using a different domain name,
                many benefits of the sandbox can
                be achieved, even in browsers that
                         don’t support it.
integration.mydomain.com/wrapLogin.html

 <html>
 <script src=“foreigndomain.com/login.js”>
 </script>
 <script>
 window.parent.postMessage(loginName,
                  “trusted.mydomain.com”);
 </script>
 </html>
trusted.mydomain.com/foo.html

<iframe sandbox=“allow-scripts”
src=“untrusted.mydomain.com/untrusted.html”>
</iframe>
<script>
window.addEventListener("message", receiveMessage, false);
receiveMessage = function(event) {
  if(event.origin == “untrusted.mydomain.com”) {
  var data = sanitizeData(event.data);
}
<script>
But wait, there’s more!

What if you do this to your own code?
http://www.cs.berkeley.edu/~devdatta
      /papers/LeastPrivileges.pdf
Hackers HATE Him!!!!




Reduce your Trusted Computing
Base by 95% with this one simple
         HTML5 trick!!!
Summary: HTML5
HTML5 and the Open Web Platform are
improving the security of the Web ecosystem.

Rich Web Apps are not new, and HTML5 offers
big security improvements compared to the
proprietary plugin technologies it’s actually
replacing.
Summary: Script Injection
• Script Injection, aka XSS, can be a solved
  problem with proper application architecture
  and new client-side technologies.

• Avoid incomplete server-side simulation, solve
  it directly in the client environment:
  – Content Security Policy
  – HTML Templates
Summary: Mashups
• Use CORS to get (and validate) data, not code
• Use iframes and postMessage to isolate legacy
  mashup APIs

• Treat your own code like a mashup: Use the
  Same-Origin Policy as a powerful privilege
  separation technique for secure application
  architecture in HTML5

https://github.com/devd/html5privsep
Ongoing work in WebAppSec WG:
• Content Security Policy 1.1
• User Interface Security to Kill Clickjacking
• Sub-Resource Integrity

• More important work underway in the Web
  Cryptography WG
public-webappsec-request@w3.org


Thank you! Questions?


             Brad Hill, PayPal
          bhill@paypal-inc.com @hillbrad

        W3Conf: Practical standards for web professionals
        21 -22 February 2013
        San Francisco

More Related Content

What's hot (20)

PPTX
Building Secure User Interfaces With JWTs
robertjd
 
PDF
Stateless authentication for microservices - GR8Conf 2015
Alvaro Sanchez-Mariscal
 
PDF
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
CODE BLUE
 
PPTX
Case Study of Django: Web Frameworks that are Secure by Default
Mohammed ALDOUB
 
PPTX
Web Application Security in front end
Erlend Oftedal
 
PPTX
Top 10 Web Hacks 2012
Matt Johansen
 
PDF
Security and Privacy on the Web in 2015
Francois Marier
 
PDF
Web Security - CSP & Web Cryptography
Samsung Open Source Group
 
PPTX
MITM Attacks on HTTPS: Another Perspective
GreenD0g
 
PPTX
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Stormpath
 
PDF
Securing your AngularJS Application
Philippe De Ryck
 
PPTX
Spring Security 3
Jason Ferguson
 
PDF
Super simple application security with Apache Shiro
Marakana Inc.
 
PDF
New Methods in Automated XSS Detection & Dynamic Exploit Creation
Ken Belva
 
PPTX
Cross Site Scripting (XSS)
OWASP Khartoum
 
PPTX
Token Authentication for Java Applications
Stormpath
 
PPTX
[CB16] Esoteric Web Application Vulnerabilities by Andrés Riancho
CODE BLUE
 
PPTX
Single-Page-Application & REST security
Igor Bossenko
 
PDF
What the Heck is OAuth and OpenID Connect - RWX 2017
Matt Raible
 
PDF
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
Abraham Aranguren
 
Building Secure User Interfaces With JWTs
robertjd
 
Stateless authentication for microservices - GR8Conf 2015
Alvaro Sanchez-Mariscal
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
CODE BLUE
 
Case Study of Django: Web Frameworks that are Secure by Default
Mohammed ALDOUB
 
Web Application Security in front end
Erlend Oftedal
 
Top 10 Web Hacks 2012
Matt Johansen
 
Security and Privacy on the Web in 2015
Francois Marier
 
Web Security - CSP & Web Cryptography
Samsung Open Source Group
 
MITM Attacks on HTTPS: Another Perspective
GreenD0g
 
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Stormpath
 
Securing your AngularJS Application
Philippe De Ryck
 
Spring Security 3
Jason Ferguson
 
Super simple application security with Apache Shiro
Marakana Inc.
 
New Methods in Automated XSS Detection & Dynamic Exploit Creation
Ken Belva
 
Cross Site Scripting (XSS)
OWASP Khartoum
 
Token Authentication for Java Applications
Stormpath
 
[CB16] Esoteric Web Application Vulnerabilities by Andrés Riancho
CODE BLUE
 
Single-Page-Application & REST security
Igor Bossenko
 
What the Heck is OAuth and OpenID Connect - RWX 2017
Matt Raible
 
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
Abraham Aranguren
 

Viewers also liked (20)

PDF
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
Andrei Zmievski
 
PDF
User eXperience & Front End Development
andreafallaswork
 
PPTX
Front end Tips Tricks & Tools
Sandeep Ramgolam
 
PDF
Front End Tooling and Performance - Codeaholics HK 2015
Holger Bartel
 
PDF
Sinau Bareng Frontend Web Development @ DiLo Malang
Moch. Zamroni
 
PDF
Frontend automation and stability
Máté Nádasdi
 
PDF
Frontend SPOF
Patrick Meenan
 
PDF
Webinar: Front End Web Development - Trendy Web Designs Using HTML5
Edureka!
 
PDF
Architecting your Frontend
Ruben Teijeiro
 
PDF
建立前端开发团队 (Front-end Development Environment)
Joseph Chiang
 
PDF
Grunt js for the Enterprise Vol.1: Frontend Performance with Phantomas
David Amend
 
PDF
Wrangling Large Scale Frontend Web Applications
Ryan Roemer
 
PDF
A modern front end development workflow for Magnolia at Atlassian
Magnolia
 
PDF
How to Build Front-End Web Apps that Scale - FutureJS
Phil Leggetter
 
PPTX
Frontend technologies
Jose Ramon Roblero Ruiz
 
PPTX
Modern Frontend Technology
Ship Hsu
 
PDF
Frontend at Scale - The Tumblr Story
Chris Miller
 
PDF
Front End Development Workflow Tools
Ahmed Elmehri
 
PDF
TechTalk #85 : Latest Frontend Technologies
bincangteknologi
 
PDF
The Frontend Developer Landscape Explained and the Rise of Advanced Frontend ...
Prasid Pathak
 
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
Andrei Zmievski
 
User eXperience & Front End Development
andreafallaswork
 
Front end Tips Tricks & Tools
Sandeep Ramgolam
 
Front End Tooling and Performance - Codeaholics HK 2015
Holger Bartel
 
Sinau Bareng Frontend Web Development @ DiLo Malang
Moch. Zamroni
 
Frontend automation and stability
Máté Nádasdi
 
Frontend SPOF
Patrick Meenan
 
Webinar: Front End Web Development - Trendy Web Designs Using HTML5
Edureka!
 
Architecting your Frontend
Ruben Teijeiro
 
建立前端开发团队 (Front-end Development Environment)
Joseph Chiang
 
Grunt js for the Enterprise Vol.1: Frontend Performance with Phantomas
David Amend
 
Wrangling Large Scale Frontend Web Applications
Ryan Roemer
 
A modern front end development workflow for Magnolia at Atlassian
Magnolia
 
How to Build Front-End Web Apps that Scale - FutureJS
Phil Leggetter
 
Frontend technologies
Jose Ramon Roblero Ruiz
 
Modern Frontend Technology
Ship Hsu
 
Frontend at Scale - The Tumblr Story
Chris Miller
 
Front End Development Workflow Tools
Ahmed Elmehri
 
TechTalk #85 : Latest Frontend Technologies
bincangteknologi
 
The Frontend Developer Landscape Explained and the Rise of Advanced Frontend ...
Prasid Pathak
 
Ad

Similar to W3 conf hill-html5-security-realities (20)

PPTX
W3 conf hill-html5-security-realities
Brad Hill
 
PPTX
Lec4-WebClientSideExploitation.pptxdslkjhgfkjdshgfkjfhdkjg
arfaouisalim
 
PPTX
Html5 security
Krishna T
 
KEY
Application Security for Rich Internet Applicationss (Jfokus 2012)
johnwilander
 
PPTX
HTML5 - The Promise & The Peril
Security Innovation
 
PPT
Same Origin Policy Weaknesses
kuza55
 
PPTX
Warning Ahead: SecurityStorms are Brewing in Your JavaScript
Cyber Security Alliance
 
PDF
Securing the client side web
SC5.io
 
PPTX
Secure web messaging in HTML5
Krishna T
 
PDF
Krzysztof Kotowicz - Hacking HTML5
DefconRussia
 
PDF
Going Beyond Cross Domain Boundaries (jQuery Bulgaria)
Ivo Andreev
 
PDF
Locking the Throne Room - How ES5+ might change views on XSS and Client Side ...
Mario Heiderich
 
PDF
Evolving web security model v1.1 - Portland OWASP May 29 2014
imelven
 
PDF
Chapter 13 web security
newbie2019
 
PDF
Locking the Throneroom 2.0
Mario Heiderich
 
PDF
Securing your web application through HTTP headers
Andre N. Klingsheim
 
PDF
ruxc0n 2012
mimeframe
 
PDF
Hacking HTML5 offensive course (Zeronights edition)
Krzysztof Kotowicz
 
PPTX
JSFoo Chennai 2012
Krishna T
 
PPTX
Web security: Securing untrusted web content at browsers
Phú Phùng
 
W3 conf hill-html5-security-realities
Brad Hill
 
Lec4-WebClientSideExploitation.pptxdslkjhgfkjdshgfkjfhdkjg
arfaouisalim
 
Html5 security
Krishna T
 
Application Security for Rich Internet Applicationss (Jfokus 2012)
johnwilander
 
HTML5 - The Promise & The Peril
Security Innovation
 
Same Origin Policy Weaknesses
kuza55
 
Warning Ahead: SecurityStorms are Brewing in Your JavaScript
Cyber Security Alliance
 
Securing the client side web
SC5.io
 
Secure web messaging in HTML5
Krishna T
 
Krzysztof Kotowicz - Hacking HTML5
DefconRussia
 
Going Beyond Cross Domain Boundaries (jQuery Bulgaria)
Ivo Andreev
 
Locking the Throne Room - How ES5+ might change views on XSS and Client Side ...
Mario Heiderich
 
Evolving web security model v1.1 - Portland OWASP May 29 2014
imelven
 
Chapter 13 web security
newbie2019
 
Locking the Throneroom 2.0
Mario Heiderich
 
Securing your web application through HTTP headers
Andre N. Klingsheim
 
ruxc0n 2012
mimeframe
 
Hacking HTML5 offensive course (Zeronights edition)
Krzysztof Kotowicz
 
JSFoo Chennai 2012
Krishna T
 
Web security: Securing untrusted web content at browsers
Phú Phùng
 
Ad

Recently uploaded (20)

PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
PPTX
Smart Factory Monitoring IIoT in Machine and Production Operations.pptx
Rejig Digital
 
PPTX
Practical Applications of AI in Local Government
OnBoard
 
PDF
“A Re-imagination of Embedded Vision System Design,” a Presentation from Imag...
Edge AI and Vision Alliance
 
PDF
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
PDF
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
PDF
Hello I'm "AI" Your New _________________
Dr. Tathagat Varma
 
PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PPTX
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
PDF
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
PPTX
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
PDF
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 
PDF
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
PDF
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
PDF
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 
PPTX
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
PPTX
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
PPTX
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
Kubernetes - Architecture & Components.pdf
geethak285
 
Smart Factory Monitoring IIoT in Machine and Production Operations.pptx
Rejig Digital
 
Practical Applications of AI in Local Government
OnBoard
 
“A Re-imagination of Embedded Vision System Design,” a Presentation from Imag...
Edge AI and Vision Alliance
 
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
Hello I'm "AI" Your New _________________
Dr. Tathagat Varma
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 

W3 conf hill-html5-security-realities

  • 1. HTML5 Security Realities Brad Hill, PayPal [email protected] @hillbrad W3Conf: Practical standards for web professionals 21 -22 February 2013 San Francisco
  • 2. “The reason that the Web browser is the principal entry point for malware is the number of choices that a browser offers up to whomever is at the other end. Evolving technologies like HTML5 promise to make this significantly worse.” – Dan Geer
  • 3. In the next 30 minutes: • Show you real code using new standards to: – Solve Script Injection Vulnerabilities – Build Secure Mashups • HTML5 is a big step forward in security for the Web platform
  • 5. Script Injection, also known as Cross-Site Scripting or XSS, is the most common Web Application vulnerability. In 2007, WhiteHat estimated that 90% of sites were vulnerable.
  • 6. XSS in a nutshell: If somebody else’s code gets to run in your WebApp, it’s not your WebApp anymore. + Same-Origin Policy = XSS anywhere on your domain is XSS everywhere on your domain.
  • 7. Current defenses: • Input filtering – Strip dangerous characters and tags from user data • Output encoding – Encode user data so it isn’t treated as markup “HTML5 broke my XSS filter!”
  • 8. YES. html5sec.org lists a dozen new XSS vectors in new tags and attributes in HTML5. But your filter was already broken.
  • 12. XSS Filters Were Doomed Filters are a server-side attempt to simulate the client-side parser and execution environment. But… • Every browser parser operated differently • The algorithms were secret • Every browser had proprietary features, tags and syntax • Accepting bad markup was a feature
  • 14. Generously coercing a shambling mound of line noise into an application is no longer a competitive feature.
  • 15. By standardizing the technology for building Rich Web Applications, HTML5 began a fundamental shift in the security posture of the Web as a platform.
  • 17. Proprietary platforms compete for developers by offering features. Open platform implementers compete for users by offering quality.
  • 18. And now, BACK TO SOLVING SCRIPT INJECTION
  • 19. New and Better Anti-XSS Approaches Even if we now have some hope of simulating the browser parser for HTML5… Not easy, definitely not future-proof. Misses client-only data flows. Why not get help from the client?
  • 20. Content Security Policy 25 6.0 6.0 6.0 10 X-Content-Security-Policy X-WebKit-CSP (sandbox only) HTTP header to enforce, in the client, a least- privilege environment for script and other content.
  • 22. Content-Security-Policy: default-src 'self'; object-src 'none'; img-src https://uploads.example-board.net https://cdn.example-board.com data:; script-src https://code.example-board.net https://www.google-analytics.com; frame-src *.youtube.com; report-uri https://www.example- board.net/cspViolations.xyz
  • 23. Content Security Policy 1.0 default-src Everything script-src Scripts object-src Plugins style-src CSS img-src Images media-src Audio + Video frame-src Frame content font-src Fonts connect-src Script-loaded content (e.g. XHR) sandbox Same as HTML5 iframe sandbox reporturi Violation reporting
  • 24. The catch… • CSP enforces code / data separation • This means: NO inline script or css NO eval, even in libraries (can be disabled, but sacrifices many of the benefits of CSP)
  • 25. <script> function doSomething ()… </script> <button onClick="doSomething()"> Click Here!</button>
  • 26. <!--myPageScript.js--> function doSomething ()… Document.addEventListener(‘DOMContentLoader', function() { for var b in document.querySelectorAll('.clickme‘)) e.addEventListener('click', doSomething); }); <!--myPageContent.html--> <script src="myPageScript.js"></script> <button class="clickme">Click Here!</button>
  • 27. Coming soon in CSP 1.1 • Whitelisting of inline scripts and CSS • More granular origins • Better control of plugins and media types • Control and reporting for reflected XSS filters • META tag support https://dvcs.w3.org/hg/content-security- policy/raw-file/tip/csp-specification.dev.html
  • 28. Templating Templating is one of the oldest and most widely used Web application construction patterns. But it is a hive of XSS villainy because it has never been a first-class feature in the client.
  • 29. HTML Templates New spec in progress in the WebApps WG: https://dvcs.w3.org/hg/webcomponents/raw- file/tip/spec/templates/index.html Declare templates as first-class client-side objects for increased performance, reduced XSS risk.
  • 30. With CSP and a careful application architecture XSS can be solved today. In the near future it will be possible using more familiar and better performing idioms.
  • 31. Secure Mashups “HTML5 and CORS give new ways to bypass the Same-Origin Policy!”
  • 32. A “mashup” incorporates content from multiple origins under different administrative control. Today, more apps than not are authenticated mashups: ads, analytics, federated login How did we do this before HTML5?
  • 33. Flash, with crossdomain.xml <?xml version="1.0"?> <!--https://www.foo.com/crossdomain.xml-- > <cross-domain-policy> <allow-access-from domain=“www.example-analytics.com"/> </cross-domain-policy>
  • 34. Jan’s Rule: “Give someone an ACL, and they’ll put in a *.”
  • 35. A “*” in your master crossdomain.xml policy means your users’ information is vulnerable to any malicious SWF, anywhere on the Web
  • 36. I can’t use Flash on iOS anyway… What about HTML-only methods?
  • 37. <script src=“foreignOrigin"> Same-Origin Loophole Browser example-2.com Origin=example.com <script src= https://example-2.com/x.js> (function( window, undefined ) {… example.com
  • 38. AKA – “JSONP” • “JSON with padding” <script src=“example.com/jsonp?callback=foo”> • Returns JSON data “padded” with a call to the function you specified. • You hope…it’s still script!
  • 39. This pattern injects somebody else’s code into your application. Remember what the definition of XSS was?
  • 43. We can build it better. We have the technology.
  • 44. Cross-Origin Resource Sharing (CORS) 22 5.1 3.2 15 15 2.1 10 7 Voluntarily relax the Same-Origin Policy with an HTTP header to allow permissioned sharing on a resource-by-resource basis Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: someorigin.com
  • 45. CORS Client Example var xhr = new XMLHttpRequest(); xhr.open(method, xDomainUrl, true); xhr.withCredentials = true; xhr.onload = function() { var responseText = xhr.responseText; validatedResponse = validate(responseText); }; xhr.onerror = function() { console.log('There was an error!'); }; xhr.send();
  • 46. The difference: Script src gives you code you have no choice but to TRUST CORS gives you data you can VERIFY
  • 47. What about the * in CORS? * cannot be used for a resource that supports credentials. * in Access-Control-Allow-Origin gives other origins only the same view they already have from their own server. Access-Control-Allow-Origin: * is actually one of the safest ways to use CORS!
  • 48. What if you need data from somebody who doesn’t publish a CORS API?
  • 49. sandboxed iframes 23 5.1 4.2 15 2.1 10 7 and postMessage 23 5.1 4.2 16 12.1 2.1 8 7
  • 50. trusted.mydomain.com/foo.html <iframe sandbox=“allow-scripts” src=“integration.mydomain.com/wrapLogin.html ”> </iframe> By using a different domain name, many benefits of the sandbox can be achieved, even in browsers that don’t support it.
  • 51. integration.mydomain.com/wrapLogin.html <html> <script src=“foreigndomain.com/login.js”> </script> <script> window.parent.postMessage(loginName, “trusted.mydomain.com”); </script> </html>
  • 52. trusted.mydomain.com/foo.html <iframe sandbox=“allow-scripts” src=“untrusted.mydomain.com/untrusted.html”> </iframe> <script> window.addEventListener("message", receiveMessage, false); receiveMessage = function(event) { if(event.origin == “untrusted.mydomain.com”) { var data = sanitizeData(event.data); } <script>
  • 53. But wait, there’s more! What if you do this to your own code?
  • 55. Hackers HATE Him!!!! Reduce your Trusted Computing Base by 95% with this one simple HTML5 trick!!!
  • 56. Summary: HTML5 HTML5 and the Open Web Platform are improving the security of the Web ecosystem. Rich Web Apps are not new, and HTML5 offers big security improvements compared to the proprietary plugin technologies it’s actually replacing.
  • 57. Summary: Script Injection • Script Injection, aka XSS, can be a solved problem with proper application architecture and new client-side technologies. • Avoid incomplete server-side simulation, solve it directly in the client environment: – Content Security Policy – HTML Templates
  • 58. Summary: Mashups • Use CORS to get (and validate) data, not code • Use iframes and postMessage to isolate legacy mashup APIs • Treat your own code like a mashup: Use the Same-Origin Policy as a powerful privilege separation technique for secure application architecture in HTML5 https://github.com/devd/html5privsep
  • 59. Ongoing work in WebAppSec WG: • Content Security Policy 1.1 • User Interface Security to Kill Clickjacking • Sub-Resource Integrity • More important work underway in the Web Cryptography WG
  • 60. [email protected] Thank you! Questions? Brad Hill, PayPal [email protected] @hillbrad W3Conf: Practical standards for web professionals 21 -22 February 2013 San Francisco

Editor's Notes

  • #2: First, let me apologize that my slides aren’t very pretty – it’s tough to share a stage with so many of the most talented front-end engineers in the world and be the security person. But to that point, we’ve seen a ton of really amazing stuff here so far, yesterday, this morning, and with more to come. I think it’s safe to say that all the developers in the room are really excited about the possibilities of HTML5 and the Open Web Platform. But there is one group of people that isn’t so excited about all of this: the security community.
  • #3: Almost since HTML5 was born, you can’t go to a security conference or read the security tech press without finding HTML5 at the top of almost every list of threats. It’s framed it as part of an out-of-control spiral of complexity on the web that’s going to leave everyone vulnerable to more malware, more application-level compromises and more enterprise risk. Now, security people are grumpy by nature. We are constantly warning people of dangers ahead, and we’re making a better living than ever because nobody ever listens. So, when it comes to HTML5, should you listen? Well, I’m here to say that no, in this case you shouldn’t. I’ve been working on Web technologies and in security since 1994, and despite hearing about Lulzsec or Chinese hackers on the news every week, the security state of the Web today is better than it has ever been. In particular, we’ve made very large advancements in the last few years, largely due to the rapid advancement of HTML5 and the Open Web Platform, and I think the next few years are going to continue that positive trajectory.
  • #4: At the last W3Conf I gave a talk with Scott Stender of iSEC Partners where we talked at a high level about some the ways HTML5 is changing security for modern web apps and what to be aware of. This time I want to show some real code on how to use new standards to tackle two of the biggest problems in Web security: solving Script Injection, and building secure mashups.Along the way, I hope I’ll convince you, and maybe, if some security people are watching, them, that HTML5 is a big step forward in security for the Web platform.
  • #5: So, not to lack ambition, let’s tackle the biggest security problem on the Web first: Script Injection, also known as Cross-Site Scripting or XSS.
  • #6: This is the most common vulnerability on the Web – some studies have estimated its prevalence at 90%, and I believe that. One of the things HTML, of any version, is not good at is separating data and code, so any dynamic application tends to have script injection issues unless you’ve specifically architected your app to avoid them.
  • #7: I hope that most everyone who’s a web developer today already has some idea of what XSS is, but in a nutshell:If somebody else gets to run code in your WebApp, it’s not your WebApp anymore. And the Same-Origin Policy for JavaScript means that if there is an XSS vulnerability anywhere on your domain, everything on your domain is vulnerable. The attackers can take advantage of a single weakness to run amok in the browser, impersonate your users, and do anything they can do.
  • #8: Script Injection has been a known problem since 2001, and we’ve come up with some server-side best defensive practices to prevent it: Input filtering, where we attempt to strip dangerous characters or tags from user input before we use it in markup, and Output encoding where we attempt to encode user data so that it isn’t treated as markup by the browser.And one of the oldest security complaints about HTML5 is that it is going to break many existing XSS filters. If you have a blacklist filter that tries to strip specific tags and event handler attributes, HTML5 introduces a large number of new tags and features that won’t match your old rules.
  • #9: And, yes, this is true, and introducing new security risks into existing legacy systems is something we try really hard to avoid as we build new standards. But you know what? Every single blacklist filter for HTML4 is already broken. How can I be so confident? Because things like this:
  • #10: And this:
  • #11: Get interpreted as valid script in HTML4 in some browsers and can be used to mount attacks! Does your filter block those? How many browsers did you test it in?
  • #12: Those examples are from a book called Web Application Obfuscation by Gareth Heyes, Mario Heidrich, Eduardo Vela Nava and David Lindsay. An ENTIRE 280 PAGE BOOK full of stuff like that. Those examples I showed you are only the shore of a Lovecraftian continent of horror.
  • #13: How could they fill 280 pages with this stuff, and why are all of our XSS filters broken? They work in very limited contexts, but in a broader sense, they were doomed from the start, because an XSS filter is a server-side attempt to simulate the client-side parsing and execution environment, but before HTML5, every browser did this differently, how they did it was a secret, browsers were chock-full of proprietary features, tags and syntax, and accepting bad markup was actually considered a feature, in the tradition of Postel’s Law.
  • #14: This is all to say that the security improvements of HTML5 start at the very foundations, because HTML5t’s the first version of HTML to specify a normative state machine for parsing, including handling error conditions. Yes, there are new tags and new syntax, but if you want to know how browsers are going to parse markup, for the first time you can find out, and you can have some reasonable confidence that different browsers are going to act in a mostly consistent manner.
  • #15: The result of standardizing parsing is that generously coercing shambling mounds of random line noise into an application is no longer a competitive feature! And this is an insight and an outcome that doesn’t just apply to parsing –
  • #16: By standardizing the technology for building Rich Web Applications, HTML5 began a fundamental shift in the security posture of the Web as a platform.One of the biggest false charges leveled against HTML5 is that it’s insecure because it’s “more complex than HTML4.” But that’s not the right comparison to make. HTML4 was never by itself the platform of the Web. The Rich Web Application has been with us for a decade, but it was built in terms of plugins – in Java, Flash and ActiveX.
  • #17: If you’re the creator of one of these proprietary rich web app platform whether browser or plugin, you need to attract developers, so you live or die by how much you let developers do, not by how many security restrictions you put on them. You compete for developers and once you have them they’re locked in. If you’re not happy with Java’s security record, you have to re-write your whole application to switch. If you’re a user, you can’t switch – you have to take it or leave it. On the contrary, if I was using an HTML5 app and my browser had a security record like Java, I could switch in a second, and the app developers wouldn’t have to change anything.
  • #18: So the incentives of the Open Web Platform are different than they’ve been: Proprietary platforms compete for developers by offering features, and they can keep them because switching costs are high. On an open platform, switching costs are low, so implementers have to compete for users by offering them quality, which includes security.
  • #19: But enough soap box ranting – we were talking about solving script injection.
  • #20: And even though we finally have some hope of an accurate simulation of the browser in HTML5, that’s still not a great strategy. It’s complex, it’s not future-proof, and it misses what’s called DOM XSS, vulnerabilities through data flows that can’t be filtered at the server because the server never sees them.If script injection is a security issue at the client layer, why not solve it in the client?
  • #22: Maybe you remember the scene in the Odyssey where they’re about to sail past the Sirens. Odysseus knows that he’ll go mad from the siren’s song, so he orders his crew to tie him to the mast and, whatever he says later, not to untie him.That’s kind of what CSP does. It lets an app tell the browser to tie it to the mast.
  • #23: This is an example of a CSP header, and you can see it’s pretty straightforward. We just list the origins that are allowed to load content.The difficult part here is that to get the full benefit, you can’t use inline script or css, and that’s pretty problematic for existing apps.
  • #24: We can …And CSP has a reporting feature, which makes deployment much easier, because you can measure what’s going to happen and build correct policies before you start enforcing them.
  • #28: So in CSP 1.1, we are working to fix this, by allowing whitelisting of inline scripts and css, along with other features like controlling the types of plugins that can run, and adding reporting to existing browser anti-XSS filters. So this is a great start on preventing XSS attacks that you can start using today, but there’s one other up and coming technology I want to touch on – and that’s HTML templates.
  • #30: So HTML templates are a new spec under development in the WebApps Working Group that allow you to declare templates as first-class client-side objects. Instead of dynamically building markup using strings concatenation and innerHTML, we’ll have a pattern that has the potential to be both faster and offer much better security against script injection.
  • #31: What this boils down to is that:
  • #32: OK, so we’ve solved XSS, which is a pretty good day’s work– but I also promised I’d show you how to build secure mashups in HTML5 – another thing that security folks like to say can’t be done.
  • #33: So what’s a mashup? It’s when you include content from multiple sites in a single app. And I think we’re all familiar with anonymous mashups, like putting Craigslist apartment listings onto a Google map, but what a lot people probably don’t think about is that almost every major app today is part mashup – and moreover, they’re authenticated mashups. With features like advertising, analytics and federated login, we’re sharing authenticated user data across origins at most places we visit on the Web.
  • #34: So Flash allows us to do this, using a policy file called crossdomain.xml, which defines ACLs for foreign SWFs. This policy file lets SWFs loaded from www.example-analytics.com to make requests, with cookies, and read the results, from www.foo.com.
  • #35: But we security folks are kind of cynical, we’ve seen it all. And my friend Jan recently quippped: Give someone an ACL and they’ll put in a *.So what happens if you put a * in crossdomain.xml?
  • #36: Oops.. If you put * in your master policy file, you just allowed any malicious SWF anywhere on the Internet to access all your user’s information. Game over. So that’s not great…
  • #38: And the answer is that, since the beginning of the Same-Origin Policy, there’s always been a loophole. If I load content, and it sources script from another domain, that script becomes part of my application, effectively allowing us to read that information across domains and use this as a communication channel.
  • #40: But still, everyone thinks this is OK. We security people warn that this is dangerous, but nobody thinks anything bad is going to happen, they trust the people they’re getting this script from.Until two weeks ago…
  • #41: When Facebook broke the Internet. Did anyone see this? If you went to any of thousands of sites on the web, instead of seeing that site, you got a Facebook error page instead. Do you want to see the one line of code the broke the Internet?
  • #42: Well, this is the mashup pattern for Facebook Connect. So one bug here, and your application is at its mercy. But still, this was just a bug, it wasn’t an attack.
  • #43: Hmm… This is what Facebook had to say, just a week after the connect fiasco. Now these aren’t related and I’m sure that Facebook has really good security measures in place to make sure that a compromise of a developer workstation doesn’t propagate out to impact code on the live site, but it should give you pause.The more we use insecure patterns like script src to connect the web, the more fragile we make it, and the more we make an individual API \\a single point of failure for the security of huge parts of the web, the harder the bad guys are going to try to exploit it.
  • #47: Script src gives you code that you have to trust, but CORS gives you data that you can validate.
  • #48: And it doesn’t introduce any new Cross-Site Request Forgery attack surface.
  • #53: And so, in just a few lines of code, we’ve locked our legacy mashup into a strong sandbox, and only let it pass notes. If it breaks or gets hacked, it can’t reach out and affect rest of our application.
  • #54: But there’s more to this than I first realized….I mentioned this pattern for safe mashups at the last W3Conf in 2011, and I’m sure I’m wasn’t the first to have done so, but I didn’t realize how important it was until I saw a talk by Devdatta Akhwe at last year’s USENIX Security.In one of those brilliant insights that seems obvious once you’ve heard it, Devdatta realized that this wasn’t just a useful trick for legacy mashups – that it is actually a fundamental building block allowing privilege separation in HTML5 applications.
  • #55: What he said was basically, what if I treat my own code, and the libraries I host on my own domain, as being just as potentially dangerous as that foreign mashup? After all, if I’m building a complex app with tens of thousands of lines of JavaScript code, surely there are some latent bugs in there.And actually, the vast majority of that code doesn’t even need to do sensitive things like access the user’s cookie or perform transactions. We can apply the same architectural principles of privilege separation we use for architecting browsers or operating systems to our HTML5 applications using this iframe plus postMessage pattern.
  • #56: And he found that, for real-world applications using off-the-shelf libraries, by changing just a few lines of code, it was possible to reduce the trusted computing base of these applications by 95%, isolating all of those latent bugs into strong, browser-provided, same-origin sandboxes. So go check out this paper. If people pay attention to it, I think it has the potential to be one of the most important computer security papers of the decade and hugely reshape the risk profile of client-side WebApps.
  • #57: I could go on about many more features, but I think that’s a pretty good start. I hope I’ve convinced you that HTML5 and the Open Web Platform are improving the security of the Web ecosystem. Rich Web Apps aren’t new, and HTML5 offers big security improvements compared to the proprietary plugin technologies it’s actually replacing.