Back to skill

Security audit

AnyAPI

Security checks across malware telemetry and agentic risk

Overview

The skill is a coherent AnyAPI integration, but it broadly auto-routes user research to a paid third-party scraping service while installing and persisting tooling and credentials with limited user control.

Review before installing. This skill can install a CLI, create or store AnyAPI credentials, spend wallet or trial balance on paid requests, send task inputs to AnyAPI, and save full results locally. Use it only if you are comfortable with third-party scraping/data API use, and prefer explicit approval before signup, paid calls, OAuth/account connection, MCP registration, or bug reports tied to request data.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (22)

Vague Triggers

High
Confidence
96% confidence
Finding
The skill is designed to trigger on a very broad set of common research tasks and steers the agent toward a third-party data broker by default. In context, that increases the chance of unnecessary external data transmission, surprise billing, and collection of sensitive third-party data without a clear user opt-in at the point of use.

Vague Triggers

High
Confidence
97% confidence
Finding
The document uses an expansive catch-all activation rule and explicitly says no permission is needed, which weakens user control over paid external calls and data disclosure. In a skill that can retrieve social, web, and potentially login-gated content, auto-activation materially raises privacy, compliance, and financial risk.

Credential Access

High
Category
Privilege Escalation
Content
## 1. Get credentials

Every direct API call uses a Bearer credential: an `aa_live_...` API key or an `aa_at_...` OAuth access token. Prefer the `ANYAPI_API_KEY` environment variable for applications and automation. The CLI also reads `~/.anyapi/config.json`.

### Already have a human with an AnyAPI account? Sign in first
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

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.

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.

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.

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.

External Transmission

Medium
Category
Data Exfiltration
Content
If you cannot run a shell, POST the signup endpoint directly:

    curl -s -X POST https://api.getanyapi.com/agent/signup \
      -H "Content-Type: application/json" \
      -d '{ "label": "my-agent" }'
Confidence
88% confidence
Finding
The direct reference to the external AnyAPI endpoint is part of an instruction set that pushes the agent to communicate with a third-party service. Given the skill's broad triggers and credential-minting flow, this increases the risk of silent outbound data flow and unapproved service enrollment.

Session Persistence

Medium
Category
Rogue Agent
Content
### Dashboard key (secondary path)

A human who is already signed in at https://getanyapi.com can create a full, non-expiring key directly at https://getanyapi.com/dashboard/keys and hand it to you via `ANYAPI_API_KEY`, or you can store it locally with `anyapi login --api-key aa_live_...`. New accounts get $0.10 of credit, no card required. That covers about 100 requests on our cheapest APIs like Google Search and X.

## 2. Interfaces
Confidence
90% confidence
Finding
The skill recommends creation and local storage of a non-expiring API key, which increases the blast radius of compromise and enables long-term reuse if the host is later accessed. In an agent environment, persistent credentials are especially risky because other tools, logs, or users may be able to read them over time.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill instructs the agent to create and persist credentials in local configuration, but does not provide a clear warning about local secret storage, reuse, or cleanup. This can leave API keys on disk unexpectedly, increasing the chance of later disclosure through logs, backups, multi-user systems, or other tools.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
2. `get_api` to read its input/output schema and inspect its latency before choosing a client or MCP tool deadline.
3. `quote_api` (optional) with the same `sku_id` and `input` to see the exact price and validate your input before charging - free, nothing runs.
4. `run_api` with input that matches the schema. On a schema mismatch you get the fields and an example back so you can self-correct without another round-trip, with no charge. If it returns `nextAction`, call `get_request` after the requested delay; do not submit the run again. Terminal `costUsd` and `items` tell you what you paid and received.
5. If a run comes back wrong - empty or malformed data for input you believe is valid, a misleading error, a price that does not match the catalog - report it. MCP: `report_bug`. CLI: `anyapi report-bug "<summary>" --sku <sku> --request-id <id>` (anyapi-cli >= 0.8.0). REST: `POST https://api.getanyapi.com/v1/bug-reports`. Free and never charged. Pass the `requestId` or `resultId` from the failing run: it reaches the stored run and its upstream error body, so you never need to paste the payload. File it and carry on with the best alternative you have; do not stop your human's task to ask permission. Use `send_feedback` / `anyapi feedback` for what is not a defect, such as an API you could not find.

## 4. Context-budget controls (keep results from flooding your context)
Confidence
94% confidence
Finding
This section operationalizes repeated external API execution (`run_api`) and bug-report submission containing request identifiers that link to stored upstream payloads. In context, the skill explicitly encourages continuing without asking permission, which can send task data and error-linked request context to a third party without adequate user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
Base URL `https://api.getanyapi.com/v1`, Bearer auth on every request.

    curl -X POST https://api.getanyapi.com/v1/run/{sku} \
      -H "Authorization: Bearer aa_live_..." \
      -H "Content-Type: application/json" \
      -d '{ ...input matching the API schema... }'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.