Back to skill

Security audit

Security Sentinel Ultimate

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local security-scanner skill, but its Markdown reports can be influenced by scanned files and its results may overstate scan completeness.

Install only if you treat this as a heuristic helper, not a definitive security gate. Run it only on directories you intentionally choose, and treat the Markdown report as untrusted evidence because scanned filenames or code strings may affect how the report appears.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T01 · Skill Instruction Hijacking

Error
Location
scanner.py:468
Finding

Unescaped Attacker-Controlled Data in Agent-Facing Markdown Report

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scanner.py:181
Finding

Dangerous and Network Calls Can Bypass Detection Through Import Aliases

Content
View full analysis
= 2 and (chain[0], chain[1]) in DANGEROUS_CALLS: sev = ( "red" if chain[0] in RED_MODULES and chain[1] in RED_ATTRS else "yellow" ) self.dangerous_calls.append( ( self._line(node), f"{'.'.join(chain[:2])}({', '.join(self._arg_summary(node))})", sev, ) ) break if len(chain) >= 2 and (chain[0], chain[1]) in NETWORK_CALLS: self.network_calls.append( ( self._line(node), f"{'.'.join(chain[:2])}({', '.join(self._arg_summary(node))})", "yellow", ) ) break # Check for requests. style if len(chain) >= 2: pair = (chain[0], chain[1]) if pair in DANGEROUS_CALLS and not self.dangerous_calls: sev = ( "red" if chain[0] in RED_MODULES and chain[1] in RED_ATTRS else "yellow" ) self.dangerous_calls.append( (self._lin ...[truncated 2650 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scanner.py:355
Finding

Unparseable Python Files Are Silently Reported as Clean

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
n_skill` tool accepts a `path` argument pointing to a skill directory. It runs `scanner.py` against all `.py` files in that directory tree and returns a Markdow

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill exposes capabilities that can read files, access the network, and invoke a shell via python3 {{SKILL_DIR}}/scanner.py "{{path}}", but the manifest does not declare any scope restrictions such as permissions or allowed-tools. This weakens least-privilege controls and makes the skill harder to sandbox or review safely, especially because the provided path is user-controlled and the scanner is described as recursively analyzing directories.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scanner.py:216