La fonction mail() de PHP5 et faille injection headers

Petit nouveau ! | 7 Messages

14 févr. 2011, 00:47

Bonsoir,

Savez-vous si la faille par injection de headers dans la fonction mail() a été corrigée dans les dernières version de PHP ? Si oui, savez-vous à partir de quelle version ?

Merci par avance,

Dimitri.

PS. en savoir plus sur cette faille : http://www.phpsecure.info/v2/article/Ma ... Inject.php

ViPHP
ViPHP | 5462 Messages

14 févr. 2011, 01:02

Bonsoir,

Savez-vous si la faille par injection de headers dans la fonction mail() a été corrigée dans les dernières version de PHP ? Si oui, savez-vous à partir de quelle version ?

Merci par avance,

Dimitri.

PS. en savoir plus sur cette faille : http://www.phpsecure.info/v2/article/Ma ... Inject.php
y'a pas de correction a faire, c'est au développeur de faire attention.

Invité
Invité n'ayant pas de compte PHPfrance

14 févr. 2011, 10:29

Pff...

Il me semble que la question posée ne porte pas sur les bonnes pratiques de programmation, ou sur un jugement de qui doit faire quoi...

Le filtrage effectué par le développeur peut très bien être effectué (et avantageusement) par le langage lui-même, comme le font d'ailleurs certaines extensions PHP... La plupart des autres langages ne possèdent pas cette faille.

ViPHP
xTG
ViPHP | 7331 Messages

14 févr. 2011, 10:34

Ce n'est pas une faille donc, c'est une fonctionnalité manquante. ;)
Moi de manière je dis toujours : on est jamais mieux servit que par soi même.

Petit nouveau ! | 7 Messages

14 févr. 2011, 10:48

on est jamais mieux servit que par soi même.
Sauf si c'est redondant et inutile (perte de temps, risque d'erreur...)

Le plus simple pour savoir si cela a été corrigé reste d'effectuer un test, ce que je vais faire.

Mais en attendant, d'après des infos glanées à gauche et à droite, PHP5 ne permettrait plus l'exploitation de cette faille, si les headers ne sont pas mentionnés lors de l'appel de la fonction mail(). Les trois premiers arguments passés à la fonction seraient filtrés. Attention, à vérifier, hein...

ViPHP
ViPHP | 5462 Messages

14 févr. 2011, 12:03

on est jamais mieux servit que par soi même.
Sauf si c'est redondant et inutile (perte de temps, risque d'erreur...)

Le plus simple pour savoir si cela a été corrigé reste d'effectuer un test, ce que je vais faire.

Mais en attendant, d'après des infos glanées à gauche et à droite, PHP5 ne permettrait plus l'exploitation de cette faille, si les headers ne sont pas mentionnés lors de l'appel de la fonction mail(). Les trois premiers arguments passés à la fonction seraient filtrés. Attention, à vérifier, hein...
y'a rien a "corriger" c'est à toi de bien faire ton code.

ViPHP
ViPHP | 2577 Messages

14 févr. 2011, 12:35

Bonjour,

Concernant l'injection par une adresse mail, il est du ressort du développeur de vérifier qu'il s'agit bien d'une adresse mail. Donc, il ne doit pas y avoir de problème.

Par contre pour le sujet, Il faut donc penser à vérifier que le sujet ne comporte de passage à la ligne. PHP pourrait éventuellement faire ce contrôle. Pour ma part je note ce problème pour ne pas avoir de problème.

Petit nouveau ! | 7 Messages

14 févr. 2011, 14:24

y'a rien a "corriger" c'est à toi de bien faire ton code.
Je veux bien, et même après 15 ans d'expérience en développement pro, recevoir des leçons de codage, mais assurez-vous déjà de lire et de comprendre les questions avant de vouloir y répondre :roll: Et si vous ne savez pas y répondre, vous le dites humblement, ou vous ignorez la question, cela évitera de partir en troll HS.

La question était donc juste de savoir si PHP, dans ces dernières versions, avait un mécanisme de filtrage des arguments passés à la fonction mail(), afin d'éviter l'injection d'entêtes. Comme déjà dit, la question n'est pas stupide car, si vous sortiez un peu de la sphère PHP, vous vous rendriez compte que d'autres langages ne sont pas sujets à ces injections.

Pour (votre) information, j'ai trouvé la réponse à ma question : depuis PHP5.2, les arguments "subject" et "to" passés à la fonction mail() sont désormais "protégés" de ce type d'injection...

http://www.php.net/releases/5_2_2.php

Il s'agit d'un fix, donc bien de la correction d'un comportement jusqu'alors aberrant de la fonction mail().

Maintenant, vous pouvez continuer à débattre en mode HS, mais sans moi...

ViPHP
ViPHP | 5462 Messages

14 févr. 2011, 14:43

visiblement tu n'as pas compris la correction non plus, puisque c'est toujours possible de passer ce qu'on veux avec les headers (la correction se faisant sur to, et subject, et c'est pas très malin en bas niveau de pas protéger c'est champs là), tu n'as par conséquent même pas compris ton propre lien.
visiblement même avec tes sois disant "15 ans d'expérience en développement pro" (dont tu n'as pas besoin de justifiés pour appuyer une remarque) ne t'ont pas ouvert l'esprit...

Petit nouveau ! | 7 Messages

14 févr. 2011, 15:00

Je pense que tu te grandirais à ne pas prendre les autres pour plus imbéciles que toi...
c'est pas très malin en bas niveau de pas protéger c'est champs là
Et hop, encore HS. Tu le fais vraiment exprès, rassure-moi... Relis mon précédent mail, en essayant de le comprendre, stp, ça t'éviteras de dire des conneries.

Et si j'ai pris la peine de mentionner les arguments filtrés par la fonction, c'est bien précisément pour apporter une réponse précise. Et si tu apportais la même attention à ce qu'écrivent les autres que celle que tu réserves à toi même, tu aurais lu, dans un de mes précédents messages, que j'avais déjà posé l'hypothèse que quelques arguments (tu notes le "quelques") puissent être filtrés.

Je comprends qu'après t'être revendiqué en donneur de leçons, tu puisses être vexé en voyant que la PHP Team à apportée un correctif prenant à contre-pied ce que tu écrivais comme des vérités absolues un post plus haut, mais de là à me dire que je n'ai moi même pas compris... Tu devrais plutôt te réjouir d'avoir appris quelque chose aujourd'hui !

Si tu as encore du temps à perdre, je te laisse te décharger ici si cela peut te faire du bien. Je retourne bosser, je t'ai déjà accordé bien trop de temps.

ViPHP
ViPHP | 5462 Messages

14 févr. 2011, 15:06

Maintenant, vous pouvez continuer à débattre en mode HS, mais sans moi...
Ah enfaite non, sans doute trop d'égo pour ça... (le coup des "15 ans d'expérience en développement pro")

Eléphant du PHP | 275 Messages

14 févr. 2011, 16:36

La fonction mail permet au développeur d'entrer les headers qu'il veut dans son mail (comme sur une page web avec la fonction header en somme). Filtrer le paramètres des headers retire la possibilité de personnaliser le mail (pour rajouter par exemple des CC / BCC / Sender / Priority / Etc).

Le problème est que des développeurs à la manque ne font pas attention à la génération des headers qu'ils mettent. Ca n'est pas une faille de la fonction mail, c'est une faille dans son utilisation. En fait, c'est exactement le même principe que l'injection SQL.

On pourrais faire le même article avec la fonction fopen, qui mal utilisée pourrait permettre à un hacker de lire/écrire n'importe ou sur le système. Le problème particulier du mail est que la plupart des développeurs ne connaissent pas le protocole mail (ni le protocole http d'ailleurs) et ne font pas attention à ce qu'ils font.

Ce que tu as trouvé n'est pas un fix, mais une rustine, qui empêche 2 headers de se faire écraser. Ca limite très légèrement la casse. Ca reviendrais à interdire les requètes "USE database" dans php_mysql pour que les injections SQL n'aillent pas sur d'autres bases.