Back to skill

Security audit

agent-config-lint

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent agent-config lint helper, but users should be aware it runs an unpinned third-party npm CLI.

Install this only if you are comfortable running the @hyuga/tenken npm package locally. Prefer pinning an audited version or running it in a clean workspace without unnecessary secrets if supply-chain risk matters to you.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:12
Finding

Unpinned npm Package Is Downloaded and Executed Through npx

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 12-15 and 37-52
Vulnerability Type: Unpinned third-party dependency execution
Risk Level: Medium

The skill declares @hyuga/tenken without a version or integrity constraint:

yaml
install:
  - kind: node
    package: "@hyuga/tenken"
    bins: [tenken]

It then instructs users or agents to download and execute the package through npx:

markdown
## How to run

```bash
npx @hyuga/tenken

Scan a specific path:

bash
npx @hyuga/tenken path/to/skills

Machine-readable output, for when you need to act on individual findings:

bash
npx @hyuga/tenken --format json
text

### Technical Analysis

No version, lockfile, or package integrity hash constrains the dependency. Consequently, `npx @hyuga/tenken` can resolve and execute whichever package release the npm registry currently selects. The executable source is not included in the audited project, so its behavior cannot be independently verified from this artifact.

This creates a time-of-check/time-of-use supply-chain risk: the code executed by a future user may differ from the package code available when the skill was reviewed. A compromised publisher account, malicious future release, or compromised transitive dependency could introduce arbitrary behavior. npm lifecycle scripts may also execute during package installation unless explicitly disabled.

### Attack Path

1. An attacker compromises the npm publisher, release process, or relevant dependency chain for `@hyuga/tenken`.
2. The attacker publishes a malicious release that becomes the version selected by the unpinned package reference.
3. A user or agent follows the skill instructions and runs `npx @hyuga/tenken`.
4. `npx` retrieves the current package from the registry and executes its installation lifecycle or command-line code.
5. The malicious code runs with the privileges of the invoking user a
...[truncated 683 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin the package to a specific, independently reviewed version, for example:
    bash
    npx --ignore-scripts @hyuga/tenken@<audited-exact-version>
    
  2. Prefer installing through a committed lockfile that records exact transitive versions and registry integrity hashes.
  3. Disable npm lifecycle scripts where the package does not require them. If scripts are required, audit each script before execution.
  4. Verify the package source, publisher identity, release provenance, and transitive dependency tree before approving a version.
  5. Consider vendoring the reviewed executable source into the project or using a trusted internal package registry.
  6. Run the tool with least privilege in an isolated environment without unnecessary credentials, secrets, or write access.
  7. Add automated dependency monitoring and require a new security review before updating the pinned version.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (14)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [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 · SKILL.md (reported line 3)May include surrounding context.

md
---
name: agent-config-lint
description: Check agent config for things that break silently on someone else's machine. Use before publishing or committing a SKILL.md, AGENTS.md, CLAUDE.md or llms.txt, before publishing a skill to ClawHub, when a skill "works on my machine" but not for a teammate, when a skill fails to trigger, or when asked to review agent config. Catches references to files that do not exist, absolute paths under the author's home directory, undeclared CLI dependencies, a frontmatter name that does not match the skill's directory, and two skills whose descriptions are so similar the agent fires the wrong

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Agent config fails quietly. A `SKILL.md` points at a script that was renamed, an

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
Agent config fails quietly. A `SKILL.md` points at a script that was renamed, an

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
| | |
|---|---|
| a back-quoted path or markdown link that does not resolve | reference rot |
| `/Users/<name>/…`, `C:\Users\<name>\…` | will not resolve for anyone else | <!-- carry-ignore -->
| an external CLI the document never declares or installs | missing dependency |
| an unresolved `<FILL_ME>` / `REPLACE_ME` left in a shipped file | unfinished | <!-- carry-ignore -->
| frontmatter `name` that does not match the skill's directory | installs under a different identity |

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
| | |
|---|---|
| a back-quoted path or markdown link that does not resolve | reference rot |
| `/Users/<name>/…`, `C:\Users\<name>\…` | will not resolve for anyone else | <!-- carry-ignore -->
| an external CLI the document never declares or installs | missing dependency |
| an unresolved `<FILL_ME>` / `REPLACE_ME` left in a shipped file | unfinished | <!-- carry-ignore -->
| frontmatter `name` that does not match the skill's directory | installs under a different identity |

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
| | |
|---|---|
| a back-quoted path or markdown link that does not resolve | reference rot |
| `/Users/<name>/…`, `C:\Users\<name>\…` | will not resolve for anyone else | <!-- carry-ignore -->
| an external CLI the document never declares or installs | missing dependency |
| an unresolved `<FILL_ME>` / `REPLACE_ME` left in a shipped file | unfinished | <!-- carry-ignore -->
| frontmatter `name` that does not match the skill's directory | installs under a different identity |

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The description contains broad triggers like 'when asked to review agent config' and multiple common workflow situations, which can cause over-invocation or incorrect auto-selection by an agent. Mis-triggering can expose repository structure, invoke unnecessary tooling, or crowd out a more appropriate skill during sensitive tasks.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The 'When to use' list includes ambiguous conditions like a skill 'works on my machine' or 'the wrong skill fires,' which are broad enough to match many ordinary support requests. In agent ecosystems, imprecise triggers increase unintended invocation and can cause accidental execution of local tooling or disclosure of file paths during unrelated tasks.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

Each line is [engine] file:line message. Lines marked ! are warnings.

text
✗ .claude/skills/report/SKILL.md — 2 problems
    [skills-lint] .claude/skills/report/SKILL.md:1  name "Report_Skill" does not match its directory "report"
    [skills-lint] .claude/skills/report/SKILL.md:12 reference `scripts/build-report.py` does not exist

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

Each line is [engine] file:line message. Lines marked ! are warnings.

text
✗ .claude/skills/report/SKILL.md — 2 problems
    [skills-lint] .claude/skills/report/SKILL.md:1  name "Report_Skill" does not match its directory "report"
    [skills-lint] .claude/skills/report/SKILL.md:12 reference `scripts/build-report.py` does not exist

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

Each line is [engine] file:line message. Lines marked ! are warnings.

text
✗ .claude/skills/report/SKILL.md — 2 problems
    [skills-lint] .claude/skills/report/SKILL.md:1  name "Report_Skill" does not match its directory "report"
    [skills-lint] .claude/skills/report/SKILL.md:12 reference `scripts/build-report.py` does not exist