T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:20- Finding
Unpinned Remote Browser Extension Is Retrieved and Executed Without Integrity Verification
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 20–22, with execution and upload instructions at lines 37–45 and 73–82
Vulnerability Type: Remote payload retrieval and supply-chain exposure
Risk Level: HighVulnerable Code
text - **Hosted ZIP** (required for Path 2; also for Path 1 when pinning a specific build): `https://github.com/pixiebrix/agent-browser-shield/releases/latest/download/agent-browser-shield-extension.zip`The downloaded payload is subsequently loaded into Chromium:
text - **Unpacked (when pinning a build):** unzip `agent-browser-shield-extension.zip` to a stable directory (e.g. `~/.cache/agent-browser-shield/extension/`) and pass `--load-extension` and `--disable-extensions-except` in step 2.text --load-extension=/abs/path/to/extension --disable-extensions-except=/abs/path/to/extensionThe alternative Browserbase path also retrieves and uploads the same payload while installing an unpinned global npm dependency:
sh npm install -g browse export BROWSERBASE_API_KEY="…" # same key used by openclaw browserbase setup browse cloud extensions upload ./agent-browser-shield-extension.zipTechnical Analysis
The Skill instructs users to retrieve a browser extension through a mutable
releases/latestURL and execute it as privileged Chromium extension code. The URL does not identify an immutable release version, artifact digest, or source commit. No SHA-256 checksum, trusted digital signature, reproducible-build procedure, or other integrity verification is provided.Because the project contains only
SKILL.md, the extension source,manifest.json, requested browser permissions, network destinations, and executable behavior cannot be audited locally. The effective code can therefore change after the Skill itself has been reviewed.Browser extensions can inspect or alter web content according to their manifest perm ...[truncated 3343 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace the mutable
releases/latestURL with an immutable, explicitly versioned release artifact tied to a specific source commit. - Publish a cryptographic digest, such as SHA-256, through a separately authenticated channel and require verification before extraction, upload, or browser loading.
- Sign release artifacts with a trusted signing identity and document mandatory signature verification.
- Include the extension source and
manifest.jsonin the audited project, or link them to the exact immutable source revision used to build the distributed archive. - Document every requested browser permission, host permission, externally reachable endpoint, and data-retention behavior. Remove permissions not essential to the declared shielding functionality.
- Use reproducible builds so reviewers can confirm that the distributed ZIP corresponds to the reviewed source.
- Pin
browseand other plugins or packages to reviewed versions with integrity metadata. Avoid global npm installation where possible; prefer a locked, isolated project environment with lifecycle scripts disabled unless required. - Verify archive structure and reject unexpected executable files, symlinks, path traversal entries, or manifests requesting permissions beyond an approved allowlist.
- Use a dedicated browser profile containing no unrelated credentials or sessions. Restrict the CDP listener to loopback and prevent access by untrusted local processes or network peers.
- For Browserbase, upload only a verified artifact and limit API-key privileges, project scope, logging exposure, and key lifetime.
- Replace the mutable
