IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un bogue d'exécution de code à distance a été découvert dans PHP 7
Et permet même aux attaquants non techniques de prendre le contrôle des serveurs à distance

Le , par Bill Fassinou

461PARTAGES

6  0 
Il a été récemment découvert dans PHP 7, la dernière version du langage, une faille de sécurité dangereuse et facile à exploiter, car elle permettrait même aux attaquants non techniques de prendre le contrôle des serveurs à distance. La vulnérabilité, qui a été corrigée la semaine dernière, est une exécution de code à distance (RCE) en PHP 7 permettant d’attaquer un serveur Web vulnérable en envoyant des requêtes spécialement conçues et en ajoutant "?a=" dans l'URL. Seuls les serveurs Nginx couplés à l’extension PHP-FPM sont vulnérables.

Dans le registre des bogues de PHP, cette faille est désignée par CVE-2019-11043 et permet aux attaquants d'exécuter des commandes sur les serveurs simplement en accédant à une URL spécialement conçue. Le code d'exploitation de preuve de concept (PoC) public a été publié sur GitHub dans la semaine passée. Le hacker teste d’abord le serveur cible et s’il reçoit une réponse favorable, il peut maintenant lancer son attaque.

La vulnérabilité a été découverte par Andrew Danau, chercheur en sécurité chez Wallarm, une société de cybersécurité sise à San Francisco. Il est tombé sur un comportement inhabituel d'un script PHP lors de la résolution d'une tâche du FCT. Quand Danau a envoyé les octets %0a (newline) dans l'URL, la réponse du serveur était particulière. Il renvoie plus de données qu'il ne devrait y en avoir. De plus, Wallarm a précisé que la quantité de données supplémentaires renvoyées était liée au nombre d'octets après %0a à l'intérieur de l'URL.


« Le plus souvent, ce genre de réaction est lié aux attaques de corruption de la mémoire et nous nous attendions à ce qu'il y ait une attaque contre le type de divulgation de l'information. La divulgation d'informations est déjà assez mauvaise, car elle peut entraîner des fuites de données sensibles ou financières. Pire encore, de temps en temps, bien que très rarement, un tel comportement puisse indiquer une vulnérabilité d'exécution du code à distance », a décrit Wallarm dans un billet de blogue qui explique comment résoudre le problème.

Le script PoC inclus dans le référentiel GitHub peut interroger un serveur Web cible pour vérifier s'il est vulnérable ou non en envoyant des requêtes spécialement conçues. Une fois qu'une cible vulnérable a été identifiée, les attaquants peuvent envoyer des requêtes spécialement conçues en ajoutant « ?a= » dans l'URL à un serveur Web vulnérable. Dans certaines configurations Nginx + PHP-FPM, le bogue peut être déclenché de l'extérieur. Cela signifie qu'un utilisateur Web peut obtenir l'exécution de code si vous avez une configuration vulnérable.

Autrement dit, seuls les serveurs Nginx avec l’extension PHP-FPM sont vulnérables à cette faille. L’exploit ne fonctionne que sous la version 7 de PHP. En effet, le bogue est lié à un débordement de tampon (buffer underflow) dans PHP-FPM. Le buffer underflow en PHP-FPM est aussi présent dans PHP 5, mais l'attaquant peut exploiter une optimisation utilisée pour stocker les variables FastCGI, _fcgi_data_seg. Cette optimisation n'est présente que dans PHP 7.

Ainsi, cette faille n'existe que sur PHP 7. Néanmoins, il peut y avoir une autre technique d'exploitation qui fonctionne pour PHP 5. Pour l’heure, chaque administrateur se doit donc de mettre à jour PHP 7 pour éviter d’être la cible d’une attaque vers les versions les plus récentes, 7.3.11 et 7.2.24, publiées le même jour et incluant les correctifs pour CVE-2019-11043. Mais, il y a aussi des propriétaires de sites Web qui ne peuvent pas mettre à jour PHP ou qui ne peuvent pas passer de PHP-FPM à un autre processeur CGI en raison de contraintes techniques.

Si c’est le cas, le billet de Wallarm montre comment les webmasters peuvent utiliser l'utilitaire de pare-feu standard « mod_security » pour bloquer les octets %0a (newline) dans les URL des sites, et empêcher toute attaque entrante. Une règle « mod_security » pourrait ressembler à ceci : « SecRule REQUEST_URI “@rx %0(a|d)” “id:1,phase:1,t:lowercase,deny” ». Cependant, si vous avez une application de par-feu hérité et appliquez cette règle, le niveau de faux positifs sera élevé. Cela est assez commun pour les par-feux de première génération basés sur une expression RegEx.

D’après Wallarm, sans correction, ce problème peut devenir un point d'entrée dangereux dans vos applications Web, dont la plupart s'exécutent sur une infrastructure PHP. En raison de la disponibilité du code public PoC et de la simplicité d'exploitation de ce bogue, il est conseillé aux propriétaires de sites Web de vérifier les paramètres du serveur et de mettre à jour PHP dès que possible s'ils utilisent la configuration vulnérable.

Sources : PHP, Wallarm, PoC (GitHub)

Et vous ?

Qu'en pensez-vous ?

Voir aussi

Quel langage de programmation comporte le plus de vulnérabilités en matière de sécurité ? Une étude de WhiteSource

Une vulnérabilité inhérente à PHP met à risque des millions de sites web WordPress et l'équipe du CMS ne l'a toujours pas corrigée depuis 2017

Une vulnérabilité 0-day dans un plugin jQuery permettrait de télécharger et d'exécuter du code malveillant sur des serveurs PHP, et ce depuis 2010

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de sergio_is_back
Expert confirmé https://www.developpez.com
Le 29/10/2019 à 13:44
Citation Envoyé par smobydick Voir le message
Je n'ai pas compris.
Il y avait peu être rien à comprendre...
1  0 
Avatar de smobydick
Membre averti https://www.developpez.com
Le 29/10/2019 à 12:43
Citation Envoyé par Jonathan muswil Voir le message
On dirait le developper de php doivent mettre a jour leur platforme pour corriger sa je pense sinon pour eux ce oufff danger ???
Je n'ai pas compris.
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 29/10/2019 à 16:12
@Jonathan muswil, Quoi ?
@smobydick & @sergio_is_back,

Qu'en pensez-vous ?
Laisser un environnement d’exécution complet côté serveur de prod me parait être de moins en moins une bonne idée .
Mais bon, c'est un peut une obligation au vue des contraintes de temps imposées par les clients .
Donc c'est aussi leurs fautes quelque part .
1  1 
Avatar de dasdeb
Membre actif https://www.developpez.com
Le 31/10/2019 à 14:16
D'après ce que je comprends, le problème vient plutôt de la configuration de nginx. La preuve en est que ça n'arrive pas avec Apache et qu'il suffit de modifier la configuration de nginx pour que ce soit corrigé.
Passer à PHP un string qui comporte un retour à la ligne n'a rien d'exceptionnel, par contre, passer une URI qui en comporte l'est (sauf dans le cas d'un GET particulier...).
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 06/11/2019 à 1:19
Citation Envoyé par dasdeb Voir le message
D'après ce que je comprends, le problème vient plutôt de la configuration de nginx.
La preuve en est que ça n'arrive pas avec Apache et qu'il suffit de modifier la configuration de nginx pour que ce soit corrigé.
Passer à PHP un string qui comporte un retour à la ligne n'a rien d'exceptionnel, par contre, passer une URI qui en comporte l'est (sauf dans le cas d'un GET particulier...).
Oula, c'est un beau sophisme ça.
Le problème ne vient pas de NGINX pour autant, mais du couple NGINX/PHP-FPM (d'après l'article), c'est donc normale qu'il n’apparaisse pas avec Apache, mais ça n'en fait pas pour autant un problème de NGINX.

D’ailleurs en consultant le CVE-2019-11043 Detail
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it is possible to cause FPM module to write past allocated buffers into the space reserved for FCGI protocol data, thus opening the possibility of remote code execution.
On comprend que le problème viendrait en réalité du module PHP-FPM et donc qu'il pourrait aussi bien toucher Apache, qu'NGINX (qui n'est même pas évoqué dans la description de cette CVE) ou qu'un autre serveur l'utilisant.
0  0 
Avatar de MarvinG76
Nouveau membre du Club https://www.developpez.com
Le 26/11/2019 à 15:24
Citation Envoyé par sergio_is_back
Il y avait peu être rien à comprendre...
J'ai traduit !

"On dirait que, pour corriger ça, les développeurs de PHP doivent mettre à jour leur plateforme, je pense !
Sinon, c'est ouf pour eux ! Danger ???"
0  0 
Avatar de Jonathan muswil
Membre à l'essai https://www.developpez.com
Le 29/10/2019 à 9:35
On dirait le developper de php doivent mettre a jour leur platforme pour corriger sa je pense sinon pour eux ce oufff danger ???
1  10