Many of the threats NoScript is currently capable of handling, such as XSS, CSRF or ClickJacking, have one common evil root: lack of proper isolation at the web application level. Since the web has not been originally conceived as an application platform, it misses some key features required for ensuring application security. Actually, it cannot even define what a “web application” is, or declare its boundaries especially if they span across multiple domains, a scenario becoming more common and common in these “mashups” and “social media” days.
The idea behind the Application Boundaries Enforcer (ABE) module is hardening the web application oriented protections already provided by NoScript, by delivering a firewall-like component running inside the browser. This "firewall" is specialized in defining and guarding the boundaries of each sensitive web application relevant to the user (e.g. webmail, online banking and so on), according to policies defined either by the user himself, or by the web developer/administrator, or by a trusted 3rd party.
ABE rules, whose syntax is defined in this specification (pdf), are quite simple and intuitive, especially if you are familiar with firewall policies:
# This one defines normal application behavior, allowing hyperlinking # but not cross-site POST requests altering app status # Additionally, pages can be embedded as subdocuments only by documents from # the same domain (this prevents ClickJacking/UI redressing attacks) Site *.somesite.com Accept POST SUB from SELF https://secure.somesite.com Accept GET Deny # This one guards logout, which is foolish enough to accept GET and # therefore we need to guard against trivial CSRF (e.g. ) Site www.somesite.com/logout Accept GET POST from SELF Deny # This one guards the local network, like LocalRodeo # LOCAL is a placeholder which matches all the LAN # subnets (possibly configurable) and localhost Site LOCAL Accept from LOCAL Deny # This one strips off any authentication data # (Auth and Cookie headers) from requests outside the # application domains, like RequestRodeo Site *.webapp.net Accept ALL from *.webapp.net Anonymize # This one allows Facebook scripts and objects to be included only # from Facebook pages Site .facebook.com .fbcdn.net Accept from .facebook.com .fbcdn.net Deny INCLUSION(SCRIPT, OBJ, SUBDOC)
Living inside the browser, the ABE component can take advantage of its privileged placement for enforcing web application boundaries, because it always knows the real origin of each HTTP request, rather than a possibly missing or forged (even for privacy reasons) HTTP Referer header, and can learn from user’s feedback.
A preliminary ABE implementation is provided with NoScript 184.108.40.206 and above, and local rulesets
can be configured from NoScript Options|Advanced|ABE.
Rules for the most popular web applications will be made downloadable and/or available via automatic updates for opt-in subscribers,
and UI front-ends will be provided to edit them manually or through a transparent auto-learning process, while browsing.
Additionally, web developers or administrators can declare policies for their own web applications:
if user enabled the Allow sites to push their own rulesets option, ABE will honor them, unless they conflict with more restrictive user-defined rules.
As soon as browser support for the Origin HTTP header becomes widespread and reliable, an external version of ABE might be developed as a filtering proxy.
© Copyright 2009 Giorgio Maone - some rights reserved.