Poison LinkedIn-style WAR probes and close stealth/list gaps - #7
Merged
Merged
Conversation
Noise now records the exact extension resource paths each origin probes and, after repeated evidence, answers those files for persona IDs. Allowlisted icons/entrypoints still work; first-visit path canaries, unsynthesizable formats, and POST stay fail-closed. Learned paths are local-only, query-stripped, capped, and omitted from research exports. Also expand Castle-style DOM marker coverage, add KeePassXC-Browser to the password-manager slot, and close fingerprint-vendor DNR gaps from current provider/EasyPrivacy hosts.
The canary spec read storage immediately after fetch, racing the 150ms bridge flush, so sanitizable paths like /icon.webp looked unlearned.
Scrubbing marker classes leaves the legitimate keep class, so the class attribute remains. Assert that leftover instead of an empty attribute list.
Firefox 153 restricted Marionette navigation to http(s)/file/blob/about:blank, which broke about:debugging UUID discovery and moz-extension popup checks. Pass --remote-allow-system-access so the existing smoke session can run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Noise mode was answering a conservative path allowlist (
manifest.json,icon.png,content.js, …). LinkedIn AED and similar collectors do not fetch those names — they fetch the specificweb_accessible_resourcesfile they catalogued for each ID (inpage.js,src/css/*.css,phishing.html). Persona IDs were therefore still showing as “not installed,” so Noise was not poisoning the dataset that matters.What changed
Learned-path Noise decoys. Static now records the WAR pathname each origin actually probes (query-stripped, charset-limited, max 96 chars, 8 paths per ID). After a path is seen at least twice for an eligible persona ID, later visits get a path-matched decoy. Unseen canaries, POST, and formats we cannot synthesize (webp/ico/bmp) stay fail-closed. Learned paths are local-only and omitted from research exports.
Castle-style side-effect coverage. DOM/global marker lists now include KeePassXC, Dark Reader, Bitwarden overlay (
data-bw-*), and LanguageTool. KeePassXC-Browser is in the password-manager conflict slot with an ID-seeded manifest name.Vendor DNR updates from current Fingerprint/DataDome docs and EasyPrivacy (2026-08-21):
lexisnexisrisk.com,telemetry.stytch.com(telemetry host only, not Stytch auth),group-ib.ru,ipfingerprint.com,socure.io,nethone.com.Firefox 153+ smoke CI. Marionette now blocks
about:debugging/moz-extension://unless the browser is started with--remote-allow-system-access. The Firefox smoke session uses that flag so UUID discovery and popup checks still run.Tests
tests/noise-learned-paths.spec.jscovering LinkedIn-style{id, file}probes, fetch/XHR consistency, path canaries, query stripping, two-visit learning, script.src decoys, and tag/kind mismatch.deltaIdPaths, KeePassXC ID, and new DNR hosts.npm run test:ci: 42 static passed (1 skipped), 197 e2e passed.Privacy stays local-first: no new network, no website URLs stored, research export still hashed/coarsened.