Back to skill

Security audit

Code QC

Security checks for vulnerabilities and agentic risk

Overview

This code-quality audit skill is useful, but it can execute project code and unpinned external tools during audits without clear sandboxing or approval boundaries.

Install only if you will run it on trusted repositories or inside a disposable, network-restricted environment with no secrets. Treat test, import, build, smoke-test, npx, pip install, and --fix steps as active code execution or mutation, and require an explicit review before allowing those steps.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/import_check.py:179
Finding

Audited Python Modules Execute In-Process Without Isolation

Content
View full analysis
Iterator[tuple[str, bool]]: """Yield (module_name, is_pkg) for all modules in a package.""" try: pkg = importlib.import_module(package_name) except ImportError as e: logger.error(f"Cannot import base package {package_name}: {e}") return ``` ### Technical Analysis `importlib.import_module()` does not merely validate import declarations. It executes all module-level Python code, including package initializers, decorators, registration hooks, and other import-time behavior. The checker imports the audited package and every discovered submodule directly inside the auditor process. It applies no process isolation, filesystem restriction, network restriction, environment-variable filtering, timeout, or privilege reduction. Exception handling only catches failures after module code has already executed and does not prevent side effects. Consequently, an untrusted repository can use ordinary import-time code to execute arb ...[truncated 1648 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
references/typescript-profile.md:34
Finding

Unpinned Registry Packages May Be Downloaded and Executed During Audits

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (44)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

This is a clear description-behavior mismatch. The code chunk implements a specific documentation linting tool, not a comprehensive code quality audit system. Its primary purpose is to detect missing docstrings in Python modules/classes/functions using AST traversal. While docstring checking is loosely related to documentation quality, it represents only one small subset of the declared QC scope. The code does not inspect tests, imports, typing, static analysis results, or smoke tests; it does not support TypeScript or GDScript; it does not produce PASS/WARN/FAIL verdicts; and it does not compare results over time. No concerning undeclared sensitive capability is present, but the declared purpose materially overstates and misrepresents the actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The code chunk does only one limited task: checking whether Python package modules can be imported. While import checking is one component mentioned in the description, the declared purpose presents this skill as a comprehensive multi-language QC/audit tool with reporting across several categories and temporal comparison support. None of those broader audit capabilities appear in this code. The primary purpose of the supplied code is materially narrower than the declared description, so this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description describes a broad, structured code quality auditing tool for multiple languages and multiple QC dimensions. The supplied code only checks Python files for syntax errors using py_compile. While syntax checking could be one small component of a QC workflow, this implementation lacks nearly all of the claimed functionality and has a materially narrower primary purpose. There is no evidence of test execution, import validation, type checking, static analysis, smoke testing, documentation checks, multi-language support, or longitudinal comparison features. Therefore the description substantially overstates the behavior, making this a clear mismatch.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill describes file-reading and project-audit behavior but does not declare any explicit tool scope or permissions boundaries. In an agent environment, that increases the risk of over-broad file access and makes it harder to constrain what parts of a repository or host filesystem the skill may inspect.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation description uses broad phrases like QC, audit, review, or check code quality, which can cause the skill to trigger in situations the user did not intend. Because this skill includes code execution, file reads, and possible write behaviors, accidental activation expands the chance of unreviewed actions on sensitive repositories.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill is presented as an audit tool but includes mutation behaviors such as autofixing code and writing baseline/report files. That scope expansion is dangerous because users may invoke a seemingly read-only review skill and unknowingly allow source changes or filesystem writes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill documents automatic fixes and baseline/report file writes without a clear upfront warning that project files may be modified. In practice, that can lead to integrity issues, unexpected diffs, or accidental persistence in repositories where the user expected analysis only.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

Invoking npx vitest without pinning a specific version makes execution dependent on the local or remotely resolved package version at runtime. This creates a supply-chain risk where behavior can change unexpectedly or a compromised package version could be executed during QC.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Using npx eslint without a pinned version allows execution of whatever version is locally installed or fetched at runtime. That introduces nondeterminism and a supply-chain execution path in a skill that may run automatically against arbitrary projects.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Auto-fix mode rewrites source files as part of a skill whose primary purpose is QC review. This is dangerous because it changes repository state, may introduce unintended modifications, and could be abused if triggered in contexts where users expected a non-destructive audit.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The fix-mode command npx eslint . --fix combines unpinned dependency resolution with source-code rewriting. If the resolved package version is altered or malicious, the skill could both execute unexpected code and modify repository contents.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
85% confidence
Finding

Running npx tsc --noEmit without version pinning exposes the audit flow to dependency-resolution drift and possible execution of an untrusted compiler version. Even without writing output, this still executes code from the JavaScript toolchain in the target environment.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The smoke-test phase instructs the agent to generate and execute project-specific code against application logic. In the context of auditing arbitrary repositories, dynamic execution materially increases risk because imports, constructors, and method calls can trigger untrusted code paths, side effects, network access, or destructive operations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The profile instructs users to run npx eslint --version, which can cause npx to fetch and execute an unpinned package from the registry when ESLint is not already installed locally. In a QC/audit skill, this is risky because the skill is likely to be run against arbitrary repositories and environments, increasing the chance of unintended network access or execution of a substituted package version.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The profile instructs use of npx nx without pinning a version, which can resolve and execute whatever version is available from the project or registry at runtime. In a QC skill, this creates a supply-chain execution risk because the skill may run unreviewed tooling during analysis rather than using a fixed, trusted version.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

Using npx lerna without an exact version allows runtime resolution of an arbitrary package version, potentially fetching and executing code from the registry. Because this skill is meant for quality control, not package acquisition, the command expands the trust boundary and introduces supply-chain risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The unpinned npx nx command may execute a version selected at runtime, which can differ across environments or be sourced from the network. This is risky in an agent skill because simply auditing a codebase can trigger execution of untrusted tooling.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Another unpinned npx nx invocation appears in the profile and carries the same supply-chain and arbitrary-tooling risk. In monorepo QC, affected-target commands may also traverse large parts of the repository, increasing the blast radius of any malicious script or compromised package.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

npx turbo run lint test is unpinned and may download or execute an unexpected turbo version at runtime. This creates reproducibility and supply-chain concerns, especially because the command fans out across packages and can trigger arbitrary package scripts.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

npx vitest without version pinning can execute whatever version resolves at runtime, including one fetched from the network. In an auditing profile this is unsafe because test runners execute project code, so the skill can be induced to run attacker-controlled code paths during review.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The unpinned npx jest command introduces the same runtime package resolution risk as other npx usages. Combined with the fact that Jest executes repository code and setup hooks, this can convert a passive QC task into arbitrary code execution.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

npx vitest --coverage is unpinned and executes tests plus coverage instrumentation, increasing both dependency execution and project code execution risk. The coverage step does not reduce the underlying trust issue and may further broaden code paths executed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

npx jest --coverage is another unpinned command that may fetch and run an arbitrary tool version, while also executing repository tests. In hostile or unknown repositories, this creates meaningful code-execution and supply-chain exposure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The profile recommends npx eslint without version pinning, allowing the linter package and plugins to be resolved dynamically. ESLint loads project configuration, plugins, and parsers, so running it on an untrusted repository can execute attacker-controlled JavaScript.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

This fallback npx eslint invocation is also unpinned and may pull packages from the registry at runtime. Because it explicitly loads parser and plugin packages, it widens the supply-chain surface even when the repository has no ESLint config.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.