Back to skill

Security audit

Hookflo Webhooks

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent webhook guidance skill, but one documented proxy example can send complete webhook payloads and all incoming headers to a third-party service without adequate scoping or warning.

Review the webhook forwarding examples carefully before installing or using this skill. Prefer allowlisting outbound headers, redacting or minimizing payload fields, requiring HTTPS and an approved Hookflo destination, and avoiding third-party forwarding for secrets, regulated data, or sensitive customer/account events unless that sharing is explicitly intended and compliant.

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:454
Finding
Unrestricted Forwarding of Sensitive Webhook Payloads and Headers## Vulnerability Details **File Location**: `SKILL.md`, lines 454–459 **Vulnerability Type**: Sensitive information transmitted to an external service **Risk Level**: High ```ts // 3. Forward to Hookflo for alerting/logging (optional) await fetch(process.env.HOOKFLO_WEBHOOK_URL!, { method: 'POST', headers: { ...req.headers, 'Content-Type': 'application/json' }, body: req.body, }); ``` ### Technical Analysis The documented proxy pattern forwards the complete raw webhook body and copies all inbound request headers to an external Hookflo endpoint. This exceeds the minimum data access needed for typical alerting because webhook payloads can contain personal, financial, account, or operational information, while inbound headers can contain authorization values, cookies, signatures, internal proxy metadata, tracing identifiers, and infrastructure details. Spreading `req.headers` into an outbound request provides no explicit security boundary or allowlist. Consequently, any sensitive header introduced by the provider, an upstream proxy, middleware, or another trusted component can cross that boundary unintentionally. Forwarding the unmodified body similarly prevents field-level data minimization or redaction. The destination comes from `HOOKFLO_WEBHOOK_URL`, but the example does not validate that it uses HTTPS or belongs to an approved Hookflo hostname. A deployment mistake or compromised configuration could therefore direct the forwarded information to an unintended recipient. This is an unsafe documented implementation pattern rather than evidence of covert exfiltration: forwarding is labeled optional and supports the declared logging and alerting functionality. Nevertheless, forwarding every header and payload field is broader than necessary for that functionality. ### Attack Path 1. A webhook provider sends a correctly signed event containing sensitive payload fields or headers. 2. The server verifies the event wi ...[truncated 1607 chars]
Remediation
## Remediation Suggestions 1. Replace the blanket header spread with a strict allowlist containing only headers explicitly required by the destination: ```ts const outboundHeaders: Record<string, string> = { 'Content-Type': 'application/json', }; ``` 2. Never forward `authorization`, `cookie`, internal proxy headers, unrelated provider signatures, or other credentials unless a documented protocol strictly requires them. 3. Construct a minimized outbound event containing only the fields required for alerts. Redact personal, financial, secret, and authentication data before transmission. 4. Require explicit user consent before enabling third-party forwarding and document what data Hookflo receives, how it is retained, and which compliance obligations apply. 5. Parse and validate `HOOKFLO_WEBHOOK_URL` before use. Require HTTPS and enforce an approved destination-host allowlist rather than accepting an arbitrary environment-provided hostname. 6. Use a dedicated outbound authentication credential instead of reusing inbound provider credentials or signatures. 7. Add request timeouts, bounded payload sizes, error handling, and retry controls. Alerting failures should not cause repeated processing of an otherwise valid webhook. 8. Preserve replay defenses and implement event-id-based idempotency before local processing or forwarding. 9. Update the documentation to mark forwarding as a data-sharing operation and provide a privacy-preserving example by default.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Vague Triggers

Medium
Confidence
89% confidence
Finding
The skill’s trigger description is very broad and includes generic webhook, notification, and event-driven terms that commonly appear outside the Hookflo/Tern context. This can cause unintended activation, leading the agent to apply this skill in unrelated situations and potentially bias responses toward Hookflo products or webhook-handling patterns when they are not appropriate.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The instruction to 'match on the underlying concepts above' is ambiguous and expands the skill’s activation beyond clear product or library boundaries. In practice this increases over-triggering risk, causing the agent to select the skill for many generic HTTP callback or event questions and potentially steer users toward this vendor-specific ecosystem without clear necessity.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The documentation encourages optionally forwarding processed webhook data to Hookflo, a hosted third-party service, but does not clearly warn that payloads may contain sensitive business or personal data. Users could adopt this pattern without understanding the privacy, compliance, retention, and data-sharing implications of transmitting webhook contents off-platform.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The proxy example forwards the raw webhook body and incoming headers to Hookflo after verification, but provides no explicit safety or privacy warning. This may disclose personal data, internal metadata, or authentication-related headers to a third party, and the blanket header forwarding pattern can propagate more information than necessary.

Static analysis

No suspicious patterns detected.