CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-94462

CVE-2026-94462: Broken Access Control in Spree Store API v3 Cart Association

Alon Barad
Alon Barad
Software Engineer

Sep 23, 2026·6 min read·44 visits

Executive Summary (TL;DR)

Authenticated attackers can hijack arbitrary guest carts and leak customer PII by exploiting guessable cart IDs and a lack of token verification in the Spree Store API cart association endpoint.

An Insecure Direct Object Reference (IDOR) vulnerability exists in Spree open-source e-commerce solution versions 5.4.0 through 5.4.3 and 5.5.0 through 5.5.3. An authenticated attacker can predict or enumerate guest cart identifiers generated via Sqids and associate them with their own account. This unauthorized association leaks sensitive customer personally identifiable information (PII) and disrupts the checkout flow of active guest sessions.

Vulnerability Overview

The vulnerability exists in Spree open-source e-commerce solution versions 5.4.x (prior to 5.4.4) and 5.5.x (prior to 5.5.4). It resides specifically in the Spree::Api::V3::Store::CartsController#associate controller action. This endpoint is designated for linking a guest cart to an authenticated customer account.

Under default conditions, guest carts are assigned sequential database identifiers. The system obfuscates these identifiers externally using the Sqids library. The resulting strings, known as prefixed IDs, are reversible and lack cryptographic security, which enables users to predict valid cart identifiers.

An authenticated customer can submit an association request for a victim guest cart using its predicted prefixed ID. Because the application logic does not verify ownership of the guest cart during lookup, the server updates the cart owner to the attacker. Consequently, the attacker receives the complete serialized details of the target cart, including the victim guest's personally identifiable information.

Root Cause Analysis

The root cause of CVE-2026-94462 is a failure to enforce authorization checks during the cart association process. The application utilizes the Sqids encoding standard to generate public identifiers. Because Sqids is a non-cryptographic, salt-free algorithm, any authenticated client can decode their own cart's ID and systematically compute sequential database identifiers for other carts.

The lookup process in the vulnerable controller handles the query by matching the ID against inactive or unowned carts. Specifically, the database query filters for carts belonging to the current store where the user attribute is null. This logic is intended to match any guest cart.

However, the application accepts the user-controlled key as the sole authorization credential. The controller lacks a check to verify if the requesting client actually initialized or possessed the target guest cart. This omission permits any logged-in user to claim any unauthenticated session cart stored in the database.

Code Analysis

The vulnerable implementation of find_cart_for_association did not validate whether the client possessed the corresponding guest token. The system only checked whether the cart belonged to the store and was unassociated. The following code snippet demonstrates the vulnerable controller logic:

# Vulnerable Controller Logic
def associate
  @cart = find_cart_for_association
 
  # The association service executes without verifying the client's token
  result = Spree.cart_associate_service.call(guest_order: @cart, user: current_user, guest_only: true)
 
  if result.success?
    render_serialized_payload(200) { serialize_order(result.value) }
  else
    render_error_payload(result.error)
  end
end
 
private
 
def find_cart_for_association
  # This query retrieves any guest cart matching the provided prefix ID
  current_store.carts.where(user: [nil, current_user]).find_by_prefix_id!(params[:id])
end

The remediation introduces explicit authorization and token verification steps. The patched controller verifies that the request includes the cryptographically secure token associated with the cart. Below is the updated code implementing the security control:

# Patched Controller Logic
def associate
  @cart = find_cart_for_association
  # Enforces update authorization and token possession
  authorize!(:update, @cart, cart_token)
  require_cart_token!
 
  result = Spree.cart_associate_service.call(guest_order: @cart, user: current_user, guest_only: true)
 
  if result.success?
    render_serialized_payload(200) { serialize_order(result.value) }
  else
    render_error_payload(result.error)
  end
end
 
private
 
def require_cart_token!
  # Compares request header x-spree-token with the database-stored cart token
  valid = cart_token.present? && cart_token == @cart.token
 
  raise CanCan::AccessDenied.new(nil, :update, @cart) unless valid
end

Exploitation Methodology

Exploitation of this vulnerability requires a valid registered account on the target Spree platform. The attacker first registers or logs in to obtain a valid JSON Web Token (JWT) or session cookie. This token is used to authenticate requests to the Store API.

The attacker then estimates valid guest cart identifiers. Because Spree uses sequential integers encoded via Sqids, the attacker decodes their own cart's prefixed ID to find the active range of database integers. The attacker then encodes adjacent integer values to generate target identifiers.

Finally, the attacker issues a PATCH request to the associate endpoint. This request targets the calculated guest cart identifier but omits the x-spree-token header. The server processes the request, reassigns the cart, and responds with the full cart payload. This payload contains the victim's name, billing address, shipping address, and phone number.

Impact Assessment

The primary consequence of this vulnerability is the unauthorized disclosure of sensitive customer information. If a guest user has initiated the checkout process, their personal details are stored temporarily in the cart object. This data includes full names, email addresses, phone numbers, and physical addresses.

Additionally, the exploitation causes disruption of the checkout flow. When the attacker associates the guest cart with their own account, the cart's association changes. The victim guest is no longer able to complete their order, as their active session loses access to the hijacked cart.

The vulnerability is rated with a CVSS v3.1 base score of 7.1. The impact on confidentiality is high due to the exposure of raw PII. The impact on integrity is low because the attacker can alter database relationships but cannot modify other server configurations.

Remediation & Detection Guidance

To resolve CVE-2026-94462, administrators must upgrade their Spree installations. The vulnerability is addressed in versions 5.4.4 and 5.5.4. These versions implement strict token verification before allowing any cart association.

For organizations unable to immediately upgrade, a temporary mitigation can be implemented using a Web Application Firewall (WAF). Rules should be configured to inspect traffic to /api/v3/store/carts/*/associate. If the PATCH request does not contain the x-spree-token header, the WAF should drop the connection or return a 403 Forbidden response.

Detection can also be performed via log analysis. Security operations teams should monitor application access logs for multiple sequential PATCH requests to the associate endpoint from a single IP address or user account. A high frequency of such requests targeting distinct cart identifiers suggests automated scanning.

Fix Analysis (2)

Technical Appendix

CVSS Score
7.1/ 10

Affected Systems

Spree >= 5.4.0, < 5.4.4Spree >= 5.5.0, < 5.5.4

Affected Versions Detail

Product
Affected Versions
Fixed Version
Spree
Spree
>= 5.4.0, < 5.4.45.4.4
Spree
Spree
>= 5.5.0, < 5.5.45.5.4
AttributeDetail
CWE IDCWE-639
Attack VectorNetwork
CVSS Score7.1
EPSS ScoreN/A
ImpactConfidentiality (High), Integrity (Low)
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1119Automated Collection
Collection
T1020Automated Exfiltration
Exfiltration
T1078Valid Accounts
Initial Access
CWE-639
Authorization Bypass Through User-Controlled Key

Vulnerability Timeline

Vulnerability patched in Spree repository
2026-07-16
Security advisory GHSA-4825-p4xm-pcf2 published
2026-09-22
CVE-2026-94462 assigned and NVD entry published
2026-09-22

References & Sources

  • [1]GitHub Security Advisory GHSA-4825-p4xm-pcf2
  • [2]Spree Pull Request #14314
  • [3]Spree v5.4.4 Release Tag
  • [4]Spree v5.5.4 Release Tag
  • [5]NVD Record for CVE-2026-94462

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 21 hours ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
6 views•9 min read
•about 22 hours ago•CVE-2026-62284
8.6

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Amit Schendel
Amit Schendel
7 views•8 min read
•about 23 hours ago•CVE-2026-62361
5.5

CVE-2026-62361: Authenticated SQL Injection and Table Access Control Bypass in Listmonk Subscriber Export

CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).

Alon Barad
Alon Barad
9 views•11 min read
•about 24 hours ago•CVE-2026-28385
5.0

CVE-2026-28385: Server-Side Request Forgery in Canonical LXD Image Import

CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.

Amit Schendel
Amit Schendel
9 views•9 min read
•1 day ago•GHSA-9J25-MM2H-2F76
9.9

CVE-2026-48750: Arbitrary File Write on Host via exec-output Symlink in Canonical LXD and Incus

Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.

Alon Barad
Alon Barad
6 views•12 min read
•1 day ago•GHSA-VGHH-5RFX-XHQ8
9.9

CVE-2026-48749: Arbitrary Host File Read and Write via Malicious Image Symlink in Canonical LXD and Incus

CVE-2026-48749 (tracked as GHSA-vghh-5rfx-xhq8 for LXD and GHSA-2q3f-q5pq-g8wv for Incus) is a critical container escape vulnerability in the Canonical LXD and Linux Containers Incus system container managers. By importing a specially crafted container image archive containing duplicate tar member headers, an authenticated attacker can replace the instance rootfs directory with a symbolic link pointing to the underlying host root filesystem. When performing file operations on a stopped container, the privileged forkfile helper binary resolves the symbolic link without confinement and chroots directly into the host filesystem, granting arbitrary root-level file read and write access.

Amit Schendel
Amit Schendel
7 views•9 min read