{"items":[{"id":"NVI-00008293","kind":"vulnerability","title":"Craft Commerce has a SQL Injection can lead to Remote Code Execution via TotalRevenue Widget","revision":4,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected.","NVD lastModified does not establish freshness of every associated CPE record."],"lifecycle":"active","identifiers":["GHSA-875v-7m49-8x88","CVE-2026-32271"],"plain_summary":"OSV carries this publisher advisory for craftcms/commerce, craftcms/commerce. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"The original advisory lists fixed boundaries 4.10.3 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 5.5.5 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-075404cd3e41c3ca29428cd8ac13483b"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-26T21:10:00.170Z","value":"7.7 HIGH (4.0)","meaning":"security-advisories@github.com severity; no combined Null risk score.","source_id":"sr-5ddd4c3e6765d1db3c66f4548cbed795"},{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.476%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.41248. Missing scores are unknown.","source_id":"sr-075404cd3e41c3ca29428cd8ac13483b"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-fd9e566ae0e3762e7738e86a303d1e3f","url":"https://github.com/advisories/GHSA-875v-7m49-8x88","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-875v-7m49-8x88","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:41:59.958Z"},{"id":"sr-5ddd4c3e6765d1db3c66f4548cbed795","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-32271","basis":"official_catalog","notes":"This product uses data from the NVD API but is not endorsed or certified by the NVD.","title":"CVE-2026-32271","publisher":"NIST National Vulnerability Database","observed_at":"2026-11-03T22:34:42.177Z"},{"id":"sr-075404cd3e41c3ca29428cd8ac13483b","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-32271","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.324Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 4.0.0; fixed 4.10.3"]},{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 5.0.0; fixed 5.5.5"]}],"null_published_at":"2026-11-07T07:07:42.464Z","source_updated_at":"2026-04-14T00:41:06.972Z","source_disclosed_at":"2026-04-14T00:07:34.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Source facts changed; compare the preserved prior revision.","null_first_observed_at":"2026-10-31T21:41:59.958Z"},{"id":"NVI-00008293","kind":"vulnerability","title":"Craft Commerce has a SQL Injection can lead to Remote Code Execution via TotalRevenue Widget","revision":3,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-875v-7m49-8x88","CVE-2026-32271"],"plain_summary":"OSV carries this publisher advisory for craftcms/commerce, craftcms/commerce. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"The original advisory lists fixed boundaries 4.10.3 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 5.5.5 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-075404cd3e41c3ca29428cd8ac13483b"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.476%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.41248. Missing scores are unknown.","source_id":"sr-075404cd3e41c3ca29428cd8ac13483b"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-fd9e566ae0e3762e7738e86a303d1e3f","url":"https://github.com/advisories/GHSA-875v-7m49-8x88","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-875v-7m49-8x88","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:41:59.958Z"},{"id":"sr-075404cd3e41c3ca29428cd8ac13483b","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-32271","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.324Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 4.0.0; fixed 4.10.3"]},{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 5.0.0; fixed 5.5.5"]}],"null_published_at":"2026-11-06T07:24:11.273Z","source_updated_at":"2026-04-14T00:41:06.972Z","source_disclosed_at":"2026-04-14T00:07:34.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-10-31T21:41:59.958Z"},{"id":"NVI-00008293","kind":"vulnerability","title":"Craft Commerce has a SQL Injection can lead to Remote Code Execution via TotalRevenue Widget","revision":2,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-875v-7m49-8x88","CVE-2026-32271"],"plain_summary":"OSV carries this publisher advisory for craftcms/commerce, craftcms/commerce. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"The original advisory lists fixed boundaries 4.10.3 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 5.5.5 for craftcms/commerce. Confirm the publisher’s latest guidance.","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-106f02bb1054cad33929251eeca9e14f"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"EPSS","as_of":"2026-10-31T12:00:27.000Z","value":"0.476%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.41144. Missing scores are unknown.","source_id":"sr-106f02bb1054cad33929251eeca9e14f"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-fd9e566ae0e3762e7738e86a303d1e3f","url":"https://github.com/advisories/GHSA-875v-7m49-8x88","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-875v-7m49-8x88","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:41:59.958Z"},{"id":"sr-106f02bb1054cad33929251eeca9e14f","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-32271","publisher":"FIRST EPSS","observed_at":"2026-10-31T22:06:15.376Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 4.0.0; fixed 4.10.3"]},{"certainty":"source_listed","source_ids":["sr-fd9e566ae0e3762e7738e86a303d1e3f"],"technology":"craftcms/commerce","known_exclusions":[],"conditions_summary":"## Summary\n\nA SQL injection in the Commerce TotalRevenue widget can lead to remote code execution through a chain of four vulnerabilities:\n\n* SQL Injection -- The TotalRevenue stat interpolates unsanitized widget settings directly into a sprintf-based SQL Expression.  Any control panel user can create any widget type without permission checks.\n\n* PDO Multi-Statement Queries -- PHP `PDO MySQL` enables `CLIENT_MULTI_STATEMENTS` by default. Neither Yii2 nor Craft CMS disables it. This allows stacking an INSERT statement after the injected SELECT , writing a maliciously serialized PHP object into the queue table.\n\n* Unrestricted `unserialize()` -- The yii2-queue PhpSerializer calls `unserialize()` with no allowed_classes restriction on every queue job. When the queue consumer processes the injected job, it instantiates the attacker-controlled object.\n\n* Gadget Chain (FileCookieJar) -- `GuzzleHttp\\Cookie\\FileCookieJar` (a standard Guzzle dependency) has an unguarded `__destruct()` method that calls `file_put_contents()`. The attacker’s serialized payload writes a PHP webshell to the server’s webroot. PHP tags survive `json_encode()` because Guzzle uses `options=0` (no `JSON_HEX_TAG`).\n\n","public_affected_ranges":["ECOSYSTEM: introduced 5.0.0; fixed 5.5.5"]}],"null_published_at":"2026-10-31T22:13:48.406Z","source_updated_at":"2026-04-14T00:41:06.972Z","source_disclosed_at":"2026-04-14T00:07:34.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-10-31T21:41:59.958Z"}],"next_cursor":null,"snapshot_revision":"42594"}