Back to skill

Security audit

Network Scanner

Security checks across malware telemetry and agentic risk

Overview

This appears to be a legitimate network scanner, but its script builds shell commands from user and config input, creating a real local command-execution risk.

Install only if you trust the publisher and will use it on networks you own or are authorized to scan. Avoid untrusted CIDR, DNS, network-name, or config values, prefer --no-sudo unless MAC discovery is required, and treat the current version as needing review until shell=True command construction is replaced with validated argument-list subprocess calls.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (8)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def run_cmd(cmd, timeout=60):
    """Run a shell command and return output."""
    try:
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
        return result.stdout.strip()
    except subprocess.TimeoutExpired:
        return ""
Confidence
99% confidence
Finding
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill invokes shell-capable tooling (`nmap`, `dig`) and appears to support writing configuration data (`--init-config` to `~/.config/network-scanner/networks.json`), but it declares no permissions or capability boundaries. That mismatch is a real security issue because users or hosting platforms may trust the manifest to represent side effects, while the skill can still execute network scans and modify local files.

Intent-Code Divergence

Medium
Confidence
93% confidence
Finding
Configured networks are marked trusted and skip route verification entirely, even though the safety comments imply route validation is what prevents accidental scans of public or externally routed networks. If an attacker or careless user can modify the config, they can whitelist arbitrary targets and bypass the intended safety boundary, enabling unauthorized or abusive scanning.

Unvalidated Output Injection

High
Category
Output Handling
Content
def run_cmd(cmd, timeout=60):
    """Run a shell command and return output."""
    try:
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
        return result.stdout.strip()
    except subprocess.TimeoutExpired:
        return ""
Confidence
99% confidence
Finding
subprocess.run(cmd, shell=True, capture_output

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Run nmap scan - use sudo for MAC discovery
    print(f"Scanning {cidr}...", file=sys.stderr)
    sudo = "sudo " if use_sudo else ""
    nmap_cmd = f"{sudo}nmap -sn -oX - {cidr} 2>/dev/null"
    nmap_output = run_cmd(nmap_cmd, timeout=180)
Confidence
96% confidence
Finding
sudo

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Run nmap scan - use sudo for MAC discovery
    print(f"Scanning {cidr}...", file=sys.stderr)
    sudo = "sudo " if use_sudo else ""
    nmap_cmd = f"{sudo}nmap -sn -oX - {cidr} 2>/dev/null"
    nmap_output = run_cmd(nmap_cmd, timeout=180)
Confidence
96% confidence
Finding
sudo

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Run nmap scan - use sudo for MAC discovery
    print(f"Scanning {cidr}...", file=sys.stderr)
    sudo = "sudo " if use_sudo else ""
    nmap_cmd = f"{sudo}nmap -sn -oX - {cidr} 2>/dev/null"
    nmap_output = run_cmd(nmap_cmd, timeout=180)
Confidence
96% confidence
Finding
sudo

Tool Parameter Abuse

High
Category
Tool Misuse
Content
def run_cmd(cmd, timeout=60):
    """Run a shell command and return output."""
    try:
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
        return result.stdout.strip()
    except subprocess.TimeoutExpired:
        return ""
Confidence
99% confidence
Finding
subprocess.run(cmd, shell=True

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.