Back to skill

Security audit

Skill Security Vet

Security checks for vulnerabilities and agentic risk

Overview

The skill is a security scanner, but it includes under-disclosed full-computer scanning and automatic quarantine/removal behavior that is too broad for a skill-vetting tool.

Install only after reviewing the code and avoiding --auto, config --auto-remove, and local/full scan modes unless you are comfortable with broad filesystem reads and possible quarantine/removal behavior. Do not provide a VirusTotal API key until storage and data-sharing expectations are clarified.

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 (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
vet.ts:11
Finding

Undocumented Whole-System File Scanning Exceeds Least-Privilege Boundaries

Content
View full analysis
{ const results: ScanResult[] = [] const scannedFiles = new Set() const maxFiles = 10000 const scanableExtensions = [".js", ".ts", ".tsx", ".jsx", ".bat", ".cmd", ".ps1", ".vbs", ".py", ".rb", ".sh", ".bash"] const excludeSet = new Set([ "node_modules", ".git", "Windows", "Program Files", "Program Files (x86)", "AppData/Local/Temp", "AppData/Local/Microsoft/Windows", "$Recycle.Bin", "System Volume Information", ".cache", ".npm", ".yarn" ]) async function scanDir(dirPath: string, depth: number = 0) { if (depth > 5 || results.filter(r => r.status === "danger").length >= 10) return if (scannedFiles.size >= maxFiles) return try { const entries = await readdirAsync(dirPath, { withFileTypes: true }) for (const entry of entries) { if (scannedFiles.size >= maxFiles) break if (excludeSet.has(entry.name)) continue const fullPath = join(dirPath, entry.name) if (entry.isDirectory()) { await scanDir(fullPath, depth + 1) } else if (entry.isFile()) { const ext = extname(entry.name).toLowerCase() if (SUSPICIOUS_EXTENSIONS.includes(ext)) { try { const content = await readFileAsync(fullPath, "utf-8") const issues = await scanFileContent(fullPath, content) if (issues.length > 0) { const highCount = issues.filter(i => i.severity === "high").length const score = Math.max(0, 100 - highCount * 30) results.push({ name: entry.name, path: fullPat ...[truncated 2362 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
vet.ts:44
Finding

Regex-Based Detection Can Automatically Delete or Quarantine Benign Files

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
startup-scan.ts:51
Finding

Startup Scanner Defaults to Automatic Recursive Skill Quarantine

Content
View full analysis
{ try { mkdirSync(QUARANTINE_DIR, { recursive: true }) const quarantinePath = join(QUARANTINE_DIR, `${skillName}_${Date.now()}`) cpSync(skillPath, quarantinePath, { recursive: true }) rmSync(skillPath, { recursive: true, force: true }) return true } catch { return false } } ``` ```ts if (result.status === "danger" && autoAction && config.autoQuarantine) { const skillPath = join(SKILL_DIR, skill) const success = await quarantineSkill(skill, skillPath) if (success) { finding.action = "quarantined" } } ``` ### Technical Analysis When configuration cannot be loaded, the scanner d ...[truncated 2204 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
vet.ts:7
Finding

VirusTotal API Key Is Designed to Be Stored in Plaintext Configuration

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This second TP4 finding reinforces that the skill appears to possess undeclared deletion, quarantine, copy/move, and local configuration read/write capabilities while claiming a narrower auditing role. Such hidden file-management behavior can directly alter or remove installed skills and local data, creating both integrity and availability risk in a context where users expect only scanning.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

This second TP4 finding reinforces that the skill appears to possess undeclared deletion, quarantine, copy/move, and local configuration read/write capabilities while claiming a narrower auditing role. Such hidden file-management behavior can directly alter or remove installed skills and local data, creating both integrity and availability risk in a context where users expect only scanning.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 31)May include surrounding context.

md
- `eval()`, `new Function()` - 動態程式碼執行
- `child_process.exec()` - 系統命令執行
- `process.exit()` - 強制終止進程
- 敏感路徑存取 (`/etc/passwd`, `~/.ssh/`, etc.)

### ☁️ VirusTotal 檢測
- 70+ 防毒引擎掃描結果

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

A hard-coded allowlist causes selected skills, including security-related and self-repair tools, to bypass scanning entirely. In a security-audit context this is especially dangerous because it creates an intentional blind spot that an attacker can exploit by naming a malicious skill after an exempted entry or hiding malicious logic inside a trusted package.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script automatically copies a flagged skill to quarantine and then deletes the original directory with rmSync(..., force: true) during startup. For a tool described as a security review/integration skill, destructive remediation without explicit consent exceeds expected behavior and creates a high-risk integrity/availability issue if the scanner misclassifies a skill or is abused.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The quarantine routine deletes skill directories automatically without an explicit warning or confirmation immediately before removal. In startup automation, this can cause silent loss of user-installed code and creates an unsafe trust boundary where imperfect pattern matching can trigger destructive actions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill is described as a security review tool for agent skills, but the code defines host-wide drive targets and supports local/full-system scanning. This creates capability far beyond the stated purpose and increases the blast radius from auditing a skill directory to enumerating the user's computer.

Content

No source excerpt is available for this finding.

YARA rule 'keylogger_indicators': Keylogger functionality in scripts or source code [malware]

High
Category
YARA Match
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · startup-scan.ts (reported line 59)May include surrounding context.

ts
{ pattern: /child_process\.exec\s*\(/g, type: "系統命令執行" },
  { pattern: /child_process\.spawn\s*\(/g, type: "子進程創建" },
  { pattern: /process\.exit\s*\(/g, type: "強制進程終止" },
  { pattern: /rm\s+-rf\s+\//g, type: "危險刪除命令" },
  { pattern: /decodeURIComponent.*password|decodeURIComponent.*token/g, type: "密碼竊取模式" },
  { pattern: /SetClipboardData|GetAsyncKeyState|keylogger/i, type: "鍵盤側錄模式" },
  { pattern: /socket\.connect.*22|socket\.connect.*3389/g, type: "遠程連接攻擊" },
  { pattern: /WebBrowser\.Navigate|Shell\.Exec|WScript\.Shell/i, type: "惡意腳本模式" },
]

const MEDIUM_RISK_PATTERNS = [
  { pattern: /writeFile.*sync|writeFileSync/g, type: "檔案寫入操作" },
  { pattern: /JSON\.parse.*fetch/g, type: "解析外部 JSON" },
  { pattern: /chmod\s+\d{3,4}/g, type: "修改檔案權限" },
  { pattern: /sudo\s+/g, type: "使用系統管理員權限" },
  { pattern: /curl.*\|.*sh/g, type: "管道下載執�

YARA rule 'keylogger_indicators': Keylogger functionality in scripts or source code [malware]

High
Category
YARA Match
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · vet.ts (reported line 57)May include surrounding context.

ts
{ pattern: /child_process\.exec\s*\(/g, type: "系統命令執行" },
  { pattern: /child_process\.spawn\s*\(/g, type: "子進程創建" },
  { pattern: /process\.exit\s*\(/g, type: "強制進程終止" },
  { pattern: /rm\s+-rf\s+\//g, type: "危險刪除命令" },
  { pattern: /decodeURIComponent.*password|decodeURIComponent.*token/g, type: "密碼竊取模式" },
  { pattern: /SetClipboardData|GetAsyncKeyState|keylogger/i, type: "鍵盤側錄模式" },
  { pattern: /socket\.connect.*22|socket\.connect.*3389/g, type: "遠程連接攻擊" },
  { pattern: /WebBrowser\.Navigate|Shell\.Exec|WScript\.Shell/i, type: "惡意腳本模式" },
]

const MEDIUM_RISK_PATTERNS = [
  { pattern: /writeFile.*sync|writeFileSync/g, type: "檔案寫入操作" },
  { pattern: /JSON\.parse.*fetch/g, type: "解析外部 JSON" },
  { pattern: /chmod\s+\d{3,4}/g, type: "修改檔案權限" },
  { pattern: /sudo\s+/g, type: "使用系統管理員權限" },
  { pattern: /curl.*\|.*sh/g, type: "管道下載執�

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The code includes quarantine and deletion helpers that copy or remove files/directories, which exceeds a read-only vetting/audit function. In a security-review skill context, destructive filesystem actions are dangerous because false positives or misuse can delete user data or installed skills.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

When a scanned skill is marked dangerous, the code can automatically quarantine or remove the entire skill path based on configuration or auto flags. This grants unjustified destructive authority to a scanner and can destroy data or break environments on inaccurate detections.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Automatic handling of 'dangerous' skills occurs without an interactive confirmation at the point of action. Because the classification is regex-based and prone to false positives, the lack of confirmation can lead to unintended deletion or movement of legitimate code.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
100% confidence
Finding

In local/full scan mode, the tool can automatically quarantine or delete files anywhere on the computer without per-file confirmation. In context, this is especially dangerous because a skill-security reviewer should not have host-remediation powers, and a misclassification could impact arbitrary user or system files.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises capabilities that imply shell execution and network access, but the manifest does not declare any tool scope such as permissions or allowed-tools. This creates an authorization and review gap: users cannot accurately judge what the skill may invoke, and a runtime may grant broader access than the documentation suggests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill promotes VirusTotal scanning but does not clearly warn users that code, hashes, or related skill artifacts may be sent to a third-party service. In a security-review context, this is particularly sensitive because uploaded material may contain proprietary code, internal indicators, or confidential metadata.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill's natural-language strings and issue descriptions are presented in Traditional Chinese throughout the file, including banners, status messages, and risk labels. There is no indication that the language is configurable or that the skill is region-specific, which can violate a language/locale policy requiring user choice.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The stated purpose explicitly mentions integrating local scanning with VirusTotal cloud intelligence. In this file, scanning is performed solely by local regex-based inspection of source files, and although a VirusTotal API key exists in config, there is no network call or VT lookup here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill uses Chinese-language labels and descriptions throughout its user-facing strings and issue types, without offering a language choice or documenting a justified locale restriction. This can violate language/locale policy because the skill implicitly forces one language on all users.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

This function sends a file hash to the VirusTotal API, which is a network transmission of data derived from local files. The file contains no visible user-facing disclosure near this operation explaining that external scanning may share file-related information with a third party.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The local scan routine recursively traverses directories starting from system drives, collecting and reading files across the host. For a skill-vetting tool this is over-privileged behavior, exposing unrelated user and system data and enabling broad surveillance or unintended access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest description and the full markdown instructions are presented in Traditional Chinese, which effectively imposes a specific language on users. Under the policy, language constraints should either be optional, user-selectable, or explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The API key setup instructions tell users to provide a VirusTotal credential but do not explain where the key is stored, whether it is encrypted, who can read it, or how to rotate/remove it. That omission can lead to accidental credential exposure, especially in tools that write local config files or logs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.