BlogBang

Faille dans PHP < 5.3.1 – Comment patcher

1347757400 240969c0d1 b Faille dans PHP < 5.3.1   Comment patcher

C’est John, fidèle lecteur de Korben.info qui m’a alerté de cette faille touchant toutes les versions de PHP < 5.3.1. L’exploit consiste à balancer un nombre important de fichiers en upload (+15 000), ce qui force PHP a créer autant de fichiers temporaires, le surchargeant jusqu’à ce que le serveur ne réponde plus. Et ne vous y trompez pas, même si vous n’avez pas de formulaire d’envoi de fichier sur votre site, la faille reste quand même exploitable.

Du coup, pour vous protéger, plusieurs solutions possibles (A vous de choisir) :

  • Mettre la variable « file_uploads = Off » dans le php.ini, ce qui aura pour effet de désactiver complétement l’upload de fichiers
  • Installer PHP >= 5.3.1, qui intègre un patch. Il suffit ensuite de limiter ce nombre d’upload simultannés à 20 par exemple grâce à la variable max_file_uploads dans php.ini
  • Appliquer le patch Suhosin

Pour mettre en place le patch Suhosin, voici comment faire :

sudo apt-get install php5-suhosin

sudo nano /etc/php5/apache2/conf.d/suhosin.ini

et rajouter :

; configuration for php suhosin module
extension=suhosin.so
[suhosin]
suhosin.upload.max_uploads = 25

Relancez ensuite Apache et le tour est joué ! D’ailleurs, je vous recommande d’aller jeter un oeil sur le site de Suhosin pour voir tout ce que propose ce patch pour améliorer la sécurité sur votre serveur.

Encore merci à John pour avoir partager cette info avec nous. Vous aurez plus de détails en allant sur son site et ici.

[photo]

Publicité

Je vous recommande aussi la lecture des sujets suivants


Faites un lien vers cette news sur votre site



36 commentaires

  1. scotch Reply to this comment


    Bon ben j’avais pas que ça à faire mais c’est parti pour une upgrade :)

    Posté le 24 novembre 2009 à 09:40:57

  2. Amaury Reply to this comment


    Cooool, et sur un serveur mutualisé ?
    C’est de la grosse faille là quand même :s

    Posté le 24 novembre 2009 à 10:06:43

  3. Albat Reply to this comment


    ça pourrait expliquer pourquoi la page de download de mon forum fait partie des plus vues…

    Posté le 24 novembre 2009 à 10:31:43

  4. Avish Reply to this comment


    Autre solution qui marche bien : apt-get remove apache

    puis faire : apt-get install lighttpd

    apache sa fait longtemps qu’il est mort et enterrer chez moi ^^

    Posté le 24 novembre 2009 à 11:02:00

  5. Korben Reply to this comment


    @Avish: ouais sauf que la, la faille est sur PHP, pas Apache…

    Posté le 24 novembre 2009 à 11:07:04

  6. liandri Reply to this comment


    Merci pour l’info,

    Est-ce que ceci concerne aussi les serveurs gentoo release 2 d’ovh ?

    Posté le 24 novembre 2009 à 11:20:13

  7. John Reply to this comment


    liandri: La faille concerne toutes les versions de PHP < 5.3.1

    Par rapport à:

    et rajouter :

    ; configuration for php suhosin module
    extension=suhosin.so
    [suhosin]
    suhosin.upload.max_uploads = 25

    La directive par défaut c'est 25, donc si vous laissez à 25 vous pouvez laisser le ; devant la ligne, il loadera par défaut.
    Par contre l'extension suhosin change pas mal de choses sur votre serveur, donc si vous avez des sites gourmand sur votre serveur de mutu, vous pouvez éditer la conf, genre directement dans le vhost ou dans un htaccess ajouter:

    php_admin_value suhosin.upload.max_uploads 50
    php_admin_value suhosin.post.max_vars 10000
    php_admin_value suhosin.request.max_vars 10000

    Et pour les zones « protégées » ultra gourmandes, genre backoffice de cochon:

    php_flag suhosin.simulation On

    Ca vous désactivera suhosin dans le rep.

    Posté le 24 novembre 2009 à 11:24:18

  8. Korben Reply to this comment


    @liandri: oui

    Posté le 24 novembre 2009 à 11:27:32

  9. lte Reply to this comment


    « Et ne vous y trompez pas, même si vous n’avez pas de formulaire d’envoi de fichier sur votre site, la faille reste quand même exploitable »

    ah ?

    Posté le 24 novembre 2009 à 11:31:20

  10. Julien Reply to this comment


    Je crois bien que sur une Debian Lenny on a le patch Suhosin d’origine (mais j’ai la flemme d’aller vérifier).
    C’est comme le GRSEC pour la noyau : au début j’aimais pas trop, et finalement ça se rend utile de temps en temps ;-)

    Posté le 24 novembre 2009 à 11:31:39

  11. Avish Reply to this comment


    @Korben:
    Ouai juste mais la config de l’upload et comment le serveur gère les processus est différent. J’aimerais bien tester si il plante mais ils donnent pas le code perl…

    @Julien:
    Après avoir contrôler sur mon serveur, il vient pas d’office.

    Posté le 24 novembre 2009 à 11:46:13

  12. Armetiz Reply to this comment


    Personnellement, je n’ai pas réussi à la faire fonctionner :(
    Même avec 1 500 000 fichiers envoyés, rien ne plante. Enfin, j’ai une augmentation du temps de réponse de <1ms à 50ms, mais rien de bien méchant.

    Mon attaque de Kévin ne doit pas être bien rodée :p

    Posté le 24 novembre 2009 à 11:47:59

  13. frankoi Reply to this comment


    @Julien:
    c’est pas le cas,
    j’ai checké sur ma lenny ;)

    Posté le 24 novembre 2009 à 11:54:42

  14. Avish Reply to this comment


    Ah tiens voila le code sur le site :

    http://blog.madpowah.org/archives/2009/11/index.html#e2009-11-22T13_08_00.txt

    Posté le 24 novembre 2009 à 11:57:36

  15. cloud Reply to this comment


    @Armetiz, tiens j’avais codé le sploit ce week end : http://blog.madpowah.org/archives/2009/11/index.html#e2009-11-22T13_08_00.txt .
    Avec 80 requêtes, ca commence à bien lagger ou à couper surtout quand tu as des connexions mysql dans les scripts. Apparemment les systèmes commencent à vraiment crasher au bout de 2 500 000 fichiers envoyés.

    @Albat : Attention en aucun cas cela n’a un rapport avec une page d’upload. C’est du au fait que quand tu envoies des multipart/form-data, le serveur web via php crée en local des fichiers temporaires. Du coup au bout d’un moment, il a du mal à traiter :)

    PS : ah Avish tu as été plus rapide à 4s prêt :p Merci pour le lien vers mon blog ;)

    Posté le 24 novembre 2009 à 11:57:40

  16. cloud Reply to this comment


    @Julien @frankoi : Attention le patch Suhosin ne protège en rien ! C’est le Suhosin PHP extension qui protège de cette vulnérabilité, ce n’est pas la même chose et beaucoup confondent :)

    Posté le 24 novembre 2009 à 12:02:41

  17. Avish Reply to this comment


    @cloud:

    ;) pas de soucis. Joli le code python.

    Par contre vulnérabilité pas encore confirmé sur lighttpd ^^ avec 13000 et ton script mon serveur bronche pas.

    Posté le 24 novembre 2009 à 12:05:45

  18. cloud Reply to this comment


    @Avish: Merci :)
    Test bien d’ouvrir un code php genre un forum sur ton serveur car j’ai constaté en testant sur un serveur avec du contenu statique (même si PHP est présent) que cela ne bronchait pas.
    J’avais testé sur un lighttpd aussi sans réussite.

    J’ai testé également sur un Apache protégé par un RP (mod_security2) et la ca marche quand même.

    Posté le 24 novembre 2009 à 12:12:48

  19. Sebastien Reply to this comment


    Ca explique surement pourquoi de nombreux sites que je visite quotidiennement sont totalement down.
    Ajaxian.com par exemple,
    ou les centaines de milliers de site heberges sur dreamhost.com…

    J’ai l’impression qu’on se dirige sur un crash majeur la… la faille est tres facilement exploitable et le temps que chaque administrateur patch son php…

    Posté le 24 novembre 2009 à 12:29:18

  20. Korben Reply to this comment


    @Sebastien: Effectivement, ça a l’air d’être l’hécatombe là. En ce qui me concerne, c’est patché !

    Posté le 24 novembre 2009 à 12:33:42

  21. Colin Reply to this comment


    Outch c’est la tuile.

    Merci pour l’information, à transmettre de toute urgence.

    Posté le 24 novembre 2009 à 12:36:03

  22. Albat Reply to this comment


    et du coup, pour patcher un serveur mutualisé, on attend que l’hébergeur le fasse ou on peut se débrouiller tout seul ?

    Posté le 24 novembre 2009 à 12:51:04

  23. Avish Reply to this comment


    @Albat:

    Tu téléphones au support…

    Posté le 24 novembre 2009 à 12:53:16

  24. Avish Reply to this comment


    @cloud:
    J’ai même tester avec un script d’upload sur le serveur… aucun résultat.

    @Korben:
    Donc je confirme lighttpd n’est pas vulnérable même si c’est php qui l’est.

    Vive lighttpd \o/ à mort Apache :-P

    Posté le 24 novembre 2009 à 13:10:52

  25. Korben Reply to this comment


    @Avish: Avish 1 – Korben 0 :-)
    Tant mieux alors pour les lighttpd fan… et sur nginx, on a des resultats ?

    Posté le 24 novembre 2009 à 13:27:27

  26. TomA Reply to this comment


    C’est étrange… Sur mon Ubuntu 9.04 avec LAMP et PHP 5.2.6, j’ai l’impression que je l’ai déjà :

    Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch Server at localhost Port 80

    Je n’ai pourtant installé que apache2, mysql-server et php5…

    Posté le 24 novembre 2009 à 19:36:14

  27. Faille détectée dans PHP < 5.3.1 « Blog Web-Petit Reply to this comment


    [...] : Korben.info et John-Jean.com (très détaillé). Partagez-le sur del.icio.usPubliez-le sur MySpacePartagez-le [...]

    Posté le 24 novembre 2009 à 21:26:30

  28. John Reply to this comment


    @TomA & les autres: Suhosin Patch != Suhosin extension.

    @avish: Perso le script en python fonctionnait pas terrible chez moi. Je me suis codé mon propre exploit en PHP, il fait du 100% de réussite pour le moment (sauf si extension). Si je peux tester sur un lighttpd je suis preneur.
    @cloud: le script que j’ai fait semble fonctionner même si php sort du contenu statique.

    Posté le 24 novembre 2009 à 22:21:14

  29. phiphi Reply to this comment


    @John: Salut John, c’est possible d’avoir ton script PHP ?

    Posté le 25 novembre 2009 à 09:51:35

  30. Avish Reply to this comment


    @John:
    Je testerai bien ton script John.

    Tu le rends disponible ?

    @Korben:
    :) merci mais c’est pas le but d’avoir raison. Pis je dirais Lighttpd 1 – Apache 0

    C’est surtout pour faire de la pub à lighttpd ^^ je trouve qu’il marche vraiment bien, que se sois à la configuration, la vitesse, etc.

    Posté le 25 novembre 2009 à 09:52:23

  31. John Reply to this comment


    @Avish & @phiphi: je préfère pour le moment tester sur des hosts genre lighttpd voir si c’est OK. Si vous avez un serveur de dev qui peut (hypothétiquement), se faire remplir le /tmp, je suis interessé.

    Posté le 25 novembre 2009 à 11:13:36

  32. phiphi Reply to this comment


    @John: ok, malheureusement j’ai seulement des servers de dev en local avec apache

    Posté le 25 novembre 2009 à 11:24:53

  33. Christian Nganzi Reply to this comment


    Mercie korben

    Posté le 25 novembre 2009 à 16:07:38

  34. Avish Reply to this comment


    @John:

    Mon serveur est sous lighttpd, mais pas trop envie de balancer l’adresse ici… pas envie de me faire flooder :P

    Dommage qu’on ne puisse pas envoyer un message privé à un utilisateur.

    ++

    Posté le 25 novembre 2009 à 17:03:20

  35. Nico Reply to this comment


    Si quelqu’un veut tester contre http://tl.byme.at/p.php :)
    LB haproxy qui sort sur du lighttpd

    Posté le 27 novembre 2009 à 00:56:20

  36. Lecture de la semaine #10 | DevZone - Zone de développement web Reply to this comment


    [...] Sécurité PHP : Korben qui via John nous révele une faille dans PHP < 5.3.1. Bien heureusement, il nous indique comment la corriger Faille dans PHP < 5.3.1 – Comment patcher [...]

    Posté le 27 novembre 2009 à 17:00:28