June 1, 2011, 3:23 a.m.
posted by redcraft
Grant Trust with Master Certificates
Control secure uses of Firefox completely with an overriding master certificate.
Web site content can request trusted access to Firefox by presenting content that is digitally signed [Hack #18] . Trusted access lets the content break out of the web page sandbox. The user must manually confirm that they trust the signed content presented before this can happen. This hack explains how to avoid that manual confirmation.
Master Certificate Concepts
- Master password
Stored in the Firefox user profile area: one piece of data per user profile. Provides an overall security check per profile and privacy for each user.
- Master certificate
Stored in the Firefox install area: one JAR file only. Provides an overall security check for one or more remote websites and secure access to the browser for those web sites.
In other words, a master password keeps other users out; a master certificate lets web sites in. Since all this information is stored on the same computer as Firefox, both are subject to change from anyone who can log in to the computer.
A typical use of a master certificate is for a vendor, distributor, or deployer to bundle it with a Mozilla-based product. This gives a distributor a back door through which they can control the browser's security status. This back door can be exploited for different reasons, depending on the web environment:
- In a conservative environment
It allows the distributor to create a community of trusted web sites that all have secure access to the user's browser. Such a community can aggregate value-added services in the user's browser.
- In a liberal environment
It allows a distributor to insist that security restrictions must be dropped by those that read either the vendor's web site or the vendor's friends' web sites. Such an environment ensures that no user can hold back from engaging with the rest of the community.
Master certificates are, therefore, a management tool similar to Firefox's Update Manager, with the following differences:
The Update Manager provides search, version, download, and install tools. Master certificates must be deployed by hand.
The master certificate uses fine-grained security. Update Manager is all-or-nothing.
Scripts trusted via the master-certificate system must still request the secure access they need. Scripts in updated extensions and patches are automatically secure.
In both cases, the user must download a URL before any security checks happen. You can arrange matters so that such checks are automatic. For example, you can set the home page to a URL that points to suitably signed content.
Deploying Master Certificates
A master certificate is deployed as a signature on a JAR file. No other contents are required in the JAR, so it can contain either nothing (an empty directory) or some dummy content. Just store the certificate [Hack #17] and sign the nonexistent content normally [Hack #18] . The JAR file must be named systemSignature.jar (the filename is case-sensitive).
Do not keep the master certificate inside any of Firefox's user profiles. That can become very confusing at runtime. Maintain separate copies of the three .db files signtool requires, and keep them in a secure place. At worst, maintain a separate, dedicated Firefox install or a separate Firefox user profile. Use that separate configuration for nothing other than maintaining the master certificate.
Next, place the JAR file in the Firefox install area. It should go in the same directory as firefox.exe (Windows), firefox-bin (Linux/Unix), or in the Essential Files directory on Mac OS X. Restart Firefox.
To test whether the certificate is working, sign a piece of content with the master certificate. The content should also use the netscape.security.PrivilegeManager.enablePrivilege( ) method [Hack #18] . Put the resulting JAR file behind a URL. Download it and confirm that the privileges are automatically granted.
Master certificates can also be wrapped up inside an Extension and deployed that way.
Delegating Trust to Others
netscape.security.PrivilegeManager.setCanEnablePrivilege(fprint, privs) netscape.security.PrivilegeManager.invalidate(fprint)
fprint is the SHA1 fingerprint of the other certificate that is to be trustednormally, a web site certificate. That other certificate may or may not be installed in the Firefox certificate database. Any certificate can be specified, though. privs is a set of space-separated capability privileges [Hack #20] . MD5 fingerprints are not supported.
To find out the fingerprint of a certificate, either view its details in the Firefox Certificate Manager, if it happens to be recorded there, or run these commands, downloaded as part of the Mozilla NSS package:
signtool -L -d "." # list all known certificates certutil -L -d "." -n"name" # display details for cert. "name"
Scripts delegating trust can also be wrapped up inside an Extension and deployed that way.
Alternatives to Master Certificates
Provide a page of links to all content to be trusted and ask users to spend Friday afternoon clicking on all of them. Get them to save their choices so that they are never asked again.
Follow the preceding approach for a single user. When finished, copy the user's updated certificate database to all other Firefox users' profiles.
Extensions can do anything, and security arrangements are stored in the Firefox preferences file. You can build a custom security system as an Extension that sets up whatever security arrangements are required for normally secure web pages.