Skip to main content

shopify_app CVE-2026-63414

HIGH
Incorrect Authorization (CWE-863)
2026-10-29 https://github.com/Shopify/shopify_app GHSA-6j52-38f8-qhxr
7.6
CVSS 4.0 · Vendor: https://github.com/Shopify/shopify_app
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain valid session token for attacker's own shop
  2. Delivery
    Send authenticated request with mismatched shop query parameter
  3. Exploit
    current_shopify_domain resolves to requested shop not authenticated shop
  4. Execution
    Application scopes authorization/data to victim shop
  5. Impact
    Access or modify another shop's data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires all of the following: (1) the application uses shopify_app token-exchange authentication; (2) it accepts authenticated controller requests where a shop query parameter may be present; and (3) it relies on current_shopify_domain or params[:shop] for authorization decisions, tenant lookup, stored access-token selection, or shop-scoped resource access on a vulnerable version (>= 22.1.0, < 23.0.3). The attacker must already possess a valid Shopify session/ID token for at least one shop (PR:L authenticated), supplied for example by installing the app on their own store. Limiting factors that reduce real risk: apps that derive shop identity from current_shopify_session.shop or the verified JWT dest value are NOT vulnerable even on affected versions; there is no unauthenticated path; and the flaw only yields cross-shop access when the application actually trusts the requested shop parameter for security-sensitive scoping. The vendor states upgrading to 23.0.3 is the fix; the documented workaround is to validate params[:shop] against the authenticated shop and reject mismatches with 401.

Impact

This is a genuine but conditional authorization flaw (CWE-863), not a blanket critical. The provided CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N, score 7.6 High) is internally consistent with the description: network-reachable, low attacker complexity, but PR:L means the attacker must already hold a valid Shopify session/ID token for at least one shop, and AT:P reflects that the target application must actually rely on the untrusted shop context for security decisions. No EPSS score was supplied and the CVE is not on CISA KEV, so there is no signal of mass or active exploitation; exploitation status is 'no public exploit identified at time of analysis' - the GitHub references are the fix commit/PR and advisory, not weaponized exploit code. The vuln.today decision label is 'this_week', consistent with a patched, authenticated, exploitation-dependent library flaw rather than an emergency. The real priority is bounded: the vulnerability only matters for apps that use shopify_app token-exchange authentication AND consume current_shopify_domain or params[:shop] for authorization, tenant lookup, access-token selection, or shop-scoped data - many apps that use the authenticated session object directly are unaffected. The most important missing signal is population-level: there is no data on how many deployed Shopify apps actually follow the vulnerable coding pattern, so blast radius must be assessed per-application. Where the pattern is present, impact is real cross-shop/cross-tenant data access and actions.

Exploit ScenarioDerived

An attacker who legitimately installed the vulnerable Shopify app on their own shop (Shop A) obtains a valid Shopify session/ID token, then sends an authenticated controller request that additionally carries shop=victim-shop.myshopify.com as a query parameter. If the app uses current_shopify_domain or params[:shop] for shop scoping on vulnerable versions (>= 22.1.0, < 23.0.3), the application code operates in Shop B's context, exposing or modifying another merchant's data. No public exploit code is identified at time of analysis; the published artifacts are the fix (PR #2081 / commit a09ccc0) and the GHSA advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – Oct 30, 2026

Cross-shop context confusion in the Shopify shopify_app Ruby gem (versions 22.1.0 through 23.0.2) allows an authenticated attacker holding a valid Shopify session or ID token for one store to supply a different shop query parameter and have application code treat that requested shop as the current shop. The flaw is only exploitable where the host application uses token-exchange authentication and relies on current_shopify_domain or params[:shop] for authorization, tenant lookup, stored access-token selection, or shop-scoped data access, so impact is conditional on each app's own scoping logic; apps that derive shop identity from current_shopify_session.shop or the verified JWT dest claim are not affected. The vendor-released fix is version 23.0.3, and no public exploit code or confirmed active exploitation was identified at time of analysis, though the flaw is rated this_week priority by vuln.today and carries a vendor CVSS 4.0 score of 7.6.

Earlier versions of this analysis (1)
v1 Oct 29, 2026 - 17:07

Cross-shop context confusion in the Shopify shopify_app Ruby gem (versions 22.1.0 through 23.0.2) allows a request authenticated with a valid Shopify session/ID token for one shop to be treated as belonging to a different shop, by supplying a mismatched shop query parameter that current_shopify_domain resolved to instead of the verified token identity. Only applications that use token-exchange authentication and key authorization, tenant lookup, access-token selection, or shop-scoped data access off current_shopify_domain or params[:shop] are exploitable, and because the boundary crossing is a Ruby helper resolving the wrong value rather than a memory-safety bug, the impact is unauthorized access to another shop's application data or shop-scoped actions (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N, scope-changed). Exploitation requires the attacker to already hold an authenticated Shopify session token for at least one shop; no public exploit code has been identified at time of analysis, and the issue is not confirmed actively exploited (CISA KEV).

RemediationAI

Upgrade to shopify_app 23.0.3, the vendor-released fixed version (release notes: https://github.com/Shopify/shopify_app/releases/tag/v23.0.3; advisory: https://github.com/Shopify/shopify_app/security/advisories/GHSA-6j52-38f8-qhxr). The fixing change is visible in commit a09ccc04b9556cbb31c6d56ed81aeb6b9b6c0756 and pull request https://github.com/Shopify/shopify_app/pull/2081. Applications that cannot upgrade immediately must implement equivalent validation themselves in token-exchange authenticated controllers: stop using params[:shop] for authorization, tenant lookup, access-token selection, or data scoping, and stop trusting current_shopify_domain for security-sensitive scoping while a shop query parameter may be present; instead resolve the shop from current_shopify_session.shop or the verified JWT dest claim, and when a sanitized params[:shop] value is present, reject the request with 401 Unauthorized if it does not match the authenticated shop. The trade-off of the workaround is that it must be applied to every authenticated controller path individually and requires touching call sites that currently rely on the convenience helper, whereas upgrading centralizes the fix in the gem. After upgrading, code that legitimately needs the requested shop for bootstrap or routing should move to the new requested_shopify_domain helper and reserve current_shopify_domain/authenticated_shopify_domain for trusted identity.

Affected Packages

rubygems shopify_app fix: 23.0.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in rubygems

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

shopify_app is the official Ruby gem (CPE pkg:rubygems/shopify_app) that Rails applications use to build embedded Shopify apps, handling OAuth installation, session tokens, and Shopify's token-exchange authentication flow. In that flow the gem verifies a Shopify ID token (a signed JWT whose dest claim identifies the shop) or an active Shopify session, then exposes shop context to controllers through helpers, most notably current_shopify_domain. Before the fix, that helper could resolve to the sanitized shop query parameter rather than the shop identity proven by the token or session, so a request legitimately authenticated for shop A but carrying shop=shop-b.example would present shop B as the current shop. The root cause is CWE-863 (Incorrect Authorization): an attacker-influenced request parameter was treated as a trusted identity source for tenant scoping. The patched version separates the two concepts, making current_shopify_domain and a new authenticated_shopify_domain resolve from the verified token or session, adding requested_shopify_domain for the sanitized shop parameter restricted to bootstrap or routing use, and rejecting token-exchange requests with 401 Unauthorized when the requested shop does not match the authenticated shop. Per the independent assessment the trigger is a request-level authentication context mismatch (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N), requiring the attacker to already hold a valid session token for at least one shop.

Know when Shopify gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/Shopify/shopify_app) PRIMARY 7.6 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 8.1 HIGH

Network-reachable and low-complexity, but the attacker must hold a valid session token (PR:L) and the app must trust the shop parameter; cross-shop read and write give C:H/I:H, no availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/Shopify/shopify_app).

CVSS VectorVendor: https://github.com/Shopify/shopify_app

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Analysis Updated
Oct 30, 2026 - 23:28 vuln.today
v2 - CVSS changed
CVSS changed
Oct 30, 2026 - 23:22 NVD
7.6 (HIGH)
CVE Published
Oct 29, 2026 - 16:39 cve.org
HIGH

DescriptionCVE.org

In token-exchange authenticated controllers, shopify_app exposes shop context through helpers such as current_shopify_domain. Prior to the fix, current_shopify_domain could resolve to the sanitized shop query parameter instead of the shop identity derived from the verified Shopify ID token or active Shopify session.

As a result, a request authenticated for one shop could include a different shop query parameter, causing application code to treat the requested shop as the current shop.

Applications that used current_shopify_domain, or the request shop parameter, for authorization decisions, tenant lookup, stored access-token selection, or shop-scoped data access may have been vulnerable to cross-shop context confusion.

The patched version hardens token-exchange handling so that:

  • current_shopify_domain resolves to the authenticated shop from the verified token or session.
  • authenticated_shopify_domain exposes the trusted authenticated shop.
  • requested_shopify_domain exposes the sanitized requested shop parameter for bootstrap or routing use cases only.
  • Token-exchange requests are rejected with 401 Unauthorized when the requested shop does not match the authenticated shop.

Impact

In affected applications, an attacker with a valid Shopify session token for one shop could send an authenticated request that also supplied a different shop query parameter. If the application relied on current_shopify_domain or params[:shop] for security-sensitive shop scoping, application code could operate in the context of the requested shop rather than the authenticated shop.

Affected applications are those that:

  1. Use shopify_app token-exchange authentication;
  2. Accept authenticated controller requests where a shop query parameter may be present; and
  3. Use current_shopify_domain or the request shop parameter for authorization, tenant lookup, stored access-token selection, or shop-scoped resource access.

Depending on the application’s authorization model, this could result in unauthorized access to another shop’s application data or unauthorized shop-scoped actions.

Remediation

Upgrade to shopify_app version 23.0.3

Workarounds

Applications that cannot upgrade immediately should apply equivalent validation in token-exchange authenticated controllers:

  • Do not use params[:shop] for authorization, tenant lookup, access-token selection, or data scoping.
  • On vulnerable versions, avoid relying on current_shopify_domain for security-sensitive shop scoping if a shop query parameter may be present.
  • Use the authenticated shop from the verified ID token or active Shopify session instead, such as current_shopify_session.shop or the verified JWT dest value.
  • If a sanitized params[:shop] value is present, reject the request with 401 Unauthorized when it does not match the authenticated shop.

Credit

This issue was responsibly reported by Hackerone researcher leqtuer.

Technical POC Analysis

CWE-863 (Incorrect Authorization).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-63414 is a high-severity vulnerability in the Shopify shopify_app Ruby gem (versions 22.1.0 to 23.0.2) that enables an authenticated attacker with a valid session for one store to confuse the application into treating a different store as the current shop. This cross-shop context confusion could allow unauthorized access to another store's data if the application relies on vulnerable parameters for authorization or tenant lookup. Leadership should care because multi-tenant Shopify apps built with this gem may face data exposure and trust erosion, requiring immediate assessment and patching.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.5%
Top 54% exploitable
Prevalence
Medium
official Shopify Rails gem, common among Shopify app developers but not universal
Threat Intel
1
1 source
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Affected Products (CPE)CVE.org

pkg:rubygems/shopify_app
CVE-2020-8176 MEDIUM POC
6.1 Jul 02

A cross-site scripting vulnerability exists in koa-shopify-auth v3.1.61-v3.1.62 that allows an attacker to inject JS pay

CVE-2025-61686 CRITICAL
9.1 Jan 10

React Router (@react-router/node 7.0.0-7.9.3) has a path traversal in file-based session storage when using unsigned coo

CVE-2026-21884 HIGH
8.2 Jan 10

React Router is a router for React. In @remix-run/react version prior to 2.17.3. [CVSS 8.2 HIGH]

CVE-2025-59057 HIGH
7.6 Jan 10

React Router is a router for React. In @remix-run/react versions 1.15.0 through 2.17.0. [CVSS 7.6 HIGH]

CVE-2026-57748 HIGH
7.5 Jul 02

Local File Inclusion in the Shopify (Shopify Help Center) WordPress plugin through version 1.0.0 allows an authenticated

CVE-2025-68470 MEDIUM
6.5 Jan 10

React-Router versions up to 6.30.1 is affected by url redirection to untrusted site (open redirect) (CVSS 6.5).

CVE-2026-22030 MEDIUM
6.5 Jan 10

React Router is a router for React. In @remix-run/server-runtime version prior to 2.17.3. [CVSS 6.5 MEDIUM]

CVE-2026-39862 MEDIUM
6.3 Apr 08

Remote code execution in Tophat mobile testing harness prior to 2.5.1 allows authenticated network attackers to execute

CVE-2026-22029 MEDIUM
6.1 Jan 10

React Router is a router for React. In @remix-run/router version prior to 1.23.2. [CVSS 8.0 HIGH]

CVE-2022-29230 MEDIUM
5.4 May 18

Hydrogen is a React-based framework for building dynamic, Shopify-powered custom storefronts. Rated medium severity (CVS

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy