Quelques nouvelles vulnérabilités dans PHP
Par Hervé GODQUIN le dimanche 22 septembre 2019, 18:24 - Vulnérabilités - Lien permanent
Récemment quelques vulnérabilités ont été découvertes dans PHP.
Toutes concernent le traitement des images, j'ai néanmoins choisi de montrer l'une d'entre elle car c'est comment dire ... un classique au final.
Voici le code vulnérable :
if (*(p1 + 1) == '=') {
++p1;
--str_left;
}
err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
On voit tout de suite le problème ... que se passe-t-il si str_left = 0 ? ... forcément quelque chose de pas très bien, on le devine aisément.
Le problème est que str_left est un unsigned integer. Et ce vulnérabilité est comprise dans une boucle for qui en fin de boucle refait un str_left-- ... nous avons donc un énorme entier par la suite.
Et quand dans cette boucle nous avons des opérations de lecture nous nous retrouvons donc bien face à un : "Out-of-bounds read due to integer overflow".
La correction est assez simple :
* we can do at this point. */
if (*(p1 + 1) == '=') {
++p1;
- --str_left;
+ if (str_left > 1) {
+ --str_left;
+ }
}
err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
Pour plus d'informations : https://bugs.php.net/bug.php?id=78069
Concernant les autres vulnérabilités dans PHP :
https://bugs.php.net/bug.php?id=77950
https://bugs.php.net/bug.php?id=77988
https://bugs.php.net/bug.php?id=78222
https://bugs.php.net/bug.php?id=78256
A vos patchs !