nullwire-mcp@r1
BLOCKED· install onlyPublisher claims: "Zero-dependency, RAM-only HTTP diagnostic proxy and MCP server in pure Go. It intercepts traffic in RAM and replaces secrets with salted SHA-256 correlation tags so AI agents can debug auth flows without credentials entering LLM contexts or touching disk." Observed in sandbox: sends data to release-assets.githubusercontent.com.
Coverage
Install scripts ran; no agent task scenario for this bundle.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Blocked here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Revoked: guards refuse to launch this version
confirmed incident: contacted release-assets.githubusercontent.com (undeclared) Every machine running vet-skills guard stops starting it at the next launch; the state clears when the honeypot re-run or a reviewer clears it.
Before you give it your token
- It will ask for
GITHUB_TOKENNULLWIRE_AUTH_TOKENConfiguration, not credentials: CODEX_HOME, NULLWIRE_BASE_URL, NULLWIRE_CACHE_DIR, NULLWIRE_VERSION, NULLWIRE_VIA_NPM, PREFIX, SSL_CERT_DIR, SSL_CERT_FILE, TERMUX_VERSION- Where it talks to
- no vendor host named in the codeAlso api.test, a.test, b.test, slack.com, zapier.com, ifttt.com, telegram.org, githubusercontent.com, httpbin.org — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · contacted release-assets.githubusercontent.com (undeclared)
- What we could not test
- use of the skill by an agent
Do not connect it. The honeypot or a critical finding blocked this version; the evidence is below.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is nullwire-mcp@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; install scripts ran; no agent task scenario for this bundle) on 2026-11-14 and scored it 39/100 (Blocked). Do not install it: the sandbox observed behaviour consistent with credential theft, exfiltration or persistence. Notable findings: Pipe-to-shell pattern; Access to sensitive file paths; Access to sensitive file paths. Summary: sends data to release-assets.githubusercontent.com.
Behavior trace
Honeypot run · 1 s · 2 scenariosStatic findings
# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.files: '(?i)(^|/)(\.env[^/]*|[^/]*\.env|\.mcp\.json|mcp\.json|mcp_config\.json|claude_desktop_config\.json|[^/]*[-_]mcp\.json|[^/]*\.toml|[^/]*\.ya?ml)$'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.description: Block commits that contain secrets in MCP configs, .env, TOML or YAML files.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary><b>macOS, Linux and Termux: install script</b></summary> ```bash curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/instFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.<summary><b>Windows: install script</b></summary> ```powershell irm https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.ps1 | iex nulFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary><b>With Node.js (no install step): <code>npx</code></b></summary> ```bash npx -y nullwire-mcp install --client all ``` Nothing to download by hand: theFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.<summary><b>Python, GitHub CLI, mise and asdf</b></summary> ```bash pipx run nullwire-mcp install --client all # or: pip install nullwire-mcp gh extension instaFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.<summary><b>Short install URL (GitHub Pages)</b></summary> ```bash curl -fsSL https://voxnode-ux.github.io/nullwire-mcp/install.sh | sh -s -- --setup ``` ```powFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.<summary><b>Linux packages and distributions</b></summary> ```bash # Debian, Ubuntu: download the .deb from the release page, then sudo apt install ./nullwire-mFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.files: '(?i)(^|/)(\.env[^/]*|[^/]*\.env|\.mcp\.json|mcp\.json|mcp_config\.json|claude_desktop_config\.json|[^/]*[-_]mcp\.json|[^/]*\.toml|[^/]*\.ya?ml)$'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// npx -y nullwire-mcp run the serverFix: Pin versions and sources; vendor anything fetched at install time.paths = append(paths, ".mcp.json", filepath.Join(".claude", "settings.json"), ".env", ".envrc")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return n == ".env" || n == ".envrc" || strings.HasPrefix(n, ".env.") || strings.HasSuffix(n, ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.filepath.Join(home, ".env"), filepath.Join(home, ".envrc"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.<summary><b>Windows: install script</b></summary> ```powershell irm https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.ps1 | iex nulFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.kill $UP 2>/dev/nullFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Pin versions and sources; vendor anything fetched at install time.// [mcp_servers.<name>.env] are left alone.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.useNpx := fset.Bool("npx", false, "register `npx -y nullwire-mcp` instead of a binary path")Fix: Pin versions and sources; vendor anything fetched at install time."https://chat.googleapis.com/v1/spaces/", "https://api.telegram.org/bot",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.chmod 600 ~/.ssh/aurFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// npx -y nullwire-mcp install --client all register it with your MCP clientsFix: Pin versions and sources; vendor anything fetched at install time.# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.deep := fset.String("deep", "", "also walk this directory and scan MCP config JSON and .env files")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.deep := pf.String("deep", "", "also scan this directory for MCP config JSON, .env and .toml files")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.<summary><b>With Node.js (no install step): <code>npx</code></b></summary> ```bash npx -y nullwire-mcp install --client all ``` Nothing to download by hand: theFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.t.Errorf("npx dry run: %d\n%s", code, out)Fix: Pin versions and sources; vendor anything fetched at install time."see https://hooks.slack.com/services/ for the docs",Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.dirty := filepath.Join(dir, ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."api_key: sk_live_1234567890abcdefghijklmnop\nlist:\n - token: abcdefghijklmnop12345\n"Fix: Never read or enumerate credential locations; accept a documented environment variable instead.if strings.Contains(out, "sk_live_1234567890abcdef") || !fxTagRe.MatchString(out) {Fix: Never read or enumerate credential locations; accept a documented environment variable instead.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary><b>macOS, Linux and Termux: install script</b></summary> ```bash curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/instFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.t.Errorf("under the npm wrapper the npx form is used:\n%s", out)Fix: Pin versions and sources; vendor anything fetched at install time.git clone --depth 1 "https://x-access-token:${TAP_TOKEN}@github.com/VoxNode-ux/$1.git" "$dir"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.<summary><b>Linux packages and distributions</b></summary> ```bash # Debian, Ubuntu: download the .deb from the release page, then sudo apt install ./nullwire-mFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.chmod +x mcp-publisherFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.printf '%s\n' "$AUR_SSH_KEY" > ~/.ssh/aurFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.install -m 700 -d ~/.sshFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.docker run --rm \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Pin versions and sources; vendor anything fetched at install time.ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hostsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | shFix: Pin versions and sources; vendor anything fetched at install time.for _, leak := range []string{"supersecretvalue123", "sk_live_1234567890abcdefghijklmnop", "abcdefghijklmnop12345"} {Fix: Never read or enumerate credential locations; accept a documented environment variable instead.chmod +x "$BIN" 2>/dev/nullFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.chmod 600 ~/.ssh/aurFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.kill $UP 2>/dev/null || trueFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.chmod 755 "$BIN.new"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.// npx -y nullwire-mcp --nullwire-prefetch only download the binaryFix: Pin versions and sources; vendor anything fetched at install time.# curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Pin versions and sources; vendor anything fetched at install time.write(".env", "API_TOKEN=abcdefgh\nPORT=8080\nAUTHOR=jane\n")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.proc = subprocess.Popen([binary] + args, env=env)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setupFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary><b>Short install URL (GitHub Pages)</b></summary> ```bash curl -fsSL https://voxnode-ux.github.io/nullwire-mcp/install.sh | sh -s -- --setup ``` ```powFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.<summary><b>Python, GitHub CLI, mise and asdf</b></summary> ```bash pipx run nullwire-mcp install --client all # or: pip install nullwire-mcp gh extension instaFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct."userinfo": {"http://admin:[email protected]/path", "hunter2pass"},Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
41 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Contacts a host you did not declare≈ +23 on the totalList every host you talk to in SKILL.md frontmatter (`network: [api.example.com]`), or stop contacting the ones you cannot justify.
- Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Unclaimed publisher≈ +8 on the totalClaim voxnode-ux: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden instructions≈ +6 on the totalRemove HTML comments, zero-width characters and white-on-white text that carry instructions. Everything the agent is meant to read should be visible to the person reading the file.
- 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.
- Direct script execution from GitHub raw URL≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.