Back to skill

Security audit

Siteaudit

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward website audit helper that makes disclosed network checks against user-provided sites and does not show hidden persistence, credential access, or destructive behavior.

Install only if you want a local Python helper for checking websites you own or are authorized to test. Do not point it at private/internal hosts or third-party systems without permission, and remember that audited servers can see the connection.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (11)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill performs network operations against arbitrary user-supplied domains, but the manifest does not declare any tool scope or permissions boundary. This creates an authorization and transparency gap: an agent may invoke outbound network behavior without explicit policy review, increasing the risk of SSRF-style misuse, unintended internal network access, or policy violations in restricted environments.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The module docstring says the tool is a comprehensive website audit covering "uptime + TLS + headers + DNS." In the implementation, the code only performs HTTP uptime checks, TLS certificate inspection, and HTTP security header grading; there is no DNS lookup, resolution analysis, or DNS record inspection anywhere in the file.

Content

No source excerpt is available for this finding.

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · scripts/siteaudit.py (reported line 7)May include surrounding context.

python
from datetime import datetime, timezone

def check_uptime(url, timeout=10):
    start = __import__('time').monotonic()
    try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · siteaudit.py (reported line 7)May include surrounding context.

python
from datetime import datetime, timezone

def check_uptime(url, timeout=10):
    start = __import__('time').monotonic()
    try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · scripts/siteaudit.py (reported line 11)May include surrounding context.

python
try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:
            ms = round((__import__('time').monotonic() - start) * 1000)
            return {"ok": True, "status": resp.status, "ms": ms}
    except urllib.error.HTTPError as e:
        ms = round((__import__('time').monotonic() - start) * 1000)

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · scripts/siteaudit.py (reported line 14)May include surrounding context.

python
try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:
            ms = round((__import__('time').monotonic() - start) * 1000)
            return {"ok": True, "status": resp.status, "ms": ms}
    except urllib.error.HTTPError as e:
        ms = round((__import__('time').monotonic() - start) * 1000)

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · siteaudit.py (reported line 11)May include surrounding context.

python
try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:
            ms = round((__import__('time').monotonic() - start) * 1000)
            return {"ok": True, "status": resp.status, "ms": ms}
    except urllib.error.HTTPError as e:
        ms = round((__import__('time').monotonic() - start) * 1000)

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · siteaudit.py (reported line 14)May include surrounding context.

python
try:
        req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "siteaudit/1.0"})
        with urllib.request.urlopen(req, timeout=timeout) as resp:
            ms = round((__import__('time').monotonic() - start) * 1000)
            return {"ok": True, "status": resp.status, "ms": ms}
    except urllib.error.HTTPError as e:
        ms = round((__import__('time').monotonic() - start) * 1000)

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest describes the skill as combining uptime, TLS certificate inspection, and security headers grading, but the module docstring says it performs 'uptime + TLS + headers + DNS'. No DNS-checking code exists elsewhere in the file, so the documented behavior does not match the implemented operations or the manifest's stated scope.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The top-level docstring explicitly advertises DNS as part of the comprehensive audit. However, the implementation only performs uptime checks, TLS inspection, and security header grading; there is no DNS resolution or DNS record analysis logic beyond ordinary hostname use for network connections.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This Python skill performs outbound HTTP/HTTPS and TLS/DNS-adjacent network connections to user-supplied targets in check_uptime, check_tls, and check_headers. Although the behavior is functionally expected for a site audit tool, this file provides no docstring, comment, prompt, or explicit user-facing warning near execution that running it will contact the specified sites and expose the user's IP/user agent to those services.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.