T09 · Insecure Skill Coding Practices
- Location
SKILL.md:34- Finding
Webhook Bearer Credential Exposed Through Process Arguments, Output, and Automation Prompts
- Content
View full analysis
``` ``` `SKILL.md:104-119` places the full webhook URL, including its bearer key, directly into persistent automation configuration and prompt text: ```markdown mode: "suggested create" name: prompt: + + rrule: cwds: status: ACTIVE ``` **Automation prompt template:** ``` {DATE_GUARD_IF_NEEDED} 执行以下步骤: 1. {CONTENT_GENERATION_STEPS} 2. 将整理好的内容通过企业微信群机器人 Webhook 推送,Webhook 地址为:{WEBHOOK_URL} ``` `scripts/validate_webhook.py:117-119` prints the complete webhook URL after validation: ```python if result.get("errcode") == 0: print(f"✅ Webhook is valid! Response: {json.dumps(result)}") # Output the full URL for downstream use print(f"\nWEBHOOK_URL={url}") ``` ### Technical Analysis A WeChat Work webhook key functions as a bearer credential: possession of the complete URL is sufficient to submit messages to the associated group webhook. The project exposes that credential through three channels: 1. Passing the URL or key as a command-line argument can expose it through shell history, process inspection, audit telemetry, terminal recording, and command-execution logs. 2. Printing `WEBHOOK_URL={url}` discloses the complete credential to standard output, where it may be retained in CI logs, agent transcripts, job logs, or monitoring systems. 3. Embedding the complete ...[truncated 1988 chars]- Remediation
View remediation
