CVE-2026-29172
Craft Commerce has a SQL Injection in Commerce Purchasables Table Sorting
Craft Commerce is an ecommerce platform for Craft CMS. Prior to 4.10.2 and 5.5.3, Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause. This vulnerability is fixed in 4.10.2 and 5.5.3.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.7
Craft Commerce has a SQL Injection in Commerce Purchasables Table Sorting
Craft Commerce is an ecommerce platform for Craft CMS. Prior to 4.10.2 and 5.5.3, Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause. This vulnerability is fixed in 4.10.2 and 5.5.3.
- Record
CVE-2026-29172- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
EUVDEUVD-2026-10813
8.7
Craft Commerce is an ecommerce platform for Craft CMS. Prior to 4.10.2 and 5.5.3, Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause. This vulnerability is fixed in 4.10.2 and 5.5.3.
- Record
EUVD-2026-10813- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-j3x5-mghf-xvfw
8.7
Craft Commerce is Vulnerable to SQL Injection in Commerce Purchasables Table Sorting
Summary
Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause.
PoC
Required Permissions
- General
- Access the control panel
- Access Craft Commerce
- Craft Commerce
- Manage orders
- Edit orders
Steps to reproduce
- Log in to the control panel
- Navigate to Commerce > Orders > Create a new order
- Click on "Add a line item" to show the purchasables table
- Intercept the AJAX request and modify the
sortparameter as follows:
GET /index.php?p=admin/actions/commerce/orders/purchasables-table&siteId=1&sort=id,(SELECT%20SLEEP(2))|asc
- Observe the delay in the response, confirming the injection
Alternatively, you can use the following curl (bash syntax) command (replace cookie and target domain as needed):
curl --path-as-is -k -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0' -H $'Accept: application/json, text/plain, */*' -b $'<Cookie>' $'http://craft.local/index.php?p=admin%2Factions%2Fcommerce%2Forders%2Fpurchasables-table&siteId=1&sort=id,(SELECT%20SLEEP(5))|asc'
Impact
With this Blind SQLi, an attacker can:
- Exfiltrate data character-by-character (same technique as GHSA-pmgj-gmm4-jh6j).
- Modify or destroy data (drop tables, update records, alter schema).
- Record
GHSA-j3x5-mghf-xvfw- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
NVD
8.7
Craft Commerce is an ecommerce platform for Craft CMS. Prior to 4.10.2 and 5.5.3, Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause. This vulnerability is fixed in 4.10.2 and 5.5.3.
- Record
CVE-2026-29172- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSV
8.7
Craft Commerce has a SQL Injection in Commerce Purchasables Table Sorting
Craft Commerce is an ecommerce platform for Craft CMS. Prior to 4.10.2 and 5.5.3, Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause. This vulnerability is fixed in 4.10.2 and 5.5.3.
- Record
CVE-2026-29172- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVGHSA-j3x5-mghf-xvfw
8.7
Craft Commerce is Vulnerable to SQL Injection in Commerce Purchasables Table Sorting
Summary
Craft Commerce is vulnerable to SQL Injection in the purchasables table endpoint. The sort parameter is split by | and the first part (column name) is passed directly as an array key to orderBy() without whitelist validation. Yii2's query builder does NOT escape array keys, allowing an authenticated attacker to inject arbitrary SQL into the ORDER BY clause.
PoC
Required Permissions
- General
- Access the control panel
- Access Craft Commerce
- Craft Commerce
- Manage orders
- Edit orders
Steps to reproduce
- Log in to the control panel
- Navigate to Commerce > Orders > Create a new order
- Click on "Add a line item" to show the purchasables table
- Intercept the AJAX request and modify the
sortparameter as follows:
GET /index.php?p=admin/actions/commerce/orders/purchasables-table&siteId=1&sort=id,(SELECT%20SLEEP(2))|asc
- Observe the delay in the response, confirming the injection
Alternatively, you can use the following curl (bash syntax) command (replace cookie and target domain as needed):
curl --path-as-is -k -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0' -H $'Accept: application/json, text/plain, */*' -b $'<Cookie>' $'http://craft.local/index.php?p=admin%2Factions%2Fcommerce%2Forders%2Fpurchasables-table&siteId=1&sort=id,(SELECT%20SLEEP(5))|asc'
Impact
With this Blind SQLi, an attacker can:
- Exfiltrate data character-by-character (same technique as GHSA-pmgj-gmm4-jh6j).
- Modify or destroy data (drop tables, update records, alter schema).
- Record
GHSA-j3x5-mghf-xvfw- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
craftcms/commercePackagist |
4.0.0 to 4.10.1 | 4.10.2 |
craftcms/commercePackagist |
5.0.0 to 5.5.2 | 5.5.3 |
craftcms/commercePackagist |
4.0.0 up to 4.10.2, plus listed versions 4.0.14.0.24.0.34.0.44.1.0 Show 45 moreShow less4.1.14.1.24.1.34.10.04.10.14.2.04.2.14.2.104.2.114.2.24.2.34.2.44.2.54.2.5.14.2.64.2.74.2.84.2.94.3.04.3.14.3.24.3.34.4.04.4.14.4.1.14.5.04.5.14.5.1.14.5.24.5.34.5.44.6.04.6.14.6.104.6.114.6.124.6.134.6.144.6.24.6.3.14.6.44.6.54.6.64.6.74.6.8 |
4.10.2 |
craftcms/commercePackagist |
5.0.0 up to 5.5.3, plus listed versions 5.0.15.0.105.0.10.15.0.115.0.11.1 Show 45 moreShow less5.0.125.0.12.15.0.12.25.0.135.0.145.0.155.0.165.0.16.15.0.16.25.0.175.0.185.0.195.0.25.0.35.0.45.0.55.0.65.0.75.0.85.0.95.1.05.1.0-beta.15.1.0-beta.25.1.0-beta.35.1.0.15.1.15.1.25.1.35.1.45.2.05.2.15.2.105.2.115.2.125.2.12.15.2.25.2.2.15.2.35.2.45.2.55.2.65.2.75.2.85.2.95.2.9.1 |
5.5.3 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-29172 is a high vulnerability (CVSS 8.7) in Craftcms Commerce, published March 10, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.47%, the 41st percentile. Fixed in craftcms/commerce 4.10.2.
References
github.com/craftcms/commerce/security/advisories/GHSA-j3x5-mghf-xvfw
github.com/craftcms/commerce/commit/b231b920b73db023e81e5b261b894d73e865c276
github.com/craftcms/commerce/commit/e4e0f4107cd895d29290523637f077fe280407b1
nvd.nist.gov/vuln/detail/CVE-2026-29172
github.com/advisories/GHSA-j3x5-mghf-xvfw
github.com/CVEProject/cvelistV5/tree/main/cves/2026/29xxx/CVE-2026-29172.json
github.com/craftcms/commerce
Left out here: 54 versions. The JSON record has them.