NewApp Monitoring is liveSign up free
AgentbeamBeta
Open-source package vulnerability · Composer (PHP)

GHSA-7vw7-qx38-37vr: Propel2 SQL injection possible with limit() on MySQL

criticalCVSS 3.1 9.8

The limit() query method is susceptible to catastrophic SQL injection with MySQL. For example, given a model User for a table users: This will drop the users table! The cause appears to be a lack of integer casting of the limit input in either Propel\Runtime\ActiveQuery\Criteria::setLimit() or in Propel\Runtime\Adapter\Pdo\MysqlAdapter::applyLimit().

Published May 20, 2024

Affected packages

propel/propel

Ecosystem
Composer (PHP)
Affected
>= 2.0.0-alpha1, <= 2.0.0-alpha7
Fixed in
2.0.0-alpha8
Check
composer show propel/propel

Advisory details

From the GitHub Advisory Database (CC BY 4.0).

The limit() query method is susceptible to catastrophic SQL injection with MySQL.

For example, given a model User for a table users:

UserQuery::create()->limit('1;DROP TABLE users')->find();

This will drop the users table!

The cause appears to be a lack of integer casting of the limit input in either Propel\Runtime\ActiveQuery\Criteria::setLimit() or in Propel\Runtime\Adapter\Pdo\MysqlAdapter::applyLimit(). The code comments there seem to imply that casting was avoided due to overflow issues with 32-bit integers.

This is surprising behavior since one of the primary purposes of an ORM is to prevent basic SQL injection.

This affects all versions of Propel: 1.x, 2.x, and 3.

References

How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. No analysis has been written for this entry yet. Methodology