Articles récents

Catégories

icon_firefoxSimilar vulerability in Firefox 51.0.1 fixed in Firefox 52 than CVE-2017-5387 Ability to determine the existence of a file in the local filesystem using tag with onerror event


BUG 1342693 Similar vulerability in Firefox 51.0.1 fixed in Firefox 52 than CVE-2017-5387 Ability to determine the existence of a file in the local filesystem using tag with onerror event

Advisories URL to similar vulnerability fixed Firefox 51:
https://www.mozilla.org/en-US/security/advisories/mfsa2017-01/#CVE-2017-5387

Announced: March 7, 2017
Reporter: Jordi Chancel
Impact: Moderate / Low
Products: Firefox
Fixed in: Firefox 52


  • Description :

The existence of a specifically requested local file can be found due to the double firing of the onerror when the source attribute on a <track> tag refers to a file that does not exist if the source page is loaded locally and when a characters string is added at the end of the the local file source.


  • Principe d’exploitation de la précédence et similaire vulnérabilité CVE-2017-5387 corrigée sur la mise à jour MFSA-2017-01 dans la version 51 du navigateur web Mozilla Firefox :

1.La vulnérabilité CVE-2017-5387 (lien de l’avis de sécurité: https://www.mozilla.org/en-US/security/advisories/mfsa2017-01/#CVE-2017-5387 ) corrigée sur la version 51 du navigateur web Mozilla Firefox exploitait un défaut de sécurité utilisant le double déclenchement de l’événement JavaScript onerror en coordination avec l’attribut src de la balise <track> qui aura come valeur l’adresse d’un fichier local dont l’objectif sera de déterminer si ce fichier local est présent ou non.

  • Schéma basique d’exploitation de la précédente vulnérabilité CVE-2017-5387 :
1.<track src=file:///etc/passwd > (la balise <track> ayant comme source l’adresse d’un fichier local)

2. Double déclenchement de l’événement JavaScript OnError.

3. L’événement JavaScript OnError va renvoyer une valeur qui déterminera si le fichier local ciblé dans l’attribut src de la balise <track> existe ou pas.

4. Si la variable « i » via l’événement OnError renvoi dans le code JavaScript la valeur « i==1 » , le fichier local ciblé est donc présent.

  • CVE-2017-5387 Mozilla Security Advisory (Fixed in Firefox 51) :

The existence of a specifically requested local file can be found due to the double firing of the onerror when the source attribute on a <track> tag refers to a file that does not exist if the source page is loaded locally.

CVE-2017-5387 PoC :


  • Principe d’exploitation de la vulnérabilité fonctionnant sur les versions 51.0.1, 51.0.2 et 51.0.3 de Firefox corrigée sur la mise à jour MFSA-2017-05 dans la version 52 de Mozilla Firefox.
    (Malgré la mise à jour de sécurité du CVE-2017-5387 dans la version 51 de Firefox) :

    1.Cette vulnérabilité découverte (similaire au CVE-2017-5387) lors de mes tests de sécurité dont l’exploitation est toujours possible sur les versions ultérieures à Mozilla Firefox 51 (51.0.1, 51.0.2 et 51.0.3) et dont son rapport a été transmis par le Bug 1342693 sur la plateforme https://bugzilla.mozilla.org/ est maintenant corrigée sur la version 52 du navigateur web Mozilla Firefox

    La méthode d’exploitation de cette vulnérabilité est très proche de la vulnérabilité précédemment décrite et corrigée dans la version 51 de Mozilla Firefox.

    En effet tout comme la précédente vulnérabilité CVE-2017-5387, le Bug 1342693 utilise aussi le double déclenchement de l’événement JavaScript onerror en coordination avec l’attribut src de la balise <track> qui aura comme valeur l’adresse d’un fichier local suivi d’une chaine de caractère.

    L’exploitation du Bug 1342693 va alors vérifier la valeur que l’Événement OnError va renvoyer, et dont celle-ci sera interprété inversement en comparaison à la réponse obtenue dans la précédente Preuve de Concept de la vulnérabilité CVE-2017-5387 et ainsi permettre encore dans les versions ultérieures à Firefox 51 de déterminer si le fichier local ciblé est existant ou non dans le système de fichier local.

    Cette faille de sécurité à donc exactement le même but d’exploitation que celle du CVE-2017-5387 qui est de déterminer si le fichier local dont l’adresse se trouve dans l’attribut src de la balise <track> est présent ou non.

    Cette vulnérabilité exploitable sur les versions ultérieures à Firefox 51 comporte, comme indiqué, des similitudes avec la vulnérabilité CVE-2017-5387 mais qui diffère en raison (1) du schéma URL de l’adresse du fichier local ciblé et (2) de l’interprétation de la valeur différente obtenue via l’événement JavaScript OnError utilisé).


    • Schéma d’exploitation de la vulnérabilité fonctionnent sur les version 51.0.1, 51.0.2 & 51.0.3 (supérieure à la version de Firefox 51) corrigée sur Firefox 52 :
    1.<track src=file:///etc/passwd/AAAAAAAAAAAAAAAAAAAAAA >
    (la balise <track> ayant comme source de l’adresse d’un fichier local + une chaine de caractère.)

    2. Double déclanchement de l’événement JavaScript OnError.

    3. L’événement JavaScript OnError va renvoyer une valeur dont la nouvelle Preuve de Concept fonctionnant sur Firefox 51.0.1 va interpréter cette valeur de façon inverse à celle obtenu par la précédente Preuve de Concept de la vulnérabilité CVE-2017-5387 et donc permettre encore de déterminer si le fichier local ciblé dans l’attribut src de la balise <track> existe ou non.
    (Malgré le patch de sécurité installé sur la mise à jour de Firefox 51 corrigeant la vulnérabilité CVE-2017-5387).

    4. Si la variable « i » via l’événement OnError renvoi dans le code JavaScript une valeur qui n’est pas « i==1 » , le fichier local ciblé est présent.

      Bug 1342693 PoC :


      • Commentaire N°7 du Bug 1342693 :

      This issue can not be reproduce in Firefox 52 but works Firefox in 50.0.1.

      I analyzed this vulnerability, it also allows to determine the existence of a local file but it works differently than bug1295023.

      This dislosure bug can also determine if a local file exists or not, but it works by analyzing the results obtained on two compared URLs.

      E-G: if the onerror event defines that « file:///etc/passwd » = 1 and « file:///etc/passwd/testnolocalfile » = 0, the local file « file:///etc/passwd » exists (1 + 0 = the local file exists),

      but if the onerror event defines that « file:///testnolocalfile » = 1 and that « file:///testnolocalfile/testnolocalfile » = 1, the local file does not exist. (1 + 1 = the local file does not exist).

      Vulnerability demonstration (video non répertorié, seulement accessible sur ce blog):