Etude Rapid7 sur les vulnérabilités du protocole UPnP

Date : 07 Mars 2013

Introduction

La fin du mois de Janvier 2013 a été marquée par la publication d’une étude de la société Rapid7 (éditrice du framework de découverte de failles et d’exploitation MetaSploit) sur la vulnérabilité des équipements utilisant le protocole UPnP.

Universal Plug and Play (abrégé UPnP) est un ensemble de protocoles facilitant la mise en réseau et la communication entre équipements informatiques. Cette norme, poussée par l’UPnP Forum, permet en particulier aux différents périphériques d’un réseau résidentiel d’annoncer et de découvrir les services présents sur le réseau (passerelle multimédia, partage de contenu, passerelle Internet, etc.), et de les contrôler au moyen de requêtes envoyées aux équipements embarquant UPnP.

Dans le cadre de son étude, Rapid7 a effectué un recensement (de juin à novembre 2012) sur la présence de ce protocole sur Internet. La société a également audité le code des implémentations les plus populaires de ce protocole et a pu découvrir un ensemble de vulnérabilités, certaines étant critiques et autorisant l’exécution de code à distance sur la machine vulnérable avec les privilèges de l’utilisateur le plus privilégié (root).

Nous présentons dans la suite de ce document, le fonctionnement général de la série de protocoles UPnP, et revenons sur les failles de sécurité découvertes par la société Rapid7, leurs impacts et les solutions pour s’en prémunir.

 

Présentation de la norme UPnP

UPnP étant un ensemble de protocoles, les périphériques qui l’embarquent parmi leurs fonctionnalités ne supportent généralement qu’une partie de la norme UPnP. Les utilisations les plus fréquentes dans un réseau local concernent :

  • les routeurs d’accès à Internet (les « box » ADSL). Ces équipements implémentent la norme UPnP « Internet Gateway Daemon » (IGD) qui permet l’ouverture de ports sur le routeur afin d’autoriser dynamiquement certains trafics entrants comme Skype ou l’assistant à distance de Windows.
  • les serveurs et lecteurs de contenus multimédia. Ces équipements implémentent la norme UPnP « Audio Video » (AV) qui permet le partage et la lecture de contenus multimédia entre plusieurs appareils connectés.

Tous les périphériques UPnP passent néanmoins toujours par 2 phases afin de fonctionner :

  • la découverte et l’annonce des services UPnP sur le réseau,
  • puis l’utilisation proprement dite de ces services.

Pour découvrir les services présents sur un réseau et annoncer ceux d’un équipement, la norme UPnP se base sur le protocole SSDP (Simple Service Discovery Protocol). Lorsqu’un équipement compatible UPnP est nouvellement connecté sur le réseau, il annonce ses services via un paquet SSDP multicast, et envoie une requête de recherche afin de découvrir les services déjà connectés au réseau. Les autres hôtes lui répondent alors également en SSDP, en indiquant la liste de leurs propres services.

UPnP utilise également le protocole HTTP pour 2 fonctions :

  • Permettre pendant la phase de découverte de mettre à disposition une description complète du service accessible via HTTP (le lien permettant d’obtenir cette description est annoncé dans la réponse ou l’annonce de service SSDP)
  • Permettre le contrôle des services annoncés. Ce système fonctionne avec le protocole SOAP (Simple Object Access Protocol). Encapsulé dans le protocole HTTP, SOAP permet l’appel de fonctions à distance, pour un service donné (exemple dans le cas de l’UPnP IGD: demande d’ouverture d’un port réseau sur l’interface externe d’une passerelle Internet).

 

Analyse de l’exposition des services SSDP sur Internet

Rapid7 a commencé son étude par une collecte de données sur une période de 5 mois. Leur première démarche a été de trouver les périphériques UPnP configurés pour répondre aux découvertes de services sur Internet (alors que cette découverte ne devrait être possible que sur des réseaux internes considérés comme sûrs). Chaque adresse IP routable sur Internet a donc été sondée en envoyant une requête de découverte de services SSDP. Rapid7 a ainsi pu identifier 81 millions d’hôtes pour lesquels il est possible de connaître les services UPnP depuis Internet.

La société a poursuivi son analyse en tentant de déterminer si pour chacun des services UPnP exposés sur Internet, il était possible de les contrôler via leur interface HTTP/SOAP. Il a été ainsi déterminé que 17,25 millions d’adresses IP permettaient effectivement le contrôle de leurs services directement depuis Internet !

L’impact de l’exposition de ces services est considérable : il est ainsi possible dans le cas du service UPnP IGD, d’ouvrir un port réseau sur un routeur/pare-feu depuis Internet, et de compromettre ainsi le cloisonnement du réseau résidentiel normalement protégé par le routeur d’accès.

L’exposition de ces services sur Internet provient généralement d’une configuration incorrecte des services UPnP sur les équipements qui exposent les services réseaux sur la mauvaise interface.


Nouvelles vulnérabilités découvertes par Rapid7 et obsolescence des librairies déployées

La suite de l’étude de Rapid7 a porté sur l’analyse du code des 2 implémentations les plus répandues de UPnP : libupnp et MiniUPNP. Ces deux librairies ont en effet constitué près de la moitié des implémentations qu’ils ont rencontrées lors de la phase de découverte de leur étude.

Concernant libupnp (aussi appelé « Portable SDK for UpnP » et autrefois appelé « Intel SDK for UpnP »), plus de la moitié des hôtes détectés intégraient la version 1.3.1, vieille de 6 ans, et un quart utilisaient la version 1.2 vieille de 10 ans !

L’audit du code de la version majoritaire (1.3.1) a ainsi révélé 7 vulnérabilités de type buffer-overflow, qui permettent à un attaquant distant d’envoyer du trafic malveillant à la pile SSDP d’un équipement, et de corrompre sa mémoire pour exécuter du code arbitraire. Bien souvent, les applications embarquant UPnP sont exécutées avec des privilèges élevés, car les actions qu’elles déclenchent (telles que l’ouverture d’un port sur une passerelle Internet) nécessitent les privilèges administrateur.

Bien qu’elle corrige certaines de ces vulnérabilités, la version la plus récente de la librairie libupnp au moment de l’étude (1.6.17) contenait toujours 2 vulnérabilités de type buffer-overflow. Rapid7 a alors travaillé avec le développeur afin de produire une version 1.6.18 corrigeant ces deux dernières failles. Néanmoins, la quasi-totalité des déploiements de la librairie libupnp était toujours vulnérable au moment de la publication de l’étude.

A titre d’exemple, un code d’exploitation a été produit par H.D. Moore, de Rapid7 le 03/02/2013. Il utilise une vulnérabilité présente jusqu’à la version 1.6.17, et permet  de lancer à distance un shell avec les privilèges de l’exécutable UPnP (bien souvent root, pour les raisons expliquées ci-dessus).

Concernant la deuxième implémentation la plus populaire d’UPnP, MiniUPnP, Rapid7 a audité le code de la version la plus répandue (1.0) et a découvert une vulnérabilité qui portait également sur la pile SSDP, et une autre portant sur la pile SOAP. Ces deux vulnérabilités  ont été corrigées silencieusement en 2009 dans la version 1.4 de la librairie (sans qu’il soit fait mention de leur impact sur la sécurité). Si la première ne permet qu’un déni de service de l’application, la deuxième permet potentiellement l’exécution de code arbitraire de la même manière que pour libupnp. Corrigées depuis 2009, ces vulnérabilités sont malheureusement présentes sur 7 équipements sur 10 embarquant MiniUPnP…


Une grande difficulté à corriger

Rapid7 a identifié dans son étude environ 6900 produits embarquant un service UPnP vulnérable à au moins une des failles qu’ils ont découvertes.

Nous sommes ici face à une vulnérabilité affectant un composant massivement répandu, et où il est du ressort de chaque fournisseur incluant ce composant dans ses produits de réagir. Si certains éditeurs semblent vite réagir (tel que le projet Debian avec le correctif décrit dans l’avis CERT-IST AV-2013-095), il est malheureusement réaliste de penser que certains équipements ne seront mis à jour que tardivement, laissant leurs utilisateurs vulnérables pendant une longue période. La seule solution dans ce cas est de désactiver UPnP, ou à défaut de pouvoir le faire, de remplacer l’équipement vulnérable.


Un protocole qui reste vulnérable

Au-delà de la configuration anormale du protocole sur certains équipements (qui écoutent sur une interface connectée à Internet) et de la découverte de failles de sécurité dans son implémentation, la norme UPnP est intrinsèquement faible du point de vue de la sécurité : aucun mécanisme permettant d’authentifier ou de chiffrer les échanges (de découverte et de contrôle) n’a été prévu dans la norme. Même si le service n’écoute que sur des interfaces protégées, il reste donc possible pour un malware déjà introduit dans le réseau d’ouvrir, grâce à UPnP, des flux réseaux sur le routeur/firewall résidentiel.

En 2008, l’attaque Flash UPnP a montré que ce scénario était possible et que d’autres malwares sont certainement capables d’intégrer cette fonctionnalité qui permet à un attaquant de contourner le firewall du routeur et d'attaquer alors à distance les machines internes du réseau.


Conclusion

L’étude et la communication de Rapid7 autour des vulnérabilités de la norme UPnP est intéressante à plus d’un titre car elle montre que :

  • Bien qu’une implémentation de protocole soit à jour en termes de correctifs de sécurité, il n’est pas exclu qu’une erreur de configuration soit présente dans un composant qui intègre cette implémentation. Dans le cas de UPnP, l’exposition des services SOAP sur les interfaces Internet de routeurs résidentiels permet ainsi à un attaquant de contrôler à distance certains services sur ces routeurs.
  • Bien que des correctifs pour des failles connues existent, certains éditeurs tardent à les intégrer dans leurs applicatifs. Dans le cas d’UpnP les équipements touchés sont très divers et incluent en particulier des produits grands publics qui n’ont pas été conçus pour être mis à jour.

Il nous semble important de rappeler que bien qu’il soit possible de corriger ces vulnérabilités d’implémentation ou de configuration, la norme UPnP présente des faiblesses inhérentes à sa conception du point de vue sécurité. Ces faiblesses sont connues depuis longtemps, et ont déjà été mises en évidence par des travaux tels que ceux d’Armijn Hemel (l’auteur du site UPnP-Hacks.org) à la conférence SANE-2006, ou encore ceux de Dror Shalel présentés durant la conférence DEFCON15 (en 2007). C’est notamment la raison pour laquelle elle est très peu présente en réseau d’entreprise.

Pour plus d’information :

Précedent Précedent Suivant Suivant Imprimer Imprimer