Back to skill

Security audit

Huoban

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent Huoban platform guide, but its webhook/API examples include high-impact business-data actions with insufficient security safeguards.

Review or revise the webhook and API examples before relying on this skill for implementation. Require webhook signature or shared-secret verification, strict payload validation, replay protection, table/tenant allowlists, and least-privilege Huoban API tokens, especially before using create, update, or delete record operations.

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
SKILL.md:272
Finding

Unauthenticated Webhook Accepts Forged Events

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 272–286
Vulnerability Type: Missing webhook authentication and payload validation
Risk Level: High

Vulnerable Code

python
@app.route('/webhook/huoban', methods=['POST'])
def huoban_webhook():
    data = request.json
    event_type = data.get('event')  # item.create / item.update / item.delete
    table_id = data.get('table_id')
    item = data.get('item')

    if event_type == 'item.create':
        # New record processing
        handle_new_item(table_id, item)
    elif event_type == 'item.update':
        # Updated record processing
        handle_update_item(table_id, item)

    return jsonify({"status": "ok"})

Technical Analysis

The documented webhook handler treats every HTTP POST request as a trusted Huoban event. It does not verify a provider signature, shared secret, timestamp, nonce, or request origin before passing attacker-controlled table_id and item values to business-logic handlers.

The endpoint also lacks strict content-type, payload-schema, field-type, and request-size validation. Consequently, anyone who can reach the route can submit fabricated events. The actual downstream effect depends on the unspecified implementations of handle_new_item and handle_update_item; therefore, effects beyond unauthorized handler invocation are conditional rather than confirmed.

The example also has no replay protection or idempotency control. If a legitimate request is captured or duplicated, it may be processed repeatedly.

Attack Path

  1. An attacker identifies a deployment based on the documented /webhook/huoban route.

  2. The attacker sends an unauthenticated POST request containing forged event data, for example:

    json
    {
      "event": "item.update",
      "table_id": 123,
      "item": {
        "id": 456,
        "status": "approved"
      }
    }
    
  3. The route accepts the request without establishing that Huoban sent it.

  4. The attacker-contr ...[truncated 819 chars]

Remediation
View remediation

Remediation Suggestions

  1. Verify every webhook using Huoban’s documented authentication mechanism, preferably an HMAC signature over the raw request body with a secret stored in a secret manager or environment variable.
  2. Compare signatures using a constant-time function and reject requests with missing or invalid authentication before parsing or processing events.
  3. Validate signed timestamps and enforce a short acceptance window. Store event IDs or nonces to prevent replay and duplicate processing.
  4. Require the expected JSON content type, enforce a conservative request-size limit, and validate the payload against a strict schema. Reject missing fields, unexpected fields, unsupported event names, and invalid field types.
  5. Allowlist expected table identifiers and ensure each event is authorized for the intended tenant and workflow.
  6. Make handlers idempotent and use transactional processing where duplicate or partially completed events could cause inconsistent state.
  7. Return appropriate 4xx responses for invalid requests and unsupported events instead of always returning success.
  8. Apply rate limiting, structured security logging, and monitoring for repeated signature failures or anomalous event volume.
  9. Do not rely solely on source-IP allowlisting, but use it as defense in depth if Huoban publishes stable webhook source ranges.
  10. Add tests covering forged signatures, stale timestamps, replayed events, malformed JSON, oversized bodies, unsupported event types, and cross-tenant or unauthorized table identifiers.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (5)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The title and core instruction define the assistant as operating in Chinese and describe its behavior entirely in Chinese, without stating that users may choose another language. This creates a language/locale policy concern because the skill appears to impose a specific language by default rather than offering an explicit opt-in or choice.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 181)May include surrounding context.

md
def __init__(self, api_token: str):
        self.api_token = api_token
        self.base_url = "https://api.huoban.com/v2"
        self.headers = {
            "Authorization": f"Bearer {api_token}",
            "Content-Type": "application/json"

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 194)May include surrounding context.

md
payload = {"limit": limit, "offset": offset}
        if filters:
            payload["where"] = {"and": filters}
        resp = requests.post(url, headers=self.headers, json=payload)
        return resp.json()

    def create_item(self, table_id: int, fields: list) -> dict:

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 202)May include surrounding context.

md
payload = {"limit": limit, "offset": offset}
        if filters:
            payload["where"] = {"and": filters}
        resp = requests.post(url, headers=self.headers, json=payload)
        return resp.json()

    def create_item(self, table_id: int, fields: list) -> dict:

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 209)May include surrounding context.

md
"""更新一条记录"""
        url = f"{self.base_url}/item/{item_id}"
        payload = {"fields": fields}
        resp = requests.put(url, headers=self.headers, json=payload)
        return resp.json()

    def delete_item(self, item_id: int) -> dict:

Static analysis

No suspicious patterns detected.