Back to skill

Security audit

whetstone

Security checks for vulnerabilities and agentic risk

Overview

This skill provides scoped software-change review guidance and an optional local scanner, with no evidence of hidden access or harmful behavior.

Run the optional scanner in the intended repository. Use --staged or --no-untracked to limit included files. Its results are heuristic review cues, not proof that a change is safe.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

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 · scripts/change_scan.py (reported line 277)May include surrounding context.

python
}
BUILD_RE = re.compile(
    r"(^|/)(makefile|justfile|cmakelists\.txt|directory\.build\.(props|targets)|global\.json|nuget\.config|"
    r"\.npmrc|\.yarnrc(\.yml)?|pip\.conf|tsconfig[^/]*\.json|\.babelrc|"
    r"(vite|webpack|rollup|esbuild|tsup|babel)\.config\.[cm]?[jt]s)$"
)
LINT_CONFIG_RE = re.compile(

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, shell.

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.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/data-and-privacy.md (reported line 20)May include surrounding context.

md
A direct rename can be appropriate in an isolated database with no old consumers. Choose based on deployment and recovery constraints, not a universal migration rule.

Review generated SQL for drops disguised as renames, table rewrites and locks. Check the database version's lock and transaction behavior. In PostgreSQL, a concurrent index build cannot run inside a transaction block and can leave an invalid index after failure; a constraint's `NOT VALID` support depends on its type. Do not copy an online-migration recipe without checking those limits.

## Preserve integrity and recovery

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/security.md (reported line 28)May include surrounding context.

md
For sessions, preserve secure cookie settings, CSRF protection, session renewal at login/privilege changes and server-side expiry/revocation. A signed cookie can still expose its contents. Keep password policy and hashing parameters aligned with the project's current security requirements and the linked NIST/OWASP guidance rather than copying old defaults.

Use established cryptography and framework protections. Do not add blanket security headers or replace an authentication system without checking affected integrations. Preserve existing access until the replacement has been verified within the authorized change.

## Verify the boundary

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/change_scan.py (reported line 173)May include surrounding context.

python
def _git(repo: str, *args: str) -> str:
    try:
        result = subprocess.run(
            ["git", "-C", repo, *args],
            check=False,
            capture_output=True,

Static analysis

No suspicious patterns detected.