Firefox

Firefox Extensions

Overview

Firefox stores extension (add-on) metadata in extensions.json, a JSON file within each profile directory. This file contains detailed information about every installed extension, theme, language pack, and dictionary, including version, permissions, installation source, active/disabled status, signature verification state, and blocklist status.

Extensions are forensically significant because they reveal user behaviour patterns, privacy tool usage, potential malware vectors, and browser capability modifications. A privacy-focused extension set (VPN, ad blocker, tracker blocker) suggests a security-conscious user, while unsigned or sideloaded extensions may indicate compromise.

File Locations

FilePathDescription
Extension metadata~/Library/Application Support/Firefox/Profiles/{profile}/extensions.jsonComplete extension registry
Installed extensions~/Library/Application Support/Firefox/Profiles/{profile}/extensions/XPI files and extracted extensions
Extension storage~/Library/Application Support/Firefox/Profiles/{profile}/storage/default/Per-extension data
Browser ext data~/Library/Application Support/Firefox/Profiles/{profile}/browser-extension-data/WebExtension storage

File Format

extensions.json Structure

{
  "schemaVersion": 35,
  "addons": [
    {
      "id": "uBlock0@raymondhill.net",
      "name": "uBlock Origin",
      "version": "1.54.0",
      "type": "extension",
      "description": "An efficient blocker...",
      "creator": "Raymond Hill",
      "homepageURL": "https://github.com/gorhill/uBlock",
      "active": true,
      "userDisabled": false,
      "appDisabled": false,
      "softDisabled": false,
      "blocklistState": 0,
      "installDate": 1710504000000,
      "updateDate": 1704873600000,
      "sourceURI": "https://addons.mozilla.org/firefox/downloads/file/...",
      "location": "app-profile",
      "visible": true,
      "signedState": 2,
      "incognito": "spanning",
      "permissions": {
        "permissions": ["dns", "menus", "privacy", "storage", "tabs",
                       "webNavigation", "webRequest", "webRequestBlocking"],
        "origins": ["http://*/*", "https://*/*"]
      }
    }
  ]
}

Key Fields for Analysis

FieldForensic Significance
idUnique extension identifier (e.g., uBlock0@raymondhill.net)
nameHuman-readable extension name
versionInstalled version
typeAdd-on type: extension, theme, locale, dictionary, plugin
activeWhether the extension is currently running
userDisabledUser manually disabled the extension
appDisabledFirefox disabled the extension (compatibility, policy)
blocklistStateMozilla blocklist status
installDateWhen the extension was installed (Unix milliseconds)
updateDateWhen the extension was last updated (Unix milliseconds)
sourceURIDownload URL -- reveals AMO, sideloading, or enterprise deployment
locationInstallation location (profile, system, built-in)
signedStateSignature verification state
permissionsAPI and host permissions requested

Extension Types

TypeDescription
extensionStandard browser extension (WebExtension)
themeVisual theme/skin
localeLanguage pack
dictionarySpell-check dictionary
pluginLegacy NPAPI plugin (rare in modern Firefox)

Installation Locations

LocationDescriptionForensic Meaning
app-profileUser profileNormal user installation from AMO or sideload
app-system-defaultsSystem defaultsPre-installed by system administrator
app-builtinBuilt into FirefoxShips with Firefox (e.g., built-in themes)
app-system-shareSystem sharedInstalled system-wide for all users
app-system-localSystem localLocal system installation
app-system-addonsSystem add-onsMozilla system add-ons
app-temporaryTemporary installDeveloper sideloading via about:debugging

Signed State Values

ValueMeaningForensic Significance
-1Signing not requiredDevelopment or enterprise environment
0Not signedPotentially suspicious -- unsigned extensions cannot be installed in release Firefox without override
1Preliminary reviewAMO preliminary review only
2SignedFull AMO signature verification
3System add-onMozilla system add-on signature
4PrivilegedMozilla privileged add-on

Blocklist State Values

ValueMeaning
0Not blocked
1Soft blocked (user warned)
2Hard blocked (forcefully disabled)
3Soft blocked (disabled with option to re-enable)

Timestamps

Extension timestamps use Unix milliseconds (milliseconds since 1970-01-01 UTC).

installDate = 1710504000000
Unix seconds = 1710504000000 / 1000 = 1710504000
Result = 2024-03-15T12:00:00Z

Analysis Notes

Risky Permission Detection

The macfor collector flags extensions with permissions that grant broad access or sensitive capabilities. The following permissions are flagged:

PermissionRisk
nativeMessagingCan communicate with native applications outside the browser
webRequestCan intercept and observe all network requests
webRequestBlockingCan intercept, modify, and block network requests
<all_urls>Full access to all websites
clipboardReadCan read clipboard contents
downloads / downloads.openCan manage and open downloaded files
managementCan manage other extensions
privacyCan modify privacy settings
proxyCan control proxy settings
cookiesCan access browser cookies
historyCan access browsing history
bookmarksCan access bookmarks
browsingDataCan clear browsing data
tabsCan access browser tab information
dnsCan resolve DNS queries

Broad host permissions are also flagged:

PatternRisk
*://*/*Full access to all websites via wildcard
http://*/* or https://*/*Full access to all HTTP/HTTPS sites
file:///*Access to local files

Source URI Analysis

The sourceURI field reveals where the extension was installed from:

  • AMO (addons.mozilla.org): Standard installation from Mozilla's curated store.
  • Direct URL download: Sideloaded from a third-party source.
  • Empty or null: Built-in or enterprise-deployed extension.
  • file:// URI: Locally installed from disk (developer or testing).

Identifying Suspicious Extensions

Red flags to investigate:

  1. Unsigned extensions (signedState = 0): Cannot normally be installed in release Firefox.
  2. Blocked extensions (blocklistState > 0): Mozilla identified the extension as harmful.
  3. Extensions with nativeMessaging: Can execute arbitrary local programs.
  4. app-temporary location: Developer sideloading, potential malware testing.
  5. Extensions requesting <all_urls> + webRequestBlocking: Can intercept all traffic.
  6. Unknown source URIs: Not from AMO.
  7. Very recent install dates combined with broad permissions.

Incognito/Private Browsing Mode

The incognito field indicates how the extension behaves in private browsing:

ValueMeaning
spanningExtension runs in private windows with shared state
splitExtension runs in private windows with separate state
not_allowedExtension does not run in private windows

An extension allowed in private browsing can observe activity the user intended to be ephemeral.

Useful Analysis Steps

  1. List all active extensions with permissions: Focus on active: true extensions and their requested permissions.
  2. Check for privacy/security tools: uBlock Origin, Privacy Badger, HTTPS Everywhere, VPN extensions indicate security awareness.
  3. Check for development tools: Indicates a technical user (e.g., React DevTools, Redux DevTools).
  4. Cross-reference blocked extensions: Any extension with blocklistState > 0 was identified as harmful by Mozilla.
  5. Timeline of installations: Sort by installDate to see when the user's extension set evolved.

Version Differences

VersionChange
Firefox 57 (Quantum)Legacy XUL/XPCOM extensions no longer supported. Only WebExtensions.
Firefox 74+Extensions can request permissions dynamically at runtime
Firefox 109+Manifest V3 support alongside V2

Since Firefox 57, all extensions must use the WebExtensions API. The extensions.json format has been stable across supported versions.

Tool Support

ToolCapability
macforFull extension parsing with risky permission detection, source analysis, and signed state classification (Pro module)
AXIOMAutomated Firefox extension extraction
AutopsyExtension enumeration via Firefox module
Manual JSON inspectionextensions.json is human-readable JSON

References

Previous
Saved Passwords