Faille de sécurité Zend XML-RPC, appliquez le patch !

  • De le 06 juillet 2012
  • Difficulté : 1/4

Faille de sécurité Zend XML-RPC, appliquez le patch ! Le 5 juillet 2012, Magento annonce sur son blog une faille sérieuse de Zend sur le protocole XML-RPC. Magento repose sur le framework Zend, il en est donc impacté. La faille concerne les versions de Magento CE antérieures à la 1.7.0.2, et Magento EE antérieures à la 1.12.0.2.

Cette faille de sécurité se révèle extrêmement dangereuse. Elle offre la possibilité à une personne mal attentionnée de lire n'importe quel fichier du système : mots de passe, fichiers de configuration et pourquoi pas les bases de données, si elles sont stockées sur la même machine que le serveur web Magento.

Le protocole XML-RPC est une méthode de transmission de données par les services WEB, utilisé pour l'échange d'informations entre systèmes, quelque soit le langage utilisé. Il est comparable à SOAP ou REST. SOAP reste à ce jour le plus populaire.

Magento intègre XML-RPC dans son API depuis les toutes premières versions. Si votre Magento CE est antérieure à la version 1.7.0.2 (1.12.0.2 pour la version EE), votre système est en danger.

Edit 13/07/2012 : la faille est aujourd'hui largement connue et diffusée (full disclosure), repérer les sites Magento et tenter une attaque est un jeu d'enfants.

En pratique

En pratique il est très facile de lire le fichier etc/passwd (ou n'importe quel autre) d'un serveur sur lequel est hébergé un site Magento. Cela se passe lors de la déclaration du Doctype du fichier XML envoyé au web service. Cette méthode connue est appelée XXE injection. La faille a été détectée sur Zend aux alentours du 25 juin 2012.

L'exemple de fichier XML suivant analysera le contenu du fichier etc/passwd avant de l'étendre dans le contenu de la balise methodName.

Document XML

<?xml version="1.0"?>
<!DOCTYPE foo [ <!ELEMENT methodName ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<methodCall>
    <methodName>&xxe;</methodName>
</methodCall>

Le résultat est le suivant :

Faille XML-RPC Zend

Par ce biais un crash du système serait également envisageable.

Solutions

4 solutions sont proposées pour pallier à cette faille de sécurité.

Appliquer un patch

Magento met à disposition un patch. Ce patch est accessible depuis l'article officiel de l'annonce de vulnérabilité sur le blog de Magento :

Envoyer une 404

Il est également possible d'envoyer une 404 en désactivant l'appel à l'API XML-RPC. Il suffit de commenter la méthode indexAction de la classe Mage_Api_XmlrpcController :

app/code/core/Mage/Api/controllers/XmlrpcController.php

class Mage_Api_XmlrpcController extends Mage_Api_Controller_Action
{
    /*
    public function indexAction()
    {
        $this->_getServer()->init($this, 'xmlrpc')
            ->run();
    }
    */
} // Class Mage_Api_XmlrpcController End

Ajouter une condition dans le htaccess

Editer le fichier .htaccess à la racine du site en y ajoutant à la suite de RewriteEngine on :

.htaccess

RewriteCond %{REQUEST_URI} .*api/xmlrpc.* [NC]
RewriteRule (.*) - [F]

Mettre à jour Magento

La dernière solution est de mettre à jour Magento vers la version 1.7.0.2 ou 1.12.0.2 lorsque cela est possible.

commentaires

Commentez cet article : Faille de sécurité Zend XML-RPC, appliquez le patch !