mcp-cybersec-watchdog@0.1.0
CAUTION· not startedPublisher claims: "Cybersecurity monitoring and analysis for Linux servers via MCP" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution 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.
Before you give it your token
Code inventory arrives with this version's next honeypot run.- It will ask for
- unknown until the next run
- Where it talks to
- unknown until the next run
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Not enough was observed to say yet. Not started: dependency install failed; the server itself was not observed. This version's code has not been inventoried for credentials and hosts either; both arrive with its next honeypot run (popular servers first). `vet-skills try mcp-cybersec-watchdog` runs it now and prints the full answer.
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 ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-07 and scored it 76/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: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
SUDOERS_FILE="/etc/sudoers.d/mcp-security"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.$USER ALL=(ALL) NOPASSWD: /bin/cat /etc/sudoersFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.$USER ALL=(ALL) NOPASSWD: /usr/bin/cat /etc/sudoers.d/*Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.$USER ALL=(ALL) NOPASSWD: /usr/bin/cat /etc/sudoersFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# MCP Cybersec Watchdog - Passwordless sudo for security audit commandsFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Setup passwordless sudo for MCP Cybersec Watchdog security audit commandsFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.echo "Setting up passwordless sudo for user: $USER"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.sudo tee "$SUDOERS_FILE" > /dev/null <<EOFFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.$USER ALL=(ALL) NOPASSWD: /usr/bin/getent group sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.passed, detail = _check_file_permissions("/etc/passwd", "644")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.$USER ALL=(ALL) NOPASSWD: /bin/cat /etc/sudoers.d/*Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.passed, detail = _check_file_permissions("/etc/shadow", "640")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."description": "Heap-based buffer overflow in sudo - local privilege escalation",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."recommendation": f"Update {vuln['package']} immediately: sudo apt update && sudo apt upgrade {vuln['package']}",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Try reading with sudo if neededFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# AppArmor exists but we can't read status - needs sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# AppArmor exists but needs sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Try with full path first (required by sudo rules)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# First try without sudo - check if module is loadedFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Try without sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Try reading with sudo if neededFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."recommendation": "Run 'sudo rkhunter --check' for details",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Check if we need sudo for full analysisFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."command": "sudo ufw enable",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Parse /etc/passwd for user information."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Analyze sudo configuration for security issues.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Users in sudo groupFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."command": "sudo ufw default deny incoming",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.logger.debug(f"Error getting sudo group: {e}")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.sudoers_d = Path("/etc/sudoers.d")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudoers_files = ["/etc/sudoers"]Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Try with sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.logger.debug(f"Cannot list /etc/sudoers.d/: {e}")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Check for sudo rules granting shell access."""Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Audits /etc/sudoers and /etc/sudoers.d/ for security issues:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."recommendation": f"Restart/fix {svc['name']} immediately: sudo systemctl restart {svc['name']}",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Get list of users with sudo privileges."""Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Tries command normally first, then with sudo if permission denied.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# If sudo fails, fall through to try without sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.return "Configure passwordless sudo for security audit commands in /etc/sudoers.d/"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.print("⚠️ Warning: Some security checks require sudo permissions")Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."command": "sudo apt install fail2ban",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# If command is in /usr/sbin or /sbin, likely needs sudo - try directlyFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Run command with automatic sudo fallback.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Get setup instructions for missing sudo permissions."""Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.sudo chmod 440 "$SUDOERS_FILE"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.return "Configure passwordless sudo for security audit commands in /etc/sudoers.d/"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Tries command normally first, then with sudo -n if permission denied.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Permission checking for sudo commands."""Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."recommendation": "Fix /tmp permissions: chmod 1777 /tmp",Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."recommendation": "Review and restrict permissions: chmod o-w <file>",Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."""Check if current user has sudo access."""Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Check if required sudo commands work without password.Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.Run command with automatic sudo fallback.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Try without sudo firstFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.PATH_SUDOERS = "/etc/sudoers"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Try with sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.REGRESSION TEST for critical bug: run_command_sudo must try sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.preventing the sudo fallback from executing.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Verify second call was WITH sudo -nFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.message: "{uid_zero_users} unauthorized users with root privileges (UID 0)"Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, capture_output=True, text=True, timeout=5)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Verify first call was without sudoFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Verify it tried sudo fallbackFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.result = subprocess.run(["sudo", "-n", "true"], capture_output=True, timeout=TIMEOUT_SHORT)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.cert_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for mcp-cybersec-watchdog@0.1.0 as of 12 min ago. This is the package itself, not its dependencies.
What would make this Verified
4 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim girste: 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.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.