Back to skill

Security audit

Net Detective

Security checks for vulnerabilities and agentic risk

Overview

This skill runs understandable network diagnostics and keeps a small local history, with no evidence of deception or unrelated data access.

Install this only if you are comfortable with active network diagnostics contacting outside services and producing local network metadata such as hostname, local IP, gateway, traceroute hops, latency, DNS timing, and optional speed-test results. In enterprise, VPN, or sensitive networks, confirm before running full diagnostics or recording history, and consider using the no-traceroute, no-mtu, or no-speed options when less external traffic is desired.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description includes very broad trigger phrases such as 'internet problems', 'connection issues', and 'diagnose network', which can cause the agent to invoke this skill in situations where the user did not clearly consent to active network probing. In this context, that matters because the skill can contact external services, run traceroute/speed tests, and create local history records, so overbroad activation increases the chance of unnecessary data disclosure or unintended network activity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation does not warn users that the diagnostic workflow may contact third-party infrastructure (for DNS checks, traceroute, and speed measurement) and may store results over time via the history feature. Without clear disclosure and consent, users may unknowingly expose network metadata, internal topology hints, ISP characteristics, or usage patterns, especially in sensitive home or enterprise environments.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
79% confidence
Finding

The final fallback to 'ping' depends on PATH search, which permits execution of a spoofed binary if PATH is manipulated. Since this function determines and caches the executable used for later network probes, a poisoned resolution could influence multiple subsequent subprocess calls.

Content

Scanner excerpt · scripts/diagnose.py (reported line 42)May include surrounding context.

python
if PING_BIN is None:
        for path in ["/sbin/ping", "/bin/ping", "/usr/bin/ping", "ping"]:
            try:
                subprocess.run([path, "-c", "1", "-W", "500", "127.0.0.1"],
                               capture_output=True, timeout=2)
                PING_BIN = path
                break

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 64)May include surrounding context.

python
cmd = [ping_bin, "-c", str(count), "-W", "2", host]

    try:
        result = subprocess.run(
            cmd, capture_output=True, text=True, timeout=20
        )
        output = result.stdout + result.stderr

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
71% confidence
Finding

The fallback entry 'traceroute' relies on PATH resolution, so an attacker who can influence the execution environment could cause a malicious binary earlier in PATH to be executed. Because the code treats broad exceptions as success and returns the candidate path, it may trust and later run an unintended executable.

Content

Scanner excerpt · scripts/diagnose.py (reported line 109)May include surrounding context.

python
def find_traceroute():
    for path in ["/usr/sbin/traceroute", "/sbin/traceroute", "/usr/bin/traceroute", "traceroute"]:
        try:
            subprocess.run([path, "--help"], capture_output=True, timeout=2)
            return path
        except FileNotFoundError:
            continue

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 126)May include surrounding context.

python
cmd = [tr_bin, "-m", str(max_hops), "-w", "2", "--", host]

    try:
        result = subprocess.run(
            cmd, capture_output=True, text=True, timeout=60
        )
        output = result.stdout

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 200)May include surrounding context.

python
# to find max working payload size.
        def probe(size):
            try:
                result = subprocess.run(
                    [ping_bin, "-c", "1", "-W", "2000", "-s", str(size), host],
                    capture_output=True, text=True, timeout=5
                )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 211)May include surrounding context.

python
# Linux: ping -M do sets DF bit; returns non-zero if packet too large
        def probe(size):
            try:
                result = subprocess.run(
                    [ping_bin, "-c", "1", "-W", "2", "-M", "do", "-s", str(size), host],
                    capture_output=True, text=True, timeout=5
                )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 257)May include surrounding context.

python
gateway = None
    try:
        if IS_MAC:
            r = subprocess.run(["route", "-n", "get", "default"], capture_output=True, text=True, timeout=5)
            m = re.search(r"gateway:\s+([\d.]+)", r.stdout)
            if m:
                gateway = m.group(1)

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
76% confidence
Finding

Invoking 'ip' without an absolute path causes the program to trust PATH lookup, which can be hijacked in a compromised or attacker-influenced environment. If the skill runs with elevated privileges or automation trust, a malicious replacement binary could execute arbitrary code.

Content

Scanner excerpt · scripts/diagnose.py (reported line 262)May include surrounding context.

python
if m:
                gateway = m.group(1)
        else:
            r = subprocess.run(["ip", "route", "show", "default"], capture_output=True, text=True, timeout=5)
            m = re.search(r"default\s+via\s+([\d.]+)", r.stdout)
            if m:
                gateway = m.group(1)

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 280)May include surrounding context.

python
script_dir = os.path.dirname(os.path.abspath(__file__))
    dns_script = os.path.join(script_dir, "dns_check.py")
    try:
        result = subprocess.run(
            [sys.executable, dns_script],
            capture_output=True, text=True, timeout=30
        )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/diagnose.py (reported line 300)May include surrounding context.

python
if quick:
        args.append("--quick")
    try:
        result = subprocess.run(args, capture_output=True, text=True, timeout=60)
        return json.loads(result.stdout)
    except Exception as e:
        return {"error": str(e)}

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/speedtest.py (reported line 35)May include surrounding context.

python
]
    start = time.monotonic()
    try:
        result = subprocess.run(
            cmd,
            capture_output=True,
            text=True,

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This markdown file explains that DNS queries are sent to multiple resolvers including Google and Cloudflare, which means user-selected domains and network metadata are transmitted to third parties. It also later describes downloading payloads from Cloudflare for speed testing, but the guide does not include any caution about privacy, external traffic generation, or that these tests contact outside services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code transmits queried domain names over the network to public DNS servers (8.8.8.8 and 1.1.1.1), which is a form of outbound data transmission. Although the module docstring describes DNS checking, there is no runtime print/log/confirmation warning before contacting external resolvers, so users may not realize these domains are being sent off-host when the script runs.

Content

No source excerpt is available for this finding.