Back to skill

Security audit

Shopify Expert

Security checks for vulnerabilities and agentic risk

Overview

This Shopify documentation skill is mostly coherent, but it includes examples that can send live order data to a real third-party webhook service and guide powerful store changes.

Review this skill before installing in an environment with production Shopify credentials. Replace every webhook.site example with an endpoint controlled by your app or merchant, prefer test stores, use least-privilege Admin API scopes, keep tokens only in environment or secret storage, and require explicit human confirmation before deletes, refunds, cancellations, inventory changes, customer/order exports, or webhook registration.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Error
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: High

Complete 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/create webhook to send event payloads to webhook.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

  1. An agent loads references/DOC_WEBHOOKS.md while implementing Shopify webhooks.
  2. The agent ...[truncated 1185 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace every webhook.site URI with a clearly fictional, application-controlled example, such as:

    toml
    [[webhooks.subscriptions]]
    topics = ["orders/create"]
    uri = "https://app.example.com/webhooks/orders-create"
    
  2. Update the GraphQL variables example to use the same controlled placeholder domain.

  3. Add an explicit warning that public request-bin and webhook inspection services must not receive production customer, order, or payment-related data.

  4. Require confirmation that the destination host is controlled and authorized by the merchant or application operator before registering a webhook.

  5. Recommend destination allowlisting and environment-specific webhook endpoints so test and production subscriptions cannot be confused.

  6. Document Shopify webhook signature verification, HTTPS enforcement, replay protection, request-size limits, logging redaction, and data-retention controls.

  7. Advise users to review existing subscriptions and immediately remove any webhook that points to an unauthorized third-party host.

  8. Minimize subscribed topics and retained payload fields according to the application's actual operational requirements.

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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (26)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/ADMIN_REST_API.md (reported line 43)May include surrounding context.

X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN

text

### Getting an Access Token

1. Go to your Shopify Admin > Settings > Apps and sales channels
2. Click "Develop apps" > "Create an app"

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
2. Click "Develop apps" > "Create an app"
3. Configure Admin API scopes based on what you need
4. Install the app to your store
5. Copy the Admin API access token

## API Reference

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/ADMIN_REST_API.md (reported line 49)May include surrounding context.

md
2. Click "Develop apps" > "Create an app"
3. Configure Admin API scopes based on what you need
4. Install the app to your store
5. Copy the Admin API access token

## API Reference

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/AUTH.md (reported line 5)May include surrounding context.

md
## Principles

- **Never** paste access tokens, client secrets, or session tokens into chat or commit them to Git.
- Store credentials in **host environment variables** or `skills.entries["shopify-expert"].env` in `openclaw.json`.

## Eligibility env

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/DOC_ADMIN_API.md (reported line 20)May include surrounding context.

md
#### Authentication

Authentication requires both access tokens and specific access scopes depending what resource you need to access.

- All GraphQL Admin API queries require a valid Shopify access token.
- Public and custom apps created in the Partner Dashboard generate tokens using OAuth, and custom apps made in the Shopify admin are authenticated in the Shopify admin.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/ADMIN_REST_API.md (reported line 22)May include surrounding context.

md
[Authentication](https://shopify.dev/docs/apps/build/authentication-authorization) is the process of verifying the identity of the user or the app. To keep transactions on Shopify’s platform safe and secure, all apps connecting with Shopify APIs must authenticate when making API requests.

Authorization is the process of giving permissions to apps. When an app user installs a Shopify app they authorize the app, enabling the app to acquire an access token. For example, an app might be authorized to access orders and product data in a store.

#### Types of authentication and authorization methods

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/DOC_ADMIN_API.md (reported line 22)May include surrounding context.

md
[Authentication](https://shopify.dev/docs/apps/build/authentication-authorization) is the process of verifying the identity of the user or the app. To keep transactions on Shopify’s platform safe and secure, all apps connecting with Shopify APIs must authenticate when making API requests.

Authorization is the process of giving permissions to apps. When an app user installs a Shopify app they authorize the app, enabling the app to acquire an access token. For example, an app might be authorized to access orders and product data in a store.

#### Types of authentication and authorization methods

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/DOC_PLATFORM_AUTHENTICATION.md (reported line 12)May include surrounding context.

md
[Authentication](https://shopify.dev/docs/apps/build/authentication-authorization) is the process of verifying the identity of the user or the app. To keep transactions on Shopify’s platform safe and secure, all apps connecting with Shopify APIs must authenticate when making API requests.

Authorization is the process of giving permissions to apps. When an app user installs a Shopify app they authorize the app, enabling the app to acquire an access token. For example, an app might be authorized to access orders and product data in a store.

#### Types of authentication and authorization methods

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/DOC_PLATFORM_AUTHENTICATION.md (reported line 25)May include surrounding context.

md
[Authentication](https://shopify.dev/docs/apps/build/authentication-authorization) is the process of verifying the identity of the user or the app. To keep transactions on Shopify’s platform safe and secure, all apps connecting with Shopify APIs must authenticate when making API requests.

Authorization is the process of giving permissions to apps. When an app user installs a Shopify app they authorize the app, enabling the app to acquire an access token. For example, an app might be authorized to access orders and product data in a store.

#### Types of authentication and authorization methods

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/DOC_POLARIS.md (reported line 113)May include surrounding context.

md
<s-button variant="secondary">Cancel</s-button>
<s-button variant="tertiary" tone="critical">Delete</s-button>

<!-- Buttons with icons -->
<s-button variant="primary" icon="plus">Add product</s-button>
<s-button variant="secondary" loading>Processing...</s-button>

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document explicitly advertises full read/write Admin API access and then provides destructive operations such as update, cancel, delete, refund, and inventory changes without an upfront safety warning about production impact. In an agent skill context, this increases the chance that an automated system or user will apply examples directly against a live store, causing business disruption or irreversible data changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The setup section instructs users to supply a Shopify Admin API access token but gives no guidance on secure storage, redaction, rotation, or avoiding disclosure in logs and transcripts. In an agent environment, credentials are especially sensitive because they may be echoed into prompts, shell history, telemetry, or generated examples, enabling unauthorized store access if exposed.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · references/ADMIN_REST_API.md (reported line 60)May include surrounding context.

List Orders

bash
curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/orders.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The customer and order examples operate on personal and transactional data, including names, email addresses, phone numbers, addresses, and order history, but omit any privacy or data-minimization warning. In a skill designed to empower an agent, this omission makes it more likely sensitive data will be queried, copied, or modified without considering compliance, consent, retention, or unnecessary exposure.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · references/ADMIN_REST_API.md (reported line 705)May include surrounding context.

bash
# First request
curl "https://$SHOPIFY_STORE_DOMAIN/admin/api/2024-10/products.json?limit=50" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \
  -i

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file discusses obtaining and setting SHOPIFY_API_SECRET and other production environment variables, but it does not warn users that these values are sensitive credentials that must not be exposed, committed, or shared. For markdown files, SQP-2 applies when descriptions omit warnings about behaviors that could affect privacy or system integrity.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · references/DOC_HEADLESS_STOREFRONT.md (reported line 41)May include surrounding context.

text
# Get the ID and title of the three most recently added products
curl -X POST \
  https://{store_name}.myshopify.com/api/2024-10/graphql.json \
  -H 'Content-Type: application/json' \
  -H 'X-Shopify-Storefront-Access-Token: {storefront_access_token}' \

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file contains a UI example with a critical "Delete" button, but the surrounding documentation provides no warning, confirmation pattern, or disclosure about the destructive nature of the action. For markdown files, destructive behaviors should be accompanied by user-facing warnings when the skill description could affect user data or system integrity.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · references/TOOLING.md (reported line 10)May include surrounding context.

Minimal GraphQL example (pattern only)

bash
curl -sS "https://${SHOPIFY_SHOP_DOMAIN}/admin/api/${SHOPIFY_ADMIN_API_VERSION}/graphql.json" \
  -H "Content-Type: application/json" \
  -H "X-Shopify-Access-Token: ${SHOPIFY_ADMIN_API_ACCESS_TOKEN}" \
  -d '{"query":"{ shop { name } }"}'

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file includes example mutations that set storefront: PUBLIC_READ, which can make custom data visible on storefronts. The surrounding documentation explains the feature but does not explicitly warn readers about the privacy or data-exposure implications of marking custom data as publicly readable.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The example configures metaobject access with storefront: PUBLIC_READ, which affects what data may be exposed to storefront consumers. Because this is a markdown documentation file, the lack of an explicit warning about privacy or user-data implications fits the missing-warning criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This example again marks a product metafield definition as PUBLIC_READ, enabling storefront visibility for referenced metaobject data. The documentation does not pair this with a warning about reviewing the sensitivity of the referenced content before exposing it publicly.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · references/DOC_CUSTOMER_ACCOUNT_EXTENSIONS.md (reported line 14)May include surrounding context.

md
Here are some examples of what developers can build with Shopify:

* Build apps that extend the functionality of Shopify stores. For example, apps for inventory management, analytics and reporting, or customer loyalty programs.
* Extend Shopify’s checkout with extensions that change its UI or business logic.
* Customize a store’s theme to match the merchant’s brand or change the layout.
* Build online storefronts that allow buyers to shop in a merchant’s store.

Scope Creep

Low
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · references/DOC_INTRO.md (reported line 14)May include surrounding context.

md
Here are some examples of what developers can build with Shopify:

* Build apps that extend the functionality of Shopify stores. For example, apps for inventory management, analytics and reporting, or customer loyalty programs.
* Extend Shopify’s checkout with extensions that change its UI or business logic.
* Customize a store’s theme to match the merchant’s brand or change the layout.
* Build online storefronts that allow buyers to shop in a merchant’s store.

Static analysis

No suspicious patterns detected.