Backdoor or not backdoor ?

Publié le 15 octobre 2013 par Sid

D

ans un moment de profonde solitude nocturne, Craig de /dev/ttyS0 s'est lancé dans le reverse d'un firmware de routeur D-Link. Il y a en particulier trouvé une version custom de thttpd dont la fonction d'authentification, faite maison, se trouve inclure ce qui ressemble fort à une backdoor.

C'en est tellement beau que ça se passe presque de commentaire :

int alpha_auth_check(struct http_request_t *request)
{
    if(strstr(request->url, "graphic/") ||
       strstr(request->url, "public/") ||
       strcmp(request->user_agent,
                 "xmlset_roodkcableoj28840ybtide") == 0)
    {
        return AUTH_OK;
    }
[...]

Il suffit donc que le programme qui se connecte à l'interface web présente la chaîne "xmlset_roodkcableoj28840ybtide" comme User-Agent pour y accéder sans authentification. Oups...

Évidemment, il y a de quoi tiquer. En particulier quand on s'aperçoit que ce problème ne touche naturellement pas que le routeur ADSL DIR-100 RevA étudié dans ce billet, mais à une bonne dizaine de modèles tournant sur la même base logicielle développée par Alpha Networks. Apparemment D-Link n'a pas encore réagit...

D'aucuns avanceront que les interface web embarquées dans les routeurs grand public ne sont pas des modèles de sécurité, ce qui est complètement vrai et pas franchement nouveau, et que ça n'a jamais conduit à l'Armageddon numérique à domicile qu'on promet régulièrement aux époux Michu. Car il faut bien avouer que ces vulnérabilités, lorsqu'elles existent, sont assez faiblement exposées puisqu'elles ne sont la plupart du temps accessibles que depuis le réseau local d'une part, et nécessitent de s'authentifier pour les atteindre d'autre part. On a certes vu nombre de techniques d'attaque mettant à profit le navigateur de l'utilisateur, comme le fameux "Drive-by Pharming", mais leur condition de réussite n'en reste pas moins la connaissance du login et du mot de passe de l'administrateur pour accéder aux fonction d'administration ou à la vumlnérabilité visée. Ce qui revient pour par l'attaquant à parier sur la validité des identifiants par défaut.

Avec ces firmwares, plus de login, plus de mot de passe, c'est journée portes ouvertes chez D-Link... N'importe quel Javascript malicieux pourra allègrement accéder à l'interface web, jouer avec, voire en exploiter des vulnérabilités. Comme par exemple un stack overflow dans le dernier firmware du DIR-100 qui permet, comme on s'y attend, une exécution distante de code arbitraire...

Mais ce n'est pas le plus intéressant en fait. De son côté, Travis Goodspeed s'est amusé à vérifier la présence de la chaîne magique en grepant tous les firmwares D-Link qu'il avait sous la main. Se faisant, il a découvert qu'à chaque fois qu'il la trouvait dans le binaire du serveur web, il la trouvait également dans un autre exécutable, "/bin/xmlsetc", lequel s'apparente fortement à un client pour la backdoor en question. En fait, il apparaît que ce binaire est utilisé pour configurer automatiquement certaines fonctionnalités du routeur.

Bien que ne pouvant que conjecturer sur les raisons de l'existence de cette backdoor, j'avoue rejoindre Craig dans son analyse. Vous connaissez certainement tous le fameux adage qui veut qu'il ne faille jamais attribuer à la malveillance ce qui peut très bien s'expliquer par l'incompétence ? Devant le besoin de réaliser automatiquement des tâches qui se trouvaient déjà implémentée dans le serveur web d'administration, les développeurs se sont probablement dit que produire un client léger qui en tirerait partie suffirait. Sauf qu'il fallait lui permettre de s'authentifier... Ou pas...

Point amusant... Si vous inversez la chaîne magique, ça donne "editby04882joelbackdoor_teslmx", soit "Edit by 04882 Joel Backdoor"... CQFD...