Vigil@nce : PHP, lecture mémoire via libxml2
janvier 2011 par Vigil@nce
Ce bulletin a été rédigé par Vigil@nce : http://vigilance.fr/
SYNTHÈSE DE LA VULNÉRABILITÉ
Le code de PHP ne valide pas les données UTF-8 transmises à
libxml2, ce qui permet à un attaquant de lire un fragment de la
mémoire du processus PHP.
– Gravité : 1/4
– Date création : 25/01/2011
PRODUITS CONCERNÉS
– PHP
DESCRIPTION DE LA VULNÉRABILITÉ
La bibliothèque libxml2 permet de créer des documents XML. Par
exemple, la méthode xmlTextWriterPtr::xmlTextWriterWriteAttribute()
ajoute un attribut. Ses paramètres doivent être en UTF-8 valide.
La méthode XMLWriter::writeAttribute() du module XML de PHP
appelle libxml2. Cependant, elle ne valide pas les données UTF-8
avant de les transmettre à libxml2.
Les séquences UTF-8 commençant par les bits 1110xxxx sont
composées de 3 octets. La séquence "\xE0\x81" est donc invalide
car il manque le troisième octet. Cependant, libxml2 lit le
troisième octet, qui est le caractère nul (’\0’) de fin de chaîne.
La bibliothèque ne détecte alors pas la fin de chaîne et continue
à lire après elle.
Un attaquant peut donc forcer l’absorption du caractère nul par
XMLWriter::writeAttribute(), et ensuite lire le document XML
généré, qui contiendra les données en mémoire situées après la fin
de la chaîne UTF-8 malformée passée à writeAttribute().
Le code de PHP ne valide donc pas les données UTF-8 transmises à
libxml2, ce qui permet à un attaquant de lire un fragment de la
mémoire du processus PHP.
ACCÈS AU BULLETIN VIGIL@NCE COMPLET
http://vigilance.fr/vulnerabilite/PHP-lecture-memoire-via-libxml2-10297