GATEKEEPER: Mostly Static Enforcement of Security and Reliability Policies for JavaScript Code Salvatore Guarnieri Benjamin Livshits University of Washington Microsoft Research
[email protected] [email protected] Abstract policies of JavaScript code [20, 25, 29, 35]. As a recent report from Finjan Security shows, widget- The advent of Web 2.0 has lead to the proliferation of based attacks are on the rise [17], making widget secu- client-side code that is typically written in JavaScript. rity an increasingly important problem to address. The This code is often combined — or mashed-up — with report also describes well-publicised vulnerabilities in the other code and content from disparate, mutually untrust- Vista sidebar, Live.com, and Yahoo! widgets. The pri- ing parties, leading to undesirable security and reliability mary focus of this paper is on statically enforcing secu- consequences. rity and reliability policies for JavaScript code. These This paper proposes GATEKEEPER, a mostly static ap- policies include restricting widget capabilities, making proach for soundly enforcing security and reliability poli- sure built-in objects are not modified, preventing code in- cies for JavaScript programs. GATEKEEPER is a highly jection attempts, redirect and cross-site scripting detec- extensible system with a rich, expressive policy language, tion, preventing global namespace pollution, taint check- allowing the hosting site administrator to formulate their ing, etc. Soundly enforcing security policies is harder policies as succinct Datalog queries. that one might think at first. For instance, if we want to ensure a widget cannot call document.write The primary application of GATEKEEPER this paper ex- plores is in reasoning about JavaScript widgets such as because this construct allows arbitrary code injection, those hosted by widget portals Live.com and Google/IG.