Download presentation
Presentation is loading. Please wait.
Published byBrianne Hodgens Modified over 10 years ago
1
Context-Sensitive Auto-Sanitization In Web Templating Languages Using Type Qualifiers Prateek Saxena UC Berkeley Mike Samuel Google Dawn Song UC Berkeley 1
2
Script Injection Vulnerabilities OWASP Top Ten Vulnerabilities – 2 nd in 2010 & 2011 Today Affects – Major Web Services – Client-side Libraries – Browser Extensions – Devices & Smartphones 2
3
Predominant Defense Practice Why Does it Fail? – Developers forget to Sanitize [ Pixy06, PhpTaint06,Cqual04, Merlin09,Securifly05, PhpAspis11 ] – Pick the wrong sanitizer [ CCS11 ] 3 String Div.Render () { print( ); print(userimg); print( ); } String Div.Render () { print( ); print(Sanitize(userimg)); print( ); } Sanitizer Library Sanitizer Library
4
Vision Eliminate Scripting Attacks – Make Applications Secure by Construction Developer Code Developer Code Application Code Application Code 4
5
Contributions A New "Push-Button" Defense Primitive – "Security By Construction" Approach Context-Sensitive Auto-Sanitization (CSAS) – New Challenge: Which Sanitizers To Place Where? – Targets Existing Web Templating Frameworks It is Practical Deployed Commercially – Google Closure Templates powers Google+ 5 FastAuditableCompatibleSecure
6
var o = new soy.StringBuilder(); imgRender({O: o, imglink: $_GET(extlink), name: [$_GET(name)] })); document.write(o); Web Templating Frameworks Templating Framework Compiler Java JS Application calls Target Language Code Template Application Code template imgRender($imgLink, $name) { print (<img src=\); print ($imglink); print \/>. $name. ; return; } Template Code Template Language does not have complex constructs 6 Explicitly Separates Untrusted Inputs
7
Talk Outline System Architecture & Features Challenges The CSAS Engine Design Implementation Evaluation & Deployment 7
8
CSAS System Architecture Compiler Java JS Application calls Instrumented Auto-Sanitization Template Sanitizer Library Sanitizer Library Static Error 8
9
CSAS Auditability & Compatibility Compiler Java JS Instrumented Auto- Sanitization Sanitizer Library Sanitizer Library Static Error Easily Auditable Compatibility – No Developer Involvement – Minimize Static Errors Security Performance 9
10
HtmlSanitizer URLSanitizer template ImgRender($imgLink, $name) {……………} Security & Correctness (I) Property C SAN: Context-Sensitive Sanitization <img src="/img?f="/> $name$imgLink$name HTML Tag Context URI START Context URI PATH Context URI QUERY Parameter Context HTML Tag Context Attacks Vary By Contexts! 10
11
Security & Correctness (II) Property N OS: No Over Sanitization <img src="//img?f="/> $name$imgLink$name Sanitize Only Untrusted Data Not Constant Strings 11
12
Security Assumptions Canonical HTML Parser – Flexible to recognize browser differences [GWT, CTemplates] Correct Sanitizers – Extensive Community Effort [OWASP, HtmlPurify, GWT, Django] – Research on Secure Sanitization Primitives [Bek11, Hampi09,Min06] – Already Used in Many Frameworks
13
Challenges Easily Auditable Compatibility Security Performance Security PerformanceCompatibility 13
14
Approach #1: Context-Insensitive Sanitization template ImgRender($imgLink, $name) { print (<img src=); x := $imgLink; print ($x); print />. $name. ; return; } template ImgRender($imgLink, $name) { print (<img src=); x := HtmlEncode($imgLink); print ($x); print />. HtmlEncode($name ). ; return; } javascript: bad(); Security PerformanceCompatibility False Sense of Security! 14
15
Approach #2: Context-Sensitive Runtime Parsing (CSRP) URI START Context URI Param Context template ImgRender($imgLink, $name) {……………} <img src="/img?f= $name$imgLink URLSanitizer URLParamSanitizer Security PerformanceCompatibility 15
16
Rich Language Features <img src='//img?f='/> $name$imgLink$name 16 template ImgRender($imgLink, $name) { print (<img src='); x := /. $name. /img?f=. $imgLink; print ($x); print '/>. $name. ; return; }
17
template ImgRender($imgLink, $name) { print (<img src='); if ($name != ) then x := /. $name. /img?f=. $imgLink; else x:= $imgLink; fi print ($x); print '/>. $name. ; return; } Rich Language Features: Control Flow <img src='//img?f='/> $name$imgLink$name Usage Contexts Statically Ambiguous: Sanitization Requirements vary by path! 17
18
Our Approach Type Inference Well-Typed IR Untyped Template Compilation Compiled Code 18 CSAS Engine – Context Type Qualifiers
19
Context Type Qualifiers Context Type Qualifier: – "Which contexts is a string safe to be rendered in" x:=<img src='. $imgLink; <img src=' $imgLink y:= UrlAttribSsanitize($imgLink) x:=<img src='. y; TERMSTYPES 19 Type Inference: Where To Place Sanitizers?
20
Ensuring Compatibility: Key Ideas Flow-sensitive Type Qualifiers 20 template StatAmb($imgLink, $name) { if ($name == ) then print (<img src=\); else print ( ); fi print ($imgLink); } DYN STATIC CSRP Approach (1%) Statically Sanitized (99%)
21
Implementation & Evaluation Google Closure Templates – Powers several Google products – 3045 LOC Java Evaluation Benchmarks: – 1035 templates from production Google code – Rich Features 2997 calls 1224 print/sink statements using 600 untrusted input variables 21
22
Evaluation: Compatibility All 1035 templates auto-sanitized! – No Developer Involvement – No Static Errors Compared to original sanitization – 21 cases differ out of 1224 – CSAS engine inferred a more accurate sanitizer 22
23
Evaluation: Security Context-Insensitive Approach Fails on 28% prints 23 UNSAFE
24
Java JavaScript Evaluation: Performance Overhead CICSRPCSAS Chrome 93.0%78.8%3.0% FF 3.69.6%425%9.6% Safari 52.5%189%3.1% CICSRPCSAS Java0%72%0% 24 Order Of Magnitude Faster Than CSRP Benchmarks – Templates Only, No Other Application Logic Base: No Sanitization Practical Performance: Upto 9.6%
25
Conclusion 25 CSAS: A New "Push-Button" Defense Primitive – Fast, Secure, Compatible and Auditable – Increasing Commercially Adoption Other Frameworks
26
Thanks 26 http://code.google.com/closure/templates/docs/security.html Questions?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.