Artificial truth

The more you see, the less you believe.

[archives] [latest] | [homepage] | [atom/rss]

Analyse rapide de l'extension anti-phishing pour Firefox du Credit-Mutuel
Sat 05 September 2015 — download

This article is in French since it's about a (broken) Firefox extension of a French bank, namely the Credit Mutuel.

Il y a peu, je voulais regarder l'application Android de ma banque, mais j'ai fini (un peu par flemme) par regarder le code de leur extension Firefox à la place, codée par Euro information, la Filiale informatique du groupe Crédit Mutuel/CIC.

Voici un bref résumé de l'opération.

Liste des url

La liste des url sur liste blanche peut être obtenue ici, et déchiffrée avec le script suivant:

import sys
import itertools

KEY = 'kUs@yR'.upper()

with open(sys.argv[1], 'r') as f:
    for i in f.readlines()[1:]:
        ret = ''
        for c,k in itertools.izip(i[:-2], itertools.cycle(KEY)):
            ret += chr(ord(c) - (ord(k) - 65))
        print(ret.lower())

Détail amusant:

$ python decrypt.py ./chrome/barreconf/content/domfic.dat | xargs dig | grep NXDOMAIN 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 55482
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 31574

Qui sera le premier à les acheter pour être whitelisté et avoir une jolie barre verte pour faire du phishing ?

La liste (encodée) des url blacklistées peut être obtenue ici, ou ici en clair. Voici le script pour la déchiffrer:

import sys

LN_CHAINE_CLAIRE   = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/&?.-~=_";
LN_CHAINE_MELANGEE = "f~7m60Fp.Kv&yr?_bsS9Ye82BuoNxqW/E=GkItinLMaOzRdjTUgJAlZ1PH4Qc5Vh3CX-wD";

with open(sys.argv[1], 'r') as f:
    for line in f.read().split('\r\n'):
        for url in line.split('|'):
            if url.startswith('!'):
                ret = 'http://'
            elif url.startswith('*'):
                ret = 'https://'
            for c in url[1:]:
                if c not in LN_CHAINE_MELANGEE:
                    ret += c
                else:
                    ret += LN_CHAINE_CLAIRE[LN_CHAINE_MELANGEE.index(c)]
            print(ret)

Elle contient (perdues entre les url malveillantes) quelques perles, comme:

Quand l'utilisateur navigue sur une page blacklistée, le popup apparait, mais également si un formulaire avec une méthode POST et son action vers une de ces addresses sont présents sur la page.

Les urls sont matchées avec leur protocole, ce qui fait qu'il est possible de contourner complètement la vérification sur les formulaires en utilisant des PRURL.

Vulnérabilités

Bypass et faux-positifs

Parce que parser des url à la main ne semble pas être une chouette idée, c'est précisément ce que fait l'extension : ce qui permet de lui faire croire que cette url est le site officiel du Crédit Mutuel, tandis que celle-ci serait un site de phishing.

Credit mutuel faux négatif

Credit mutuel faux positif

Manipulation du DOM

La popup de phishing est affichée en manipulant le DOM de la page courante; ce qui veut dire qu'il est possible de la détecter, modifier, masquer, … avec un peu de javascript:

if (document.getElementById('bc_attention') != null) {
    alert('Safebar detected!');
}

document.getElementById('bc_attention').style.display = 'none';
document.getElementById('bc_blocage').style.display = 'none';

Comme l'annotation dans la barre de phishing a lieu après le chargement de la page, il suffit de charger une ressource indéfiniment (à la deelay.me) pour que le site ne soit pas détecté comme malveillant. On doit aussi pouvoir jouer un peu à grand coup de CSP.

Il est également possible de changer l'adresse de destination du bouton Sortir d'ici avec une seule ligne de javascript:

window.home = function(){window.location='https://dustri.org';};

Tracking

L'extension se permet d'injecter un morceau de javascript traqueur depuis http://www.google-analytics.com (oui, en http, au cas ) sur les pages whitelistées et blacklistées, ainsi qu'un cookie contenant la version de la toolbar et le numéro de version de Firefox.

Ce comportement n'est mentionné nulle part dans le CLUF.

Notes diverses

Framekiller

Le site principal utilise une espèce de framekiller (mais uniquement sur la page principale), au lieu de X-Frame-Options: DENY qui marcherait à tous les coups.

Commentaires des utilisateurs

Visiblement, je ne suis pas le seul à trouver que l'extension est légèrement suboptimale.

Problèmes de performance

Vérifier de manière synchrone que l'url actuelle (ou celle des actions des formulaires) ne fait pas partie d'une liste de près de 4000 items, déchiffrée à chaque vérification a un impact important sur la navigation en terme de performances.

Conclusion

L'extension procure un faux sentiment de sécurité, n'est plus maintenue, ralentit la navigation, traque ses utilisateurs sans les en avertir, … Bref, à éviter.

[edit] Un lecteur a ouvert un bug chez Mozilla pour faire blacklister l'extension.