Back to skill

Security audit

Minduploadedcrab Skillguard

Security checks for vulnerabilities and agentic risk

Overview

This is a real security-scanner skill, but its scanner can cross the intended scan boundary and can be made to skip files, so users should review it before relying on it.

Treat this as a review-required scanner, not a definitive security gate. Run it only in a low-privilege or isolated environment, avoid scanning untrusted packages that contain symlinks unless you inspect them first, do not trust package-provided .skillguard-ignore exclusions, and manually review SKILL.md even when the tool reports PASS.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/skillguard.py:82
Finding

Out-of-Scope Symlink Targets Are Read During Scanning

Content
View full analysis
list: files = [] for root, dirs, filenames in os.walk(skill_path): dirs[:] = [d for d in dirs if d not in {"node_modules", ".git", "__pycache__", ".venv", "venv"}] for fname in filenames: files.append(Path(root) / fname) return files ``` ```python def scan_symlinks(files: list, skill_path: Path, result: ScanResult): """Detect symlinks that could point to sensitive files outside the skill directory.""" for f in files: if f.is_symlink(): rel = f.relative_to(skill_path) try: target = f.resolve() except (RuntimeError, OSError): result.add(Finding( severity=SEVERITY_HIGH, category="symlink", message=f"Broken or looping symlink: {rel}", file=str(rel), evidence=f"Raw target: {os.readlink(f)}", )) continue try: target.relative_to(skill_path) severity = SEVERITY_LOW except ValueError: severity = SEVERITY_CRITICAL msg = (f"Symlink escapes skill directory: {rel} -> {target}" if severity == SEVERITY_CRITICAL else f"Internal symlink: {rel} -> {target}") result.add(Finding( severity=severity, category="symlink", message=msg, file=str(rel), evidence=f"Target: {target}", )) ``` ```python for fpath in files: suffix = fpath.suffix.lower() if suffix not in TEXT_EXTENSIONS: continue ...[truncated 2787 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/skillguard.py:88
Finding

Untrusted Skill-Controlled Ignore File Can Suppress Security Scanning

Content
View full analysis
set: """Load .skillguard-ignore file if it exists. Returns set of relative paths to skip.""" ignore_file = skill_path / ".skillguard-ignore" ignored = set() if ignore_file.exists(): with open(ignore_file) as f: for line in f: line = line.strip() if line and not line.startswith("#"): ignored.add(line) return ignored ``` ```python files = get_skill_files(skill_path) result.file_count = len(files) ignored = load_ignorelist(skill_path) scan_hidden_files(files, skill_path, result) scan_symlinks(files, skill_path, result) scan_npm_package(skill_path, patterns, result) for fpath in files: suffix = fpath.suffix.lower() if suffix not in TEXT_EXTENSIONS: continue rel_path = str(fpath.relative_to(skill_path)) if rel_path in ignored: continue content = read_file_safe(fpath) ``` ### Technical Analysis The package being audited is untrusted, but it is allowed to provide `.skillguard-ignore` inside its own root. Any relative path listed in that file is skipped before its content is read or analyzed. This gives the subject of the security scan direct control over the scanner's coverage. A malicious package can place dangerous behavior in a source file and list that source file in `.skillguard-ignore`. The scanner may report the ignore file as a hidden file, but that medium-severity finding does not identify or analyze the omitted payload. Because risk scores are generated only from recorded findings, excluding malicious files can materially lower the score and lead to a misleading PASS or WARN verdict. This defeats the scanner's declared purpose of detecting mal ...[truncated 1403 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/skillguard.py:368
Finding

Markdown Files Bypass Non-Prompt Security Scanners

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (18)

YARA rule 'agent_skill_credential_exfiltration_webhook': AI agent skill credential harvesting followed by webhook or external exfiltration [agent_skills]

Critical
Category
YARA Match
Confidence
85% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · data/patterns.json (reported line 23)May include surrounding context.

json
w/openclaw.json",
    ".clawdbot/clawdbot.json",
    ".moltbot/moltbot.json",
    ".evm-wallets.json",
    ".env",
    ".ssh/",
    ".gnupg/",
    ".aws/credentials",
    ".config/solana/",
    "config.json",
    "credentials.json",
    "secrets.json",
    "private_key",
    "privateKey",
    "mnemonic",
    "seed_phrase",
    "api_key",
    "apiKey",
    "API_KEY",
    "OPENROUTER_API_KEY",
    "OPENAI_API_KEY",
    "ANTHROPIC_API_KEY",
    "ELEVENLABS_API_KEY",
    "BRAVE_API_KEY",
    "BLAND_API_KEY",
    "GITHUB_TOKEN",
    "DISCORD_TOKEN",
    "TELEGRAM_BOT_TOKEN",
    "SLACK_TOKEN",
    "DATABASE_URL",
    "SECRET_KEY",
    "ACCESS_TOKEN",
    "REFRESH_TOKEN",
    "botToken",
    "jwt",
    "JWT",
    "bearer",
    "solanaPrivateKey",
    "SOLANA_PRIVATE_KEY"
  ],
  "exfil_patterns": [
    "requests.post",
    "requests.put",
    "urllib.request.urlopen",
    "http.client.HTTPSConnection",
    "fetch(",
    "axios.post",
    "axios.put",
    "XMLHttpRequest",
    "WebSocket(",

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 3)May include surrounding context.

md
n, prompt injection, and permission overreach before installation. Run: python3 scripts/skillguard.py scan <skill-directory>"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 22)May include surrounding context.

md
n, prompt injection, and permission overreach before installation. Run: python3 scripts/skillguard.py scan <skill-directory>"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 25)May include surrounding context.

md
n, prompt injection, and permission overreach before installation. Run: python3 scripts/skillguard.py scan <skill-directory>"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 28)May include surrounding context.

md
n, prompt injection, and permission overreach before installation. Run: python3 scripts/skillguard.py scan <skill-directory>"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 31)May include surrounding context.

md
n, prompt injection, and permission overreach before installation. Run: python3 scripts/skillguard.py scan <skill-directory>"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · data/patterns.json (reported line 7)May include surrounding context.

json
".clawdbot/clawdbot.json",
    ".moltbot/moltbot.json",
    ".evm-wallets.json",
    ".env",
    ".ssh/",
    ".gnupg/",
    ".aws/credentials",

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/skillguard.py (reported line 46)May include surrounding context.

python
".clawdbot/clawdbot.json",
    ".moltbot/moltbot.json",
    ".evm-wallets.json",
    ".env",
    ".ssh/",
    ".gnupg/",
    ".aws/credentials",

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/skillguard.py (reported line 486)May include surrounding context.

python
".clawdbot/clawdbot.json",
    ".moltbot/moltbot.json",
    ".evm-wallets.json",
    ".env",
    ".ssh/",
    ".gnupg/",
    ".aws/credentials",

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · data/patterns.json (reported line 10)May include surrounding context.

json
".env",
    ".ssh/",
    ".gnupg/",
    ".aws/credentials",
    ".config/solana/",
    "config.json",
    "credentials.json",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · data/patterns.json (reported line 13)May include surrounding context.

json
".aws/credentials",
    ".config/solana/",
    "config.json",
    "credentials.json",
    "secrets.json",
    "private_key",
    "privateKey",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · data/patterns.json (reported line 14)May include surrounding context.

json
".config/solana/",
    "config.json",
    "credentials.json",
    "secrets.json",
    "private_key",
    "privateKey",
    "mnemonic",

Instruction Override

High
Category
Prompt Injection
Confidence
80% confidence
Finding

This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.

Content

Scanner excerpt · data/patterns.json (reported line 106)May include surrounding context.

json
"os.environ"
  ],
  "prompt_injection_markers": [
    "ignore previous instructions",
    "ignore all previous",
    "disregard above",
    "forget everything",

YARA rule 'agent_skill_prompt_injection_hidden_instructions': Prompt injection or hidden instructions embedded in AI agent skill text [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · data/patterns.json (reported line 106)May include surrounding context.

json
se": [
    "os.remove(",
    "os.unlink(",
    "shutil.rmtree(",
    "fs.unlinkSync",
    "fs.rmdirSync",
    "fs.rmSync",
    "os.rename(",
    "shutil.move(",
    "open(.*'w'",
    "open(.*'a'",
    "fs.writeFileSync",
    "fs.appendFileSync",
    "../",
    "..\\\\",
    "path.join.*\\.\\.",
    "os.path.expanduser",
    "Path.home()",
    "os.environ"
  ],
  "prompt_injection_markers": [
    "ignore previous instructions",
    "ignore all previous",
    "disregard above",
    "forget everything",
    "new instructions",
    "override",
    "system prompt",
    "you are now",
    "pretend you are",
    "act as if",
    "do not follow",
    "bypass",
    "jailbreak",
    "DAN mode",
    "developer mode",
    "ignore safety",
    "ignore restrictions",
    "execute the following",
    "run this command",
    "send to webhook",
    "transmit to",
    "upload to",
    "exfiltrate"
  ],
  "suspicious_domains": [
    "ngrok.io",
    "ngrok-free.app",
    "webhook.site",
    "requestbin.co

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
90% confidence
Finding

Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.

Content

Scanner excerpt · data/patterns.json (reported line 121)May include surrounding context.

json
"jailbreak",
    "DAN mode",
    "developer mode",
    "ignore safety",
    "ignore restrictions",
    "execute the following",
    "run this command",

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
90% confidence
Finding

Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.

Content

Scanner excerpt · data/patterns.json (reported line 122)May include surrounding context.

json
"DAN mode",
    "developer mode",
    "ignore safety",
    "ignore restrictions",
    "execute the following",
    "run this command",
    "send to webhook",

YARA rule 'offensive_tool_references': References to well-known offensive security tools [hacktools]

High
Category
YARA Match
Confidence
70% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · data/patterns.json (reported line 137)May include surrounding context.

json
"bypass",
    "jailbreak",
    "DAN mode",
    "developer mode",
    "ignore safety",
    "ignore restrictions",
    "execute the following",
    "run this command",
    "send to webhook",
    "transmit to",
    "upload to",
    "exfiltrate"
  ],
  "suspicious_domains": [
    "ngrok.io",
    "ngrok-free.app",
    "webhook.site",
    "requestbin.com",
    "pipedream.net",
    "hookbin.com",
    "burpcollaborator.net",
    "interact.sh",
    "oastify.com",
    "dnslog.cn",
    "ceye.io",
    "beeceptor.com",
    "requestcatcher.com",
    "mockbin.org",
    "paste.ee",
    "pastebin.com",
    "hastebin.com",
    "transfer.sh",
    "file.io",
    "0x0.st"
  ],
  "malicious_npm_packages": [
    "event-stream",
    "flatmap-stream",
    "ua-parser-js",
    "coa",
    "rc",
    "colors",
    "faker",
    "node-ipc",
    "peacenotwar"
  ],
  "suspicious_npm_scripts": [
    "preinstall",
    "postinstall",
    "preuninstall"
  ]
}

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.