T01 · Skill Instruction Hijacking
- Location
SKILL.md:31- Finding
Untrusted Webhook Content Is Executed as an Agent Instruction
- Content
View full analysis
" } ``` `SKILL.md:54-55`: ```text 5. Reference incoming webhook fields through `payload`, for example `{{payload.text}}`. ``` `references/payload-format.md:13-19`: ```text For the simple ingestion path, the OpenClaw mapping should reference: ```text {{payload.text}} ``` ``` ### Technical Analysis The mapping inserts the complete caller-controlled `payload.text` value directly into `messageTemplate` and submits the rendered result to the `main` agent. No strict schema validation, instruction/data separation, content filtering, escaping, or restrictive system prompt is documented. Consequently, a webhook request does not have to contain a legitimate stock alert. An authenticated caller can instead place adversarial instructions in `text`, and those instructions will be processed as the agent's message. The use of the fixed `hook:stocklobster` session key can also allow malicious content to influence subsequent processing in the same session, depending on OpenClaw's session-history behavior. Authentication with a hooks token limits who can reach the endpoint, but it does not make the webhook payload trustworthy. A leaked token, compromised StockLobster sender, malicious authorized integration, or interception over the documented plaintext HTTP connection would expose this path. ### Attack Path 1. The attacker obtains the hooks bearer token or compromises an authorized webhook sender. 2. The attacker submits a POST request to `/hooks/stocklobster` with a ...[truncated 1325 chars]- Remediation
View remediation
