SecurityInsider
Le blog des experts sécurité Wavestone

Détails de la vulnérabilité Android Stagefright


Stagefright, késako ?

La société Zimperium dont l’auteur original de l’advisory, Joshua Drake, fait partie, a révélé le 5 août les détails de la vulnérabilité [1] nommée « Stagefright » affectant Android après avoir annoncé le 21 juillet qu’il allait la révéler à la Black Hat USA 2015 [2].

Avant d’être le nom associé à cette vulnérabilité, Stagefright est surtout un composant d’Android introduit dans la version Froyo (2.2) assurant le traitement des fichiers vidéo au sein de la plateforme. Cette bibliothèque est utilisée par les applications natives telles que le client de messagerie SMS/MMS ainsi que de nombreuses applications tierces (par ex. Google Hangout).

Comment s’exploite cette faille ?

Bien que cette faille affecte globalement toute action liée à la lecture d’un fichier vidéo, l’auteur a choisi de présenter l’exploitation de la faille selon sa version la plus malveillante, car ne requérant aucune action de la victime, sous la forme d’un simple envoi de MMS.

En effet, après avoir envoyé un MMS à sa victime, le client de messagerie va automatiquement tenter de lire le fichier reçu, et va ainsi provoquer l’exploitation de la vulnérabilité, qui réside dans l’analyse des métadonnées des fichiers vidéos.

Un autre vecteur d’exploitation possible pourrait être la lecture automatique d’une vidéo sur un site Web.

Quelles sont les vulnérabilités au niveau du code ?

Différentes failles ont été identifiées dans le module de parsing des métadonnées de plusieurs formats de fichiers vidéos tel que MP4 ou 3GPP. À titre d’exemple, voici un extrait du format de fichier MP4 [3] :


De manière synthétique, tout fichier vidéo MP4 est composé de :

  • Plusieurs pistes, pointées par le champ « trak » :
    • Chaque piste « trak » étant elle-même constituée de sections « chunks » qui elles-mêmes sont constituées d’échantillons « samples » ;
  • Et de métadonnées, pointées par le champ « moov ». Le champ « moov » concentre les informations sur les sections et échantillons, par exemple le nombre d’échantillons dans une section ou encore la taille des échantillons dans une section etc.

Les vulnérabilités au sein de Stagefright sont pour la plupart liées à l’absence de vérification logique de ces informations, préalablement à leur réutilisation en tant que taille d’allocation de buffer.

Dans l’exemple suivant et avant ajout du code surligné en vert [4], il était possible de faire en sorte que la valeur de la variable buffer (ligne 1967), stockant temporairement une section, soit allouée avec une taille qui aurait « débordée », par exemple dans le cas où la valeur chunk_size, récupérée des métadonnées, serait pour la première section 0xFFF00001 et la seconde 0xFFF00001.

0x100000 + 0xFFF00001 valant 1, buffer serait initialisé avec une taille de 1 octet. On parle dans ce cas « d’integer overflow » (pour des nombres entiers).

Par suite, l’instruction à la ligne 1973 assure la lecture d’un échantillon et la stocke dans buffer. À la lecture de la première section, 0x1000 octets seront donc lus et stockés dans un tableau de 1 octet, provoquant ainsi un crash.


Sous certaines conditions (maitrise du contenu qui va être lu, connaissance des adresses des différents buffers), un attaquant peut provoquer via cette vulnérabilité une exécution de code arbitraire sur le système.

Il est possible de consulter l’intégralité des sections de code vulnérables à travers les récents commits sur Github [5] du projet CyanogenMod. De manière exhaustive, la vulnérabilité Stagefright regroupe les vulnérabilités suivantes [6], une pour chacun des champs impactés :

1.     CVE-2015-1538, P0006, Google Stagefright ‘stsc’ MP4 Atom Integer Overflow Remote Code Execution
2.     CVE-2015-1538, P0004, Google Stagefright ‘ctts’ MP4 Atom Integer Overflow Remote Code Execution
3.     CVE-2015-1538, P0004, Google Stagefright ‘stts’ MP4 Atom Integer Overflow Remote Code Execution
4.     CVE-2015-1538, P0004, Google Stagefright ‘stss’ MP4 Atom Integer Overflow Remote Code Execution
5.     CVE-2015-1539, P0007, Google Stagefright ‘esds’ MP4 Atom Integer Underflow Remote Code Execution
6.     CVE-2015-3827, P0008, Google Stagefright ‘covr’ MP4 Atom Integer Underflow Remote Code Execution
7.     CVE-2015-3826, P0009, Google Stagefright 3GPP Metadata Buffer Overread
8.     CVE-2015-3828, P0010, Google Stagefright 3GPP Integer Underflow Remote Code Execution
9.     CVE-2015-3824, P0011, Google Stagefright ‘tx3g’ MP4 Atom Integer Overflow Remote Code Execution
10.    CVE-2015-3829, P0012, Google Stagefright ‘covr’ MP4 Atom Integer Overflow Remote Code Execution

Dans le même temps, il est à noter que Trend Micro a également découvert des vulnérabilités similaires pour le format de fichier MKV [7][8]. Néanmoins, aucune méthode d’exploitation similaire au format MP4 n’a pu être trouvée.

Quelles sont les protections contre l’exploitation de cette faille ?

Le mécanisme d’Address Space Layout Randomization (ASLR) introduit dès Android 4.0 permet de limiter l’exploitation de ces failles dans la mesure où les adresses mémoires nécessaires à l’exécution de code arbitraire changent entre chaque exécution et sont ainsi imprédictibles.

Cependant, il avait déjà démontré en 2011 [9] que l’implémentation de l’ASLR au sein d’Android 4.0 était défaillante, en ne présentant pas assez d’aléa. Ainsi, l’ASLR ne peut finalement être considérée comme effective seulement à partir d’Android 4.1.

Qui est vulnérable, qui ne l’est pas/plus ?

Les versions d’Android  entre 2.2 (Froyo) et 5.1.1_r9 (Lollipop) sont vulnérables. La faille a été corrigée au sein de l’AOSP, la version open-source de la plateforme : Google et Samsung ont diffusé des patchs pour leurs terminaux. Pour les autres éditeurs et au vu des politiques de mises à jour couramment appliquées, de nombreux utilisateurs n’auront pas de patch, de par leur version trop (ou très légèrement) obsolète d’Android.

De manière globale et indépendamment des éditeurs :

  • Environ 10% des utilisateurs [10] disposent d’une version d’Android inférieure à 4.1 et sont ainsi vulnérables sans protection effective contre l’exploitation de Stagefright. Pour information la vidéo de démonstration publiée par Joshua Drake a eu comme support Android Ice Cream Sandwich 4.0 [1]
  • 90% des autres utilisateurs Android disposent d’une protection effective contre Stagefright.

Finalement, comment savoir si je suis vulnérable ?

Deux applications, une développée par Lookout Mobile [11] et l’autre par Zimperium [12], sont disponibles sur le Google Play Store pour identifier la présence de ces vulnérabilités :



Sources :
[1] https://blog.zimperium.com/stagefright-vulnerability-details-stagefright-detector-tool-released/
[2] http://blog.zimperium.com/the-biggest-splash-at-blackhat-and-defcon-2015/
[3] http://thompsonng.blogspot.fr/2010/11/mp4-file-format.html
[4] https://github.com/CyanogenMod/android_frameworks_av/commit/5fd0cb515aba32d4dd961c16449bd5c8f4c37a6c
[5] https://github.com/CyanogenMod/android_frameworks_av/commits/cm-12.0
[6] https://www.kb.cert.org/vuls/id/924951
[7] http://blog.trendmicro.com/trendlabs-security-intelligence/trend-micro-discovers-vulnerability-that-renders-android-devices-silent/
[8] http://blog.trendmicro.com/the-show-goes-on-more-stagefright-horrors-with-auto-play-videos/
[9] https://www.duosecurity.com/blog/a-look-at-aslr-in-android-ice-cream-sandwich-4-0
[10] https://developer.android.com/about/dashboards/index.html
[11] https://play.google.com/store/apps/details?id=com.lookout.stagefrightdetector
[12] https://play.google.com/store/apps/details?id=com.zimperium.stagefrightdetector

Thomas DEBIZE

1 commentaire:

  1. Post très intéressant sur un sujet qui nous concerne tous ! Merci Thomas !

    RépondreSupprimer