portunusmcp@0.1.0
CAUTION· static onlyPublisher claims: "Zero-trust, risk-aware gateway proxy for the Model Context Protocol" Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- nothing has run yet
- What we could not test
- everything: the server has not run yet
Run it before you trust it. Nothing has run yet: the code was read, the server was not. `vet-skills try` runs this exact version in the honeypot in about a minute.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-14 and scored it 52/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
… gateway python scripts/reset_dev_state.py --yes`. - `docker compose --env-file .env.demo -f compose.demo.yml up -d` — explicit development/demo stack. Copy `.env.d…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- ${GATEWAY_ENV_FILE:-.env.prod.gateway}Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- `docker compose --env-file .env.demo -f compose.demo.yml --profile monitoring up -d` — demo stack plus Prometheus (9090) and anonymous Grafana (3000); never production.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.… gateway python scripts/reset_dev_state.py --yes`. - `docker compose --env-file .env.demo -f compose.demo.yml up -d` — explicit development/demo stack. Copy `.env.d…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…n snapshots (confirms unless `--yes`); in-container: `docker compose --env-file .env.demo -f compose.demo.yml run --rm gateway python scripts/reset_dev_state.py --y…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…n snapshots (confirms unless `--yes`); in-container: `docker compose --env-file .env.demo -f compose.demo.yml run --rm gateway python scripts/reset_dev_state.py --y…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- `docker compose --env-file .env.demo -f compose.demo.yml --profile monitoring up -d` — demo stack plus Prometheus (9090) and anonymous Grafana (3000); never production.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print(" In another terminal: docker kill -s HUP portunusmcp-demo-gateway-1")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell." docker compose --env-file .env.demo -f compose.demo.yml run --rm gateway"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.rows = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."open('/etc/passwd')",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo mkdir -p /usr/local/lib/docker/cli-pluginsFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell." keys with: docker kill -s HUP portunusmcp-demo-gateway-1)"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.docker compose --env-file .env.demo -f compose.demo.yml up -d --buildFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.message["params"]["arguments"] = {"text": "rm -rf /"}Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.env = (ROOT / ".env.prod.example").read_text()Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print(" (hot-reloads v2 and records the revision snapshot the simulator needs)")Fix: Pin versions and sources; vendor anything fetched at install time.# Policy hot-reload on SIGHUP (§8): docker kill -s HUP <gateway>.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.sudo curl -fsSL \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.".env.prod.gateway.example",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo chmod 0755 /usr/local/lib/docker/cli-plugins/docker-composeFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.- "open('/etc/passwd')"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo chmod 0755 /usr/local/lib/docker/cli-plugins/docker-composeFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.print(" docker compose --env-file .env.demo -f compose.demo.yml up -d --build")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.containers = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.env_path = destination / ".env.prod.example"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…VALIDATION`, and `audit_log.write()` escapes NUL so adversarial arguments can't kill the audit write; single-source risk thresholds — the 40/70/90 bands are compared…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.python -c 'import json,sys; d=json.load(open("/tmp/release.json")); assert d["tag"] == sys.argv[1] and d["commit"] == sys.argv[2]' "$GITHUB_REF_NAME" "${{ needs.prepare.outputs.commit }}"Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.docker kill -s HUP portunusmcp-demo-gateway-1Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.docker compose --env-file .env.demo -f compose.demo.yml up -d postgres redisFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo chmod 0755 /usr/local/lib/docker/cli-plugins/docker-composeFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."postgres not reachable — run: docker compose --env-file .env.demo"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo curl -fsSL \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.docker compose --env-file .env.demo -f compose.demo.yml run --rm gateway \Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."redis not reachable — run: docker compose --env-file .env.demo"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…tically flag instruction-injection patterns (imperative text aimed at a model, "ignore previous instructions" phrasing, hidden/zero-width unicode, encoded payloads) when a description is *…Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.sudo mkdir -p /usr/local/lib/docker/cli-pluginsFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…VALIDATION`, and `audit_log.write()` escapes NUL so adversarial arguments can't kill the audit write; single-source risk thresholds — the 40/70/90 bands are compared…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Policy hot-reload on SIGHUP (§8): docker kill -s HUP <gateway>.Fix: Pin versions and sources; vendor anything fetched at install time."commit": subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.attacker arguments (item 21) — escape it so a null byte can't kill the writeFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.message["params"]["arguments"] = {"text": "rm -rf /"}Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for portunusmcp@0.1.0 as of 4 min ago. This is the package itself, not its dependencies.
What would make this Verified
28 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim bashaarjavaid: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Privileged sudo command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.