Affected versions
Symfony 2.7.0 to 2.7.47, 2.8.0 to 2.8.40, 3.3.0 to 3.3.16, 3.4.0 to 3.4.10, and 4.0.0 to 4.0.10 versions of the Symfony http-foundation component are affected by this security issue.
The issue has been fixed in Symfony 2.7.48, 2.8.41, 3.3.17, 3.4.11, and 4.0.11. 4.1.0 has also been fixed before its final release.
Note that no fixes are provided for Symfony 3.0, 3.1, and 3.2 as they are not maintained anymore.
Description
The PDOSessionHandler
class allows to store sessions on a PDO connection.
Under some configurations (see below) and with a well-crafted payload, it was
possible to do a denial of service on a Symfony application without too much
resources.
An application is vulnerable when:
It is using
PDOSessionHandler
to store its sessions;And it uses MySQL as a backend for sessions managed by
PDOSessionHandler
;And the SQL mode does not contain
STRICT_ALL_TABLES
orSTRICT_TRANS_TABLES
(check viaSELECT @@sql_mode
).
When an application has this configuration, doing a denial of service is made easier as a well-crafted session leads to an infinite loop in the code.
Resolution
We fixed this issue by avoiding the inifinite loop.
Credits
I would like to thank Federico Stange for reporting this security issue and for working with us trying to figure out when this issue occurred, Nicolas Grekas for working on a fix, and the Symfony Core Team for reviewing the patch.