Zean a écrit:http://www.clubic.com a écrit:Le point sur le bug 'historique' lié à Firefox 1.5
Depuis la fin de la semaine dernière, plusieurs rumeurs et sites d'informations ont relayé un communiqué d'Internet Storm Center, un site spécialisé dans les failles de sécurité. Ce communiqué annonçait que la dernière version du navigateur de la fondation Mozilla, Firefox 1.5, était touché par un problème de sécurité important.
Ainsi, Internet Storm Center pointait du doigt le fichier lié à l'historique des pages consultées qui aurait tendance à faire planter le navigateur lorsqu'il atteint une certaine taille. Internet Storm Center précisait que cela obligeait l'utilisateur à relancer Firefox 1.5 de nombreuses fois et que ce problème exposait ces mêmes utilisateurs à des attaques DoS (déni de service).
La fondation Mozilla s'est finalement penchée sur le problème et annonce aujourd'hui que le rapport d'Internet Storm Center est loin d'être correct. Mozilla confirme l'existence d'un problème avec le fichier historique de Firefox 1.5 qui aurait tendance à ralentir le navigateur lorsque sa taille dépasse les 10,5 Mo. Il ne serait en aucun cas, question de plantage aléatoire. La fondation termine en annonçant que le problème sera prochainement corrigé (en attendant, les utilisateurs peuvent vider leur historique de façon régulière pour éviter les ralentissements) et qu'il n'est aucunement lié à une faille de sécurité.
Brève publiée par Vincent le Mardi 13 Décembre 2005
J'ai l'impression comme souvent que les rédacteurs de Clubic (ou autres sites du genre) en comprennent moins que leurs lecteurs..
Voici ce qu'a publié Mozilla.org samedi:
http://www.mozilla.org/security/history-title.htmlIl s'agit pas d'un ralentissement du navigateur mais d'un démarrage long du navigateur lorsque dans l'historique, un titre de page fait plus de 2.4 Mo, c'est à dire plus de 2,5 millions de caractères (vous en connaissez beaucoup ?). Une fois démarré, le navigateur fonctionne parfaitement.
En fait jeudi, FrSirt, a soulevé ce problème en publiant le code suivant:
- Code: Tout sélectionner
<html>
<head>
<script type="text/javascript">
function ex() {
var buffer = "";
for (var i = 0; i < 5000; i++) {
buffer += "A";
}
var buffer2 = buffer;
for (i = 0; i < 500; i++) {
buffer2 += buffer;
}
document.title = buffer2;
}
</script>
</head>
<body><a href="javascript:ex();">exploit</a></body></html>
sur cette page :
http://www.frsirt.com/english/advisories/2005/2805qui crée ce titre composé de 2,5 millions de A.
Tous les navigateurs stockant l'historique sous forme de fichiers (c'est à dire tous sauf IE et dérivés) sont touchés par la même lenteur (il faut plus ou moins de caractères selon le navigateur)
Quant à IE il n'est pas mieux loti.. Puisque le stockage de l'historique est fait dans la base de registre, il démarre très facilement face à un titre aussi long, mais .... lorsqu'il stocke plusieurs fois ce titre de 2,5 millions de caractère, cela finit par corrompre la base de registre et ce n'est alors plus juste une lenteur de démarrage de navigateur que l'on rencontre mais un système d'exploitation en voie de crash..
A noter que le patch est connu depuis jeudi (soit le jour même de la publication du problème par FrSirt):
Il s'agit juste de deux simples if limitant les titres à 65536 caractères (64 ko) et donc de 6 lignes de code.
- Code: Tout sélectionner
-- toolkit/components/history/src/nsGlobalHistory.cpp 23 Oct 2005 18:55:54 -0000 1.58.2.2
+++ toolkit/components/history/src/nsGlobalHistory.cpp 8 Dec 2005 19:46:10 -0000
@@ -108,16 +108,20 @@ nsIPrefBranch* nsGlobalHistory::gPrefBra
#define PREF_BRANCH_BASE "browser."
#define PREF_BROWSER_HISTORY_EXPIRE_DAYS "history_expire_days"
#define PREF_AUTOCOMPLETE_ONLY_TYPED "urlbar.matchOnlyTyped"
#define PREF_AUTOCOMPLETE_ENABLED "urlbar.autocomplete.enabled"
#define FIND_BY_AGEINDAYS_PREFIX "find:datasource=history&match=AgeInDays&method="
+// see bug #319004 -- clamp title and URL to generously-large but not too large
+// length
+#define HISTORY_STRING_LENGTH_MAX 65536
+
// sync history every 10 seconds
#define HISTORY_SYNC_TIMEOUT (10 * PR_MSEC_PER_SEC)
//#define HISTORY_SYNC_TIMEOUT 3000 // every 3 seconds - testing only!
// the value of mLastNow expires every 3 seconds
#define HISTORY_EXPIRE_NOW_TIMEOUT (3 * PR_MSEC_PER_SEC)
#define MSECS_PER_DAY (PR_MSEC_PER_SEC * 60 * 60 * 24)
@@ -1105,30 +1109,37 @@ nsGlobalHistory::GetCount(PRUint32* aCou
}
NS_IMETHODIMP
nsGlobalHistory::SetPageTitle(nsIURI *aURI, const nsAString& aTitle)
{
nsresult rv;
NS_ENSURE_ARG_POINTER(aURI);
- const nsAFlatString& titleString = PromiseFlatString(aTitle);
+ nsString realTitleString(aTitle);
+ if (realTitleString.Length() > HISTORY_STRING_LENGTH_MAX)
+ realTitleString.Left(realTitleString, HISTORY_STRING_LENGTH_MAX);
+
+ const nsAFlatString& titleString = PromiseFlatString(realTitleString);
// skip about: URIs to avoid reading in the db (about:blank, especially)
PRBool isAbout;
rv = aURI->SchemeIs("about", &isAbout);
NS_ENSURE_SUCCESS(rv, rv);
if (isAbout) return NS_OK;
NS_ENSURE_SUCCESS(OpenDB(), NS_ERROR_FAILURE);
nsCAutoString URISpec;
rv = aURI->GetSpec(URISpec);
NS_ENSURE_SUCCESS(rv, rv);
+ if (URISpec.Length() > HISTORY_STRING_LENGTH_MAX)
+ URISpec.Left(URISpec, HISTORY_STRING_LENGTH_MAX);
+
nsCOMPtr<nsIMdbRow> row;
rv = FindRow(kToken_URLColumn, URISpec.get(), getter_AddRefs(row));
// if the row doesn't exist, we silently succeed
if (rv == NS_ERROR_NOT_AVAILABLE) return NS_OK;
NS_ENSURE_SUCCESS(rv, rv);
// Get the old title so we can notify observers
Les distributions comportant Firefox 1.5 ont recompilés leur paquet dès jeudi avec ce patch. Utilisant pour ma part une distribution source (où le moindre logiciel est compilé sur ma machine) je l'ai fait au cours de la fin de semaine.
Quoiqu'il en soit, ça ne vaut pas les gros titres, ni même d'en parler, c'est un bogue comme un autre, et pas du tout une faille de sécurité...
Tristan Nitot affirme la même chose:
Prétendu trou de sécurité de Firefox : regardons de plus près
Certains sites annoncent a tort que Firefox 1.5 a un trou de sécurité critique. Je les invite à vérifier leurs sources et à lire ce qui suit, qui est publié par Mozilla. Je pense qu'un rectificatif de leur part s'impose.
Long-title temporary startup unresponsiveness
Web pages with extremely long titles (the posted proof of concept used 2.5 million characters) can cause Mozilla Firefox and the Mozilla Suite to appear to "hang" on startup when reading the browsing history data. The browser will eventually continue normally although this can take up to several minutes on a slower computer. The unresponsive starts will continue until the item with the long title is removed from the history file or eventually expires.
We have investigated this issue and can find no basis for claims that variants of this denial-of-service attack can cause an exploitable crash, and no evidence for this claim has been offered. There does not appear to be any risk to users or their computers beyond the temporary unresponsiveness at startup.
En voici la traduction :
Manque de réaction temporaire au démarrage pour les titres longs''
Les pages Web avec des titres extrèmement longs (le test publié utilisait 2,5 millions de caractères) peut faire que Firefox et la suite Mozilla semblent ne plus fonctionner au démarrage alors qu'ils sont en train de lire l'historique de navigation. Le navigateur finira par fonctionner normallement, même si cela peut prendre plusieurs minutes sur un ordinateur lent. La lenteur au démarrage persistera tant que le titre long n'aura pas été retiré du fichier de l'historique, ou tant qu'il n'aura pas expiré.
Nous avons mené des recherches sur ce problème et nous pensons qu'il n'y a pas de raison d'affirmer que des variantes de cette attaque par déni de service peut provoquer un plantage qui pourrait être exploité, et nous n'avons pas eu la preuve de cette affirmation. Il ne semble pas y avoir de risque pour les utilisateurs au delà du manque de réactivité au démarrage.
A côté de cela, d'autres navigateurs comportant une faille très critique (évoquée il y 3 semaines ici) permettant d'exécuter du code malicieux, connue depuis mai par son éditeur,
sert à propager des trojans, depuis mi-novembre moment où cette faille que l'éditeur sous-estimait s'est révélée plus dangereuse que prévu. Ce même éditeur ne résoud pas 30% des failles dans son navigateur dont une autre très critique permettant d'exécuter là aussi tout code malicieux sur la machine, connue depuis aout 2003. Mais si j'ai le malheur d'en alerter les forumistes, cela m'est reproché..
Hugues