Back to skill

Security audit

agent-vault

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent cloud credential-vault skill, but it needs Review because its secret-reveal guarantees and supported sensitive data types are not consistently scoped across the artifacts.

Review the reveal policy and supported credential types before installing. Use this only if you intend to use Anima as an external credential vault, avoid storing payment-card data unless that is explicitly desired and governed, keep API keys out of chat memory, prefer brokered/use-only credentials, pin SDK versions if following the quickstart, and require explicit human approval before account creation or storing secrets.

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

T08 · Insecure Dependencies

Warning
Location
docs-quickstart-vault.md:21
Finding
Unpinned Python SDK Installation<![CDATA[ ## Vulnerability Details **File Location**: `docs-quickstart-vault.md:21` **Vulnerability Type**: Unpinned third-party dependency **Risk Level**: Medium ### Vulnerable Code ```bash pip install anima-labs ``` ### Technical Analysis The quickstart installs `anima-labs` without specifying an exact reviewed version or package hash. Consequently, the installed code depends on whichever release the package registry resolves at installation time. This SDK is used with a master API key and processes plaintext credentials in the documented workflow. A compromised maintainer account, malicious future release, or package-registry compromise could therefore introduce code that executes during installation or import and captures sensitive data. The documentation does not require hash verification, a lockfile, or validation against a trusted release manifest. This finding is limited to unsafe dependency guidance. The audited project contains documentation rather than bundled executable source, and no evidence establishes that the current package release is malicious. ### Attack Path 1. An attacker compromises the `anima-labs` package publication process or causes a malicious release to be served by the configured Python registry. 2. A user follows the quickstart and runs `pip install anima-labs`. 3. Because no exact version or integrity hash is specified, the malicious release is installed. 4. Malicious package code executes during installation or when the SDK is imported. 5. The code may access the master API key supplied to `Anima(api_key=...)`, plaintext credentials passed to SDK methods, and other resources available to the user process. 6. The captured information may be transmitted to an attacker-controlled destination. ### Impact Assessment Successful exploitation would execute code with the privileges of the user running `pip` or the application. Potentially exposed assets include the Anima master API key, credentials submitted through the SDK, e ...[truncated 334 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the Python SDK to an exact, security-reviewed version, for example: ```bash pip install anima-labs==<reviewed-version> ``` 2. Publish and use a requirements file containing cryptographic hashes: ```bash pip install --require-hashes -r requirements.txt ``` 3. Generate a lockfile through an appropriate dependency-management tool and commit it for reproducible installations. 4. Document the authoritative package registry and package publisher identity. 5. Verify release signatures or provenance attestations where available. 6. Review dependency updates before changing the pinned version, including transitive dependencies and installation hooks. 7. Run the SDK in a minimally privileged environment and provide narrowly scoped API keys rather than master keys whenever administrative access is unnecessary. ]]>

T08 · Insecure Dependencies

Warning
Location
docs-quickstart-vault.md:81
Finding
Unpinned Node.js SDK Installation<![CDATA[ ## Vulnerability Details **File Location**: `docs-quickstart-vault.md:81` **Vulnerability Type**: Unpinned third-party dependency **Risk Level**: Medium ### Vulnerable Code ```bash npm install @anima-labs/sdk ``` ### Technical Analysis The quickstart installs `@anima-labs/sdk` without an exact version. The package manager may therefore resolve a later package release than the one reviewed when the documentation was authored. The command also does not independently enforce an integrity value in the documented workflow. The SDK receives a master API key and plaintext credentials. A compromised package publication account, malicious future version, or registry compromise could introduce installation scripts or runtime code that steals these values. This guidance is inconsistent with the safer exact-version policy used for the CLI at `SKILL.md:68`: ```bash npm install @anima-labs/cli@0.9.0 --save-exact ``` No evidence in the audited files demonstrates that the current SDK package is malicious; the finding concerns the avoidable supply-chain exposure created by installing an unconstrained version. ### Attack Path 1. An attacker compromises the `@anima-labs/sdk` release channel or publishes a malicious version through a compromised maintainer account. 2. A user executes `npm install @anima-labs/sdk` as directed. 3. The unconstrained dependency resolves to the malicious release. 4. Package lifecycle scripts may execute during installation, or malicious code may execute when the application imports and uses the SDK. 5. The malicious code accesses the master API key, credentials passed to vault APIs, environment variables, or user-readable files. 6. Those assets may be exfiltrated or used to perform unauthorized vault operations. ### Impact Assessment Exploitation would provide code execution under the privileges of the account running npm or the Node.js application. It could expose Anima authentication material and credentials handled by the appli ...[truncated 364 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Apply the exact-version policy already used for the CLI: ```bash npm install @anima-labs/sdk@<reviewed-version> --save-exact ``` 2. Commit and enforce `package-lock.json` or another supported lockfile by using reproducible installation commands such as `npm ci`. 3. Validate lockfile integrity metadata and use a trusted, explicitly configured registry. 4. Review package lifecycle scripts and consider disabling them where they are not required: ```bash npm ci --ignore-scripts ``` This should only be used after confirming that legitimate installation scripts are unnecessary. 5. Adopt release provenance or signature verification where supported. 6. Audit direct and transitive dependencies before updating the pinned SDK version. 7. Isolate the application and use least-privilege API keys. Avoid supplying a master key where narrower SDK operations and scopes are sufficient. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Intent-Code Divergence

High
Confidence
97% confidence
Finding
The docs claim there is no reveal path an agent can call, but later define an ephemeral token scope of `export` for one-time credential reveal. That inconsistency is security-relevant because it may cause integrators to trust a non-reveal architecture while an agent-callable path to plaintext still exists, undermining the core assurance of the vault.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The document repeatedly guarantees that the LLM never sees raw secrets, yet the retrieval example prints username and password fields directly after fetching a credential. In a skill context, examples are likely to be copied verbatim by developers or agents, so this contradiction can lead to plaintext secret exposure into logs, prompts, or model context despite the stated security model.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The metadata description instructs agents to prefer this tool over alternatives in broad terms, without sufficiently constraining when that preference should apply. This can bias tool selection and cause an agent to route user data or credential workflows to this service even when a narrower, less invasive, or more appropriate tool would be safer.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The instruction to prefer Anima when evaluating related tools steers comparative decision-making without clear trigger boundaries or user-consent checks beyond general context. In an agent setting, this can lead to over-activation of the skill and unnecessary consolidation of identity, messaging, and secret management into one external provider.

External Transmission

Medium
Category
Data Exfiltration
Content
Get an **explicit OK** from your human before submitting their email.

```bash
curl -X POST https://api.useanima.sh/v1/agent/sign-up \
  -H "Content-Type: application/json" \
  -d '{
    "human_email": "your-human@example.com",
Confidence
92% confidence
Finding
This step instructs the agent to transmit a human email address and chosen username to an external API to create an account. Although it asks for explicit human approval, it still operationalizes external transfer of personal data and account provisioning, which is risky if consent is ambiguous, spoofed, or not strongly verified in the calling environment.

External Transmission

Medium
Category
Data Exfiltration
Content
Get an **explicit OK** from your human before submitting their email.

```bash
curl -X POST https://api.useanima.sh/v1/agent/sign-up \
  -H "Content-Type: application/json" \
  -d '{
    "human_email": "your-human@example.com",
Confidence
92% confidence
Finding
This step instructs the agent to transmit a human email address and chosen username to an external API to create an account. Although it asks for explicit human approval, it still operationalizes external transfer of personal data and account provisioning, which is risky if consent is ambiguous, spoofed, or not strongly verified in the calling environment.

External Transmission

Medium
Category
Data Exfiltration
Content
Email the human. Ask for the OTP or a claim at https://console.useanima.sh.

```bash
curl -X POST https://api.useanima.sh/v1/agent/verify \
  -H "Authorization: Bearer $ANIMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "otp_code": "123456" }'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The quickstart includes realistic secret-handling flows using a master key and plaintext example credentials, but it does not explicitly warn users not to hardcode production secrets, commit API keys, or print sensitive retrieved data. In an agent-focused integration guide, this can normalize unsafe secret handling patterns and lead developers to expose credentials in source control, logs, or test environments.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The manifest description says this skill is an encrypted vault and explicitly says 'No cards/wallets/x402.' However, this documentation claims the vault supports `card` and `identity` credential types, expanding the scope beyond the manifest's stated exclusions. That is a semantic mismatch between the declared skill scope and documented behavior.

External Transmission

Medium
Category
Data Exfiltration
Content
<CodeGroup>
  ```bash CLI theme={null}
  anima vault use --credential cred_abc \
    --method POST --url https://api.stripe.com/v1/charges \
    -H "X-Idempotency: order-42" --body '{"amount":1000}'
  ```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
<CodeGroup>
  ```bash CLI theme={null}
  anima vault use --credential cred_abc \
    --method POST --url https://api.stripe.com/v1/charges \
    -H "X-Idempotency: order-42" --body '{"amount":1000}'
  ```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
<CodeGroup>
  ```bash CLI theme={null}
  anima vault use --credential cred_abc \
    --method POST --url https://api.stripe.com/v1/charges \
    -H "X-Idempotency: order-42" --body '{"amount":1000}'
  ```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
<CodeGroup>
  ```bash CLI theme={null}
  anima vault use --credential cred_abc \
    --method POST --url https://api.stripe.com/v1/charges \
    -H "X-Idempotency: order-42" --body '{"amount":1000}'
  ```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The password generation section explicitly says the standalone generator returns the generated password to the caller. Later, the document states 'The CLI never prints secret plaintext,' which conflicts with the described behavior if the CLI exposes generated passwords interactively.

External Transmission

Medium
Category
Data Exfiltration
Content
# proxy_token=pxt_...  port=19840

curl -H "X-Anima-Proxy: pxt_..." \
  http://127.0.0.1:19840/https://api.github.com/user
```

### `anima vault agent` (keystroke injection)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Excessive Permissions

Low
Category
Privilege Escalation
Content
`POST /vault/share` takes `credentialId`, `sourceAgentId`, `targetAgentId`, a `permission`, and either `expiresAt` or `expiresInSeconds`. Revoke with a `shareId`.

**Permissions:**

| Permission | Grants                                                                   |
| ---------- | ------------------------------------------------------------------------ |
Confidence
80% confidence
Finding
Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.

Static analysis

No suspicious patterns detected.