Back to skill

Security audit

nimble-decision

Security checks for vulnerabilities and agentic risk

Overview

The skill fits its advertised purpose, but logging defects can retain sensitive text and sometimes ignore the no-logging option.

Review the logging defects before using sensitive text. Disable audit logging with NIMBLE_NO_LOG=1 or an empty logFile; --no-log alone does not cover evaluations. Keep the endpoint local or choose a trusted remote server. The publisher should remove raw error bodies from logs and honor the opt-out during evaluations.

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

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

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.

Evaluation logging ignores the documented --no-log option.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

runEvalSuite calls logCall with disabled=false, so evaluations persist metadata even when the invocation specifies --no-log. This violates an explicit privacy control, although the recorded information is limited to evaluation metadata and logging can still be disabled through NIMBLE_NO_LOG=1 or an empty logFile.

Content

No source excerpt is available for this finding.

Raw API error logging undermines the documented guarantee that logs never store state or answers.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

For unsuccessful API responses, the code persists the first 200 characters of the raw response body, which can contain state or answers echoed by the server. This bypasses the stated content-free logging guarantee and could leave sensitive classification input in persistent logs; the local default endpoint reduces exposure but does not prevent accidental server echoes or risks from a configured remote endpoint.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
nimble.mjs:237