T03 · Remote Payload Retrieval and Execution
- Location
references/INSTALL.md:7- Finding
Unpinned Remote Source and Dependencies Are Installed and Executed
- Content
View full analysis
Vulnerability Details
File Location:
references/INSTALL.md:7-24,references/OPENHANDS_MCP_CONFIG.json:4-8, andreferences/OPENCLAW_MCP_CONFIG.json:5-9
Vulnerability Type: Unpinned remote payload retrieval and software supply-chain exposure
Risk Level: MediumVulnerable Code
references/INSTALL.md:7-24:markdown - a local clone of `https://github.com/xiaojiou176-open/provenote` - `uv` - a workspace where the host can launch shell commands ## 1. Clone and install the repo ```bash git clone https://github.com/xiaojiou176-open/provenote.git cd provenote uv sync2. Make the MCP server launchable
Provenote exposes its MCP server through the repo-owned entrypoint:
bash cd /absolute/path/to/provenote uv run provenote-mcptext `references/OPENHANDS_MCP_CONFIG.json:4-8`: ```json "command": "bash", "args": [ "-lc", "cd /absolute/path/to/provenote && uv run provenote-mcp" ]references/OPENCLAW_MCP_CONFIG.json:5-9:json "command": "bash", "args": [ "-lc", "cd /absolute/path/to/provenote && uv run provenote-mcp" ]Technical Analysis
The installation instructions clone the current default branch of an external GitHub repository without pinning a reviewed commit, immutable release, checksum, or cryptographic signature. They then run
uv sync, which resolves and installs code and dependencies defined by that mutable remote repository.The resulting MCP entry point is subsequently executed through
bash -lc. Consequently, the code that runs is not fully represented by the audited Skill package and can change after this Skill has been reviewed. The package also does not include the fetched source or a dependency lockfile that would allow the effective runtime payload and transitive dependencies to be verified during this audit.This is primarily a remote payload retrieval and execution risk, with an ...[truncated 1802 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin the Provenote source to a reviewed, immutable commit hash rather than cloning and executing the current default branch:
bash git clone https://github.com/xiaojiou176-open/provenote.git cd provenote git checkout --detach <reviewed-commit-sha> -
Prefer a signed release and verify its signature or published checksum before installation.
-
Commit and distribute a reviewed dependency lockfile, then require locked installation:
bash uv sync --lockedConfigure the process to fail rather than silently re-resolve dependencies.
-
Document the exact Provenote release and commit corresponding to the declared canonical version instead of relying only on a mutable repository URL.
-
Review all transitive dependencies and restrict package indexes to intended, trusted sources. Where supported, verify hashes for downloaded artifacts.
-
Avoid invoking a general-purpose shell when it is unnecessary. Configure the MCP host to execute
uvdirectly and use a fixed working-directory option supplied by the host:json { "command": "uv", "args": ["run", "--locked", "provenote-mcp"], "cwd": "/absolute/path/to/provenote" } -
Run the MCP server under a dedicated, least-privileged account or sandbox. Restrict filesystem access, environment variables, credentials, and outbound network access to what the documented workflow requires.
-
Re-audit the pinned Provenote source and lockfile because they are outside the supplied Skill package and were not available in this audit.
-
