Back to skill

Security audit

Aithon Marketplace

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Aithon marketplace connector, but it can send business contact data and create lasting marketplace/account state without clear consent gates, and its included search helper has a local code-execution bug.

Review this skill carefully before installing. Use it only when you intentionally want to interact with Aithon, and require explicit confirmation before submitting contact details, registering an agent, paying any fee, creating or updating perks/services, or using an API token. Avoid the bundled search helper until its query encoding bug is fixed.

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

Error
Location
scripts/aithon-search.sh:13
Finding
Python Code Injection Through Unsafely Interpolated Search Query## Vulnerability Details **File Location**: `scripts/aithon-search.sh`, line 13 **Vulnerability Type**: Python code injection caused by unsafe string interpolation **Risk Level**: High ### Vulnerable Code ```bash URL="${BASE}?q=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${QUERY}'))")&limit=${LIMIT}" ``` ### Technical Analysis The script directly interpolates the untrusted `QUERY` positional argument into source code passed to `python3 -c`. Although the intended operation is URL encoding, the query is placed inside a single-quoted Python string without escaping. A query containing a single quote and additional Python syntax can terminate the intended string and inject arbitrary Python statements. For example, an input shaped like the following can execute a local command: ```text x')); __import__("os").system("id"); # ``` This is a local code-execution vulnerability, not a remote `curl | bash` issue. The separate pipeline on line 21 sends the HTTP response to `python3 -m json.tool`, which parses and formats JSON rather than executing it. ### Attack Path 1. An attacker controls a catalog search query or persuades an operator or agent to search for a crafted value. 2. The crafted value is passed as the first argument to `aithon-search.sh`. 3. Line 13 embeds the value directly into the program supplied to `python3 -c`. 4. The crafted quote terminates the intended Python string. 5. The Python interpreter evaluates the injected statements before the catalog request is made. 6. The injected code can invoke operating-system commands with the privileges of the account running the Skill. ### Impact Assessment Successful exploitation permits arbitrary code execution under the invoking user's OS account. The attacker could read or modify files accessible to that account, access locally available credentials or API tokens, alter project data, execute network requests, or install additional user-level ...[truncated 277 chars]
Remediation
## Remediation Suggestions Pass the query as a separate Python argument rather than embedding it in Python source: ```bash ENCODED_QUERY="$( python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1]))' "$QUERY" )" URL="${BASE}?q=${ENCODED_QUERY}&limit=${LIMIT}" ``` Apply the same URL encoding to `CATEGORY`, and validate `LIMIT` as a bounded positive integer before adding it to the URL: ```bash if ! [[ "$LIMIT" =~ ^[0-9]+$ ]] || (( LIMIT < 1 || LIMIT > 100 )); then printf 'Invalid limit: expected an integer from 1 to 100\n' >&2 exit 2 fi ``` Prefer `curl --get --data-urlencode` so URL construction and encoding are delegated to a purpose-built interface. Add regression tests covering single quotes, double quotes, semicolons, command substitutions, backslashes, Unicode, and newline characters. As defense in depth, run the helper with only the filesystem, credential, and network access required for catalog search. Do not expose unrelated API tokens or sensitive files to the process.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

External Script Fetching

High
Category
Supply Chain
Content
URL="${URL}&category=${CATEGORY}"
fi

curl -s "$URL" | python3 -m json.tool 2>/dev/null || curl -s "$URL"
Confidence
90% confidence
Finding
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill advertises and demonstrates networked actions and curl-based API operations but does not declare any explicit tool scope or allowed-tools constraints. In an agent environment, this can enable broader-than-expected external access and make it harder to enforce least privilege, increasing the risk of unintended requests or abuse if the skill is auto-invoked.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The activation text is very broad and encourages use for a wide range of enterprise technology, sales, purchasing, referral, and agent-registration scenarios. Overbroad triggers increase the chance the skill is selected in contexts where external transactions, lead generation, or monetized routing occur without the user clearly intending to use this marketplace.

External Transmission

Medium
Category
Data Exfiltration
Content
### Find services by location
```bash
curl 'https://aithon.tech/api/v1/catalog?category=business-internet&q=Dallas'
```

### Search by keyword
Confidence
60% 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
98% confidence
Finding
The example shows submitting business and contact details to a third-party API but does not require an explicit privacy notice or informed user confirmation before transmission. This is dangerous because an agent could normalize sending personally identifiable and business-sensitive lead data to an external service without clear consent or explanation of where the data is going.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The registration workflow sends contact information to an external service and mentions a $1 fee, but the workflow lacks a clear warning that this is an external registration step involving data transfer and potential charge. In an agent setting, this could lead to account creation or payment-related actions being initiated without sufficiently informed user authorization.

External Transmission

Medium
Category
Data Exfiltration
Content
## Registering as an Aithon Agent

```bash
curl -X POST 'https://aithon.tech/api/v1/agents/beta/apply' \
  -H 'Content-Type: application/json' \
  -d '{
    "agent_name": "my-procurement-agent",
Confidence
60% 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
93% confidence
Finding
The API reference explicitly encourages submission of personal contact data such as name, email, phone number, business name, and location, but provides no warning about handling sensitive information, obtaining user consent, or minimizing shared data. In an agent skill context, this increases the risk that an LLM-driven agent will collect and transmit user PII to a third-party API without clearly informing the user or validating that such disclosure is necessary and authorized.