Skip to main content

Shopper Framework CVE-2026-56831

| EUVDEUVD-2026-78917 MEDIUM
Improper Input Validation (CWE-20)
2026-09-11 https://github.com/shopperlabs/shopper GHSA-5vf4-452p-jjhf
6.5
CVSS 3.1 · Vendor: https://github.com/shopperlabs/shopper
Share

Severity by source

Vendor (https://github.com/shopperlabs/shopper) PRIMARY
6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
vuln.today AI
4.9 MEDIUM

Admin authentication explicitly required per advisory reproduction steps, correcting input PR:L to PR:H; no confidentiality or availability impact applies.

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

Primary rating from Vendor (https://github.com/shopperlabs/shopper).

CVSS VectorVendor: https://github.com/shopperlabs/shopper

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

3
Metadata Corrected
Sep 11, 2026 - 22:40 vuln.today
tag: Information Disclosure removed
Source Code Evidence Fetched
Sep 11, 2026 - 22:01 vuln.today
Analysis Generated
Sep 11, 2026 - 22:01 vuln.today

DescriptionCVE.org

Summary

The Shopper Framework discount management functionality accepts negative discount values without server-side validation.

It was confirmed that negative fixed-amount discounts can be created through the administrative interface, persisted to the database, and subsequently processed by the cart/order calculation pipeline.

The application appears to assume that discount values are always positive but does not enforce this assumption during creation, storage, or calculation.

As a result, malformed discount records can influence financial calculations and produce unintended order totals.

---

Affected Product

Package: shopper/framework

Version Tested: 2.8.1

---

Vulnerability Type

  • Business Logic Vulnerability
  • Improper Input Validation (CWE-20)

---

Description

While reviewing the discount functionality, it was discovered that the application accepts negative discount values through the administrative interface.

Example values tested:

text
-50.00
-99,999,999.00

The application accepted these values without validation and stored them in the database.

Example records observed in the sh_discounts table:

text
1 | QCZ5Y3HESM | fixed_amount | -5000
4 | TOZKAHCB4S | fixed_amount | -9999999900

This demonstrates that negative discount values are successfully persisted.

---

Steps to Reproduce

1. Create a Discount

Login as an administrator.

Navigate to:

text
/cpanel/discounts

Create a new discount with the following values:

text
Type: fixed_amount
Value: -99999999

Save the discount.

2. Observe Successful Creation

The discount is accepted by the application and displayed in the administration interface.

Example:

text
Code: TOZKAHCB4S
Amount: -$99,999,999.00

3. Verify Database Persistence

Inspect the database:

sql
select * from sh_discounts;

Observed entry:

text
TOZKAHCB4S | fixed_amount | -9999999900

---

Technical Analysis

Discount Calculation

File:

text
vendor/shopper/cart/src/Discounts/DiscountCalculator.php

Observed code:

php
$fixedAmount = $discount->value;

The value is later processed without validation:

php
$fixedAmount = min($fixedAmount, $applicableSubtotal);

When a negative value is supplied:

php
min(-9999999900, 10000)

returns:

php
-9999999900

allowing the negative value to continue through the calculation pipeline.

The resulting adjustment values are inserted into the database:

php
CartLineAdjustment::query()->insert($adjustments);

No validation was identified to ensure that discount amounts are positive before calculations occur.

---

Final Total Calculation

File:

text
vendor/shopper/cart/src/Pipelines/Calculate.php

Observed logic:

php
$context->total = max(
    0,
    $context->taxInclusive
        ? $context->subtotal - $context->discountTotal
        : $context->subtotal - $context->discountTotal + $context->taxTotal
);

Because negative discount values are allowed to reach this stage, financial calculations are performed using malformed discount data.

Example:

text
Subtotal      = 10000
DiscountTotal = -5000

Resulting calculation:

text
10000 - (-5000)

Result:

text
15000

This demonstrates that negative discount values directly affect order total calculations.

---

Impact

The following was confirmed:

  • Negative discount values are accepted.
  • Negative discount values are persisted.
  • Negative discount values are processed by the discount calculation engine.
  • Negative discount values affect order total calculations.

Potential consequences include:

  • Incorrect pricing calculations.
  • Financial data integrity issues.
  • Unexpected order totals.
  • Violated assumptions within downstream pricing logic.
  • Future vulnerabilities if additional components assume discount values are always positive.

Because Shopper is a headless e-commerce administration framework and does not ship with a customer-facing storefront, it was not verified a customer-facing exploitation path.

However, malformed discount records currently propagate through pricing calculations without validation.

---

Recommendation

Implement server-side validation enforcing positive discount values before persistence and before entering the calculation pipeline.

Suggested validation:

Fixed Amount Discounts

text
value > 0

Percentage Discounts

text
0 < value <= 100

Additionally, existing discount records should be validated before calculation to prevent malformed data from influencing pricing logic.

---

Environment

text
Shopper Framework 2.8.1
Laravel 12.61.1
PHP 8.4.16
SQLite

AnalysisAI

Shopper Framework versions prior to 2.9.0 permit authenticated administrators to create fixed-amount discount records with negative values through the /cpanel/discounts control panel, bypassing all server-side validation. The malformed values persist to the sh_discounts database table and flow unchecked through DiscountCalculator.php, where PHP's min() built-in lacks a lower-bound guard; a negative discount (e.g., -$99,999,999) causes the subtraction in Calculate.php to inflate rather than reduce order totals (subtotal 10,000 − discount −5,000 = 15,000). …

Unlock full vulnerability intelligence

  • Risk assessment & exploitation conditions
  • Attack chain visualization
  • Remediation with exact patch versions
  • Threat intelligence from 22 sources
  • Personal watchlist & email alerts

Free forever · No credit card required

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata

Access
technique details hidden
Delivery
technique details hidden
Exploit
technique details hidden
Execution
technique details hidden
Persist
technique details hidden
Impact
technique details hidden

Vulnerability AssessmentAI

Exploitation Exploitation requires authenticated administrator access to the Shopper Framework control panel; the attacker must be able to create or modify discount records at /cpanel/discounts, a privilege restricted to admin-level accounts. … Additional conditions and limiting factors are described in the full assessment.
Risk Assessment The provided CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N scores 6.5 and the I:H rating for integrity impact is justified by direct financial data manipulation. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in.
Exploit Scenario Full exploit scenario with step-by-step reproduction available after sign-in.
Remediation Upgrade to shopper/framework version 2.9.0 or later, which is the vendor-confirmed patched release per GitHub Advisory GHSA-5vf4-452p-jjhf (https://github.com/shopperlabs/shopper/security/advisories/GHSA-5vf4-452p-jjhf). … Detailed patch versions, workarounds, and compensating controls in full report.

Threat intelligence, references, and detailed analysis are available after sign-in.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

Share

CVE-2026-56831 vulnerability details – vuln.today

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