mozilla

Compare Revisions

Bypassing Security Restrictions and Signing Code

Change Revisions

Revision 77789:

Revision 77789 by Sheppy on

Revision 303039:

Revision 303039 by Jesse on

Title:
Bypassing Security Restrictions and Signing Code
Bypassing Security Restrictions and Signing Code
Slug:
Bypassing_Security_Restrictions_and_Signing_Code
Bypassing_Security_Restrictions_and_Signing_Code
Tags:
Security, "Web Development"
"Security", "Web Development"
Content:

Revision 77789
Revision 303039
n10    <pre>n
11Two links at the end of this article are broken.
12They are labeled (broken-link)
13</pre>
n15      Often it may be necessary to deploy or test code that has tn11      Early versions of Firefox allowed web sites to segregate <a
>o function beyond the safe "sandbox" security zone of the browsin> href="https://developer.mozilla.org/en-US/docs/Security_check_ba
>g environment. An example might be a script that comes from one d>sics" title="https://developer.mozilla.org/en-US/docs/Security_ch
>omain that is trying to invoke methods on scripts affiliated with>eck_basics">principals</a> using signed scripts, and request extr
> another domain. Typically, such scripts have to be digitally sig>a permissions for scopes within signed scripts using a function c
>ned with a code signing certificate to make such invocations in N>alled <code>enablePrivelege</code>. These feature was not used mu
>etscape and Mozilla browsers. Though deploying signed code is the>ch (aside from abuse), and its complexity made performance improv
> ideal solution for production environments that will be accessed>ements difficult. Signed script segregation was removed in <a hre
> by several users, often developers would like a way to make a qu>f="https://bugzilla.mozilla.org/show_bug.cgi?id=726125" title="ht
>ick test of their scripts without the additional step of signing >tps://bugzilla.mozilla.org/show_bug.cgi?id=726125">bug 726125</a>
>the code. This article presents information on how to edit your N>, the <code>enablePrivilege</code> prompt was removed in <a href=
>etscape or Mozilla preferences in order to accomplish this.>"https://bugzilla.mozilla.org/show_bug.cgi?id=750859" title="http
 >s://bugzilla.mozilla.org/show_bug.cgi?id=750859">bug 750859</a>, 
 >and <code>enablePrivilege</code> itself was nerfed in <a href="ht
 >tps://bugzilla.mozilla.org/show_bug.cgi?id=757046" title="https:/
 >/bugzilla.mozilla.org/show_bug.cgi?id=757046">bug 757046</a>.
n18      JavaScript code that runs on Mozilla and Netscape browsers n14      Sites that require additional permissions should now ask Fi
>is subject to certain restrictions, such as the <a class="externa>refox users to install an <a href="https://developer.mozilla.org/
>l" href="http://www.mozilla.org/projects/security/components/same>en-US/docs/Extensions" title="https://developer.mozilla.org/en-US
>-origin.html">Same Origin Policy</a> which prevents document or s>/docs/Extensions">extension</a>, which can <a href="https://devel
>cript loaded from one origin from getting or setting properties o>oper.mozilla.org/en-US/docs/Code_snippets/Interaction_between_pri
>f a document from a different origin. Such restrictions are a fam>vileged_and_non-privileged_pages" title="https://developer.mozill
>iliar notion since the Netscape Navigator 2.0 days. <a href="/en/>a.org/en-US/docs/Code_snippets/Interaction_between_privileged_and
>Security" title="en/Security">Security Central</a> provides links>_non-privileged_pages">interact with non-privileged pages</a> if 
> on using tools to affix digital signatures to JavaScript files, >needed.
>as well as links on how to deploy signed code. A {{ Anch("Related 
> Links") }} section has also been added at the end. This technote 
> shows users a way around the security restrictions, particularly 
> those imposed by having to sign your code, and the techniques pr 
>escribed here should be considered for testing purposes only. 
t20    <p>t
21      Netscape and Mozilla browsers are highly configurable. By g
>oing to the Edit | Preferences menu, you can see ways in the pref 
>erences panel to configure your browsing experiences. There are a 
>dditionally some number of hidden preferences also, and most of t 
>hese are in the form of entries in special JavaScript files store 
>d in your profile directory. 
22    </p>
23    <p>
24      One such file is prefs.js which is in your profile director
>y. To learn more about where your profile directory is located, p 
>lease see the <a class="external" href="http://wp.netscape.com/en 
>g/mozilla/ns7/relnotes/7.html#profiles_location">Netscape 7 relea 
>se notes</a>. On Windows 2000, for example, the location of this  
>file might be <em>C:\Documents and Settings\arun\Application Data 
>\Mozilla\Profiles\arun\43x9dyn.slt\prefs.js</em>. There is one li 
>ne you can add to this file that will allow you to bypass some of 
> the script restrictions without signing your scripts. 
25    </p>
26    <p>
27      Before editing this file, you'll have to make sure that you
>'ve exited the browser. Completely shut down Netscape 7 or your M 
>ozilla browser. Take special care if you're running the Quick Lau 
>nch feature on Windows -- be sure to exit the browser from the ic 
>on on the right of your taskbar. When the browser has exited, add 
> this line of code to the file: 
28    </p>
29    <pre>
30    user_pref("signed.applets.codebase_principal_support", true);
>  
31</pre>
32    <p>
33      The phraseology of the preference dates to the Netscape Com
>municator 4.x days, when adding this preference to the prefs.js f 
>ile would allow unsigned Java applets and unsigned JavaScript scr 
>ipts to access properties which needed special privileges to acce 
>ss them. In the Netscape and Mozilla browser world, the preferenc 
>e has no meaning for Java Applets, but certainly continues to hav 
>e meaning for scripts asking for additional privileges without a  
>digital signature. 
34    </p>
35    <p>
36      Scripts can ask for additional privileges by invoking the P
>rivilegeManager. For example: 
37    </p>
38    <pre>
39function getHomePage() {
40  try { 
41    // ask user for permission
42    netscape.security.PrivilegeManager.enablePrivilege('Universal
>PreferencesRead'); 
43    var hp = navigator.preference('browser.startup.homepage');
44    alert('Your home page is ' + hp);
45  } catch (e) {
46    // user refused permission
47    alert('Permission to read homepage was denied.'); 
48  }
49}
50</pre>
51    <p>
52      will cause an alert dialog to display telling the user that
> a script on the site has requested extended security privileges  
>and whether the user would like to permit such access this time,  
>each time, or not at all. If the user agrees, the script will be  
>allowed to read the preference that stores what your startup home 
>page is. Typically, such code to read your preferences would have 
> to be digitally signed. By adding the codebase principals entry  
>in your prefs.js file, however, the code does not need to be sign 
>ed. Here is <a class="external" href="http://www.mozilla.org/proj 
>ects/security/components/signed-scripts.html#privs-list">a comple 
>te list of privileges</a> you can set. In particular, the Univers 
>alBrowserRead privilege allows you to bypass the same-origin rest 
>riction on scripts. 
53    </p>
54    <p>
55      There are risks associated with editing your prefs.js file 
>like this, since you now increase the risk of malicious sites bei 
>ng able to take advantage of your more permissive client. If you  
>make this modification to your preferences, be certain to only gr 
>ant special privileges to sites you trust (such as your own). 
56    </p>
57    <h3 id="Related_Links" name="Related_Links">
58      Related Links
59    </h3>
60    <ul>
61      <li>
62        <a class="external" href="http://www.mozilla.org/projects
>/security/components/ConfigPolicy.html">Further Script Access Pre 
>ferences</a> 
63      </li>
64      <li>
65        <a class="external" href="http://www.mozilla.org/projects
>/security/components/same-origin.html">Same Origin Policy</a> 
66      </li>
67      <li>
68        <a href="/en/NSS_tools_:_signtool" title="https://develop
>er.mozilla.org/en/NSS_tools_:_signtool">Signing Tool</a> (<a clas 
>s="external" href="http://docs.sun.com/source/816-5531-10/app_sig 
>n.htm">Netscape Signing Tool</a>&nbsp;(broken-link)) (<a class="e 
>xternal" href="http://developer.netscape.com/software/signedobj/j 
>arpack.html">Using Signtool 1.3 (broken-link)</a>) 
69      </li>
70      <li>
71        <a class="external" href="http://www.mozilla.org/projects
>/security/components/signed-scripts.html#privs-list">List of Priv 
>ileges Scripts can ask for</a> 
72      </li>
73    </ul>
74    <div class="originaldocinfo">
75      <h3 id="Original_Document_Information" name="Original_Docum
>ent_Information"> 
76        Original Document Information
77      </h3>
78      <ul>
79        <li>Author(s): Arun K. Ranganathan, Netscape Communicatio
>ns 
80        </li>
81        <li>Last Updated Date: 11 Nov 2002
82        </li>
83        <li>Copyright Information: Copyright © 2001-2003 Netscape
>. All rights reserved. 
84        </li>
85      </ul>
86    </div>

Back to History