Hervé Godquin

Aller au contenu | Aller au menu | Aller à la recherche

Quelques nouvelles vulnérabilités dans PHP

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 !

 

 

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://www.herve-godquin.fr/index.php?trackback/12

Fil des commentaires de ce billet