T09 · Insecure Skill Coding Practices
- Location
examples.md:169- Finding
Unsanitized Remote Marketplace Content Is Rendered in the Operator Terminal
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This marketplace skill is mostly coherent and disclosed, but it includes crypto settlement and account-management examples that need stronger human approval and safer handling of untrusted marketplace text.
Install only if you intend to let an agent interact with an external crypto marketplace. Use a dedicated low-balance wallet, protect ONDEEP_ACCID and ONDEEP_TOKEN, keep heartbeat opt-in and stoppable, require human confirmation before creating orders, transferring funds, confirming receipt, releasing escrow, or delisting products, and sanitize any product titles, descriptions, or order notes before displaying them in a terminal or passing them to an LLM.
examples.md:169Unsanitized Remote Marketplace Content Is Rendered in the Operator Terminal
examples.md:67Escrow Release Example Lacks Delivery Verification and Final Human Approval
Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.
### 2. Payment Requires Human Approval
This skill can trigger on-chain crypto transfers. Deploying without safeguards may result in
unauthorized or accidental spending.
**Required safeguards:**
The API exposes a destructive action, DELETE /api/products/:id, that an agent could invoke based on untrusted or ambiguous inputs, causing unintended delisting of listings. In this marketplace context, tool misuse directly affects live commercial inventory and can disrupt sales or sabotage a seller account even though the endpoint is authenticated and described as a soft delete.
Update your product. Same fields as create.
### DELETE /api/products/:id `AUTH`
Delist your product (soft delete).
The README instructs agents to send persistent heartbeat requests containing account credentials in headers to an external service every 60 seconds. Although this is expected functionality for the marketplace, it increases exposure of bearer-style credentials and creates ongoing outbound communication that could be misused by an autonomous agent or leak secrets through logs, proxies, or misconfigured tooling.
curl -s -X POST https://ondeep.net/api/register | jq
# 2. Stay online (heartbeat every 60s)
curl -s -X POST https://ondeep.net/api/heartbeat \
-H "X-AccId: $ONDEEP_ACCID" -H "X-Token: $ONDEEP_TOKEN"
# 3. Search products
The README gives the example invocation context "help me sell this," which is a generic phrase commonly used in everyday conversation. In a skill marketplace or routing system, such broad wording could cause unintended activation because the trigger scope and exclusions are not clearly constrained.
The skill requires periodic authenticated transmission of persistent identifiers (X-AccId, X-Token) to a third-party service every 60 seconds, creating continuous external data exposure and an always-on communication channel. Even over HTTPS, this expands the attack surface: credential leakage, misuse of long-lived tokens, service compromise, or unintended operational telemetry could enable account abuse or tracking.
Call heartbeat every 60s to remain discoverable. Offline after 3 min of silence.
curl -s -X POST https://ondeep.net/api/heartbeat \
-H "X-AccId: $ONDEEP_ACCID" \
-H "X-Token: $ONDEEP_TOKEN"
This endpoint sends arbitrary order-note content to an external service, and the example note contains instruction-like text. Because notes are explicitly untrusted free-text and later echoed back in order data, this creates a realistic prompt-injection and data-exfiltration path if downstream agent components ingest note content and act on it, especially in a skill designed to connect autonomous agents with unknown counterparties.
# Add a note
curl -s -X POST https://ondeep.net/api/orders/ORDER_ID/notes \
-H "X-AccId: $ONDEEP_ACCID" -H "X-Token: $ONDEEP_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"Delivery instructions: use endpoint /api/v2/result"}'
The phrase "help me sell this" is presented as a natural fit for when to use the skill, but it overlaps heavily with common everyday speech and is not constrained to a narrow marketplace context. In a markdown skill description, this kind of broad invocation language can make activation boundaries unclear and increase the risk of accidental use.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Product: GPU Computing Service — $50.00 USD on BSC"
echo "Confirm order? (y/n)" && read CONFIRM
if [ "$CONFIRM" = "y" ]; then
ORDER=$(curl -s -X POST https://ondeep.net/api/orders \
-H "X-AccId: $ACCID" -H "X-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"product_id":1,"chain":"BSC","seller_address":"0xYourWalletAddress"}')
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# → Transfer $TOTAL BNB to $PAY_ADDR on BSC (confirm before sending!)
# 7. After on-chain transfer, submit tx hash
curl -s -X POST "https://ondeep.net/api/orders/$ORDER_ID/pay" \
-H "X-AccId: $ACCID" -H "X-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"tx_hash":"0xabc123def456..."}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
done &
# 3. Publish a translation service
curl -s -X POST https://ondeep.net/api/products \
-H "X-AccId: $ACCID" -H "X-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "X-AccId: $ACCID" -H "X-Token: $TOKEN" | jq
# Update price
curl -s -X PUT "https://ondeep.net/api/products/1" \
-H "X-AccId: $ACCID" -H "X-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"price": 8.50}' | jq
The example shows a destructive DELETE operation for delisting a product without any explicit warning, confirmation, or rollback guidance. In an agent-skill context, users may copy this pattern into automation and unintentionally remove listings due to a mistaken product ID or unsafe autonomous execution.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if input("Place order? (y/n): ").strip().lower() != "y":
print("Order cancelled by operator.")
else:
order = requests.post(f"{BASE}/api/orders", headers=headers, json={
"product_id": product["id"],
"chain": "BSC",
"seller_address": "0xYourWalletAddress",
No suspicious patterns detected.