Back to skill

Security audit

news-media-research

Security checks across malware telemetry and agentic risk

Overview

The skill is presented as a narrow BBC, CNN, and Guardian news helper, but its bundled script can make arbitrary authenticated Crawlora API requests and can redirect the API key to an overridden base URL.

Review before installing. This skill may be useful for Crawlora-backed news research, but only use it if you are comfortable with a generic authenticated Crawlora client being present. Prefer a version that hardcodes or validates the Crawlora API origin and allowlists only the documented BBC, CNN, and Guardian endpoints. Use a low-privilege Crawlora key if available and avoid running it in environments where CRAWLORA_API_BASE could be set by untrusted configuration.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/crawlora.sh:18
Finding
API Key Disclosure Through an Unrestricted API Base Override<![CDATA[ ## Vulnerability Details **File Location**: `scripts/crawlora.sh`, lines 18–47 **Vulnerability Type**: Attacker-controlled credential destination **Risk Level**: Medium ### Vulnerable Code ```bash base="${CRAWLORA_API_BASE:-https://api.crawlora.net/api/v1}" method="GET" body="" args=() while [ $# -gt 0 ]; do case "$1" in -X) method="$2"; shift 2 ;; -d) body="$2"; shift 2 ;; *) args+=("$1"); shift ;; esac done [ "${#args[@]}" -ge 1 ] || { echo "usage: crawlora.sh [-X METHOD] /path [k=v ... | json-body]" >&2; exit 2; } path="${args[0]}" rest=("${args[@]:1}") auth=(-H "x-api-key: ${CRAWLORA_API_KEY}") if [ "$method" = "GET" ]; then # -G + --data-urlencode URL-encodes each value (so spaces etc. are safe). qs=() for kv in ${rest[@]+"${rest[@]}"}; do [ -n "$kv" ] && qs+=(--data-urlencode "$kv") done curl -fsS -G "${auth[@]}" ${qs[@]+"${qs[@]}"} "${base}${path}" else [ -n "$body" ] || body="${rest[0]:-}" [ -n "$body" ] || body='{}' curl -fsS -X "$method" "${auth[@]}" \ -H "Content-Type: application/json" -d "$body" "${base}${path}" fi ``` ### Technical Analysis The script permits the `CRAWLORA_API_BASE` environment variable to replace the expected API origin, `https://api.crawlora.net/api/v1`. No validation restricts the replacement value to HTTPS or to the trusted `api.crawlora.net` host. The script separately constructs an authentication header containing `CRAWLORA_API_KEY` and attaches it to every request. Consequently, the credential is sent to whichever destination is supplied through `CRAWLORA_API_BASE`. This creates a credential-exfiltration vulnerability when an attacker can influence the execution environment, such as through a poisoned shell profile, CI/CD variable, process launcher, or wrapper script. The API-base override is also not documented in `SKILL.md`, making unexpected redirection harder for users to identify. ### Attack Path 1. The attacker gains the ability to define or influence env ...[truncated 1321 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Remove the configurable base URL if it is not required.** ```bash readonly base="https://api.crawlora.net/api/v1" ``` 2. **If an override is operationally necessary, validate it before constructing authentication headers.** Require: - The `https` scheme. - The exact `api.crawlora.net` hostname. - The expected API path. - No URL user information. - No unexpected port. - No query string or fragment. 3. **Constrain curl to HTTPS and avoid cross-origin redirects.** ```bash curl --proto '=https' --max-redirs 0 ... ``` Alternatively, redirects may be permitted only after validating that every destination remains on the allowlisted origin. Do not forward the authentication header to another host. 4. **Fail closed on invalid configuration.** Terminate with a clear error rather than silently sending an authenticated request to an untrusted destination. 5. **Document any supported configuration override** in `SKILL.md`, including its security implications and accepted values. 6. **Rotate the API key** if the script has previously run with an unknown or untrusted `CRAWLORA_API_BASE` value. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
If the underlying helper script or referenced endpoint definitions allow arbitrary Crawlora endpoints, POST bodies, or unrelated services, the skill is broader than advertised and can be repurposed as a generic external API client. That increases the risk of unauthorized data exfiltration, policy bypass, and user deception because operators may trust it as a narrowly scoped news-research tool when it can access much more.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The helper documentation advertises generic Crawlora access and examples for unrelated endpoints such as Amazon, YouTube, and Google, which conflicts with the skill’s declared purpose of BBC/CNN/Guardian news research. In an agent setting, this kind of scope mismatch is dangerous because it enables operators or downstream prompts to invoke capabilities far beyond the reviewed data-access boundary, increasing the chance of unauthorized external requests and policy bypass.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The script accepts arbitrary paths, query parameters, HTTP methods, and POST bodies, effectively turning the skill into a general-purpose proxy to the Crawlora API. Because the manifest promises a constrained news-media tool, this unrestricted request construction creates a capability escalation path where an agent can be induced to access unrelated third-party data sources or API functions that were never security-reviewed.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The script consumes a generic Crawlora API key from the environment and uses it for unrestricted API calls, even though the skill is presented as a narrow news-research integration. In context, this broad credential magnifies the scope issue: any successful misuse of the helper inherits whatever permissions or billing access the key has across the Crawlora platform.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The inline comments describe a minimal generic REST helper for Crawlora, while the skill metadata frames the tool as a narrowly scoped news-media research capability. This misleading representation is security-relevant because reviewers and users may trust the declared scope, while the actual implementation supports much broader external access than expected.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:23