« Le bonheur est une question d'habitude »

Le blog d'Olivier FAURAX

J'ai écris une extension Firefox il y a plus d'un an, qui ajoute simplement des boutons avec les lettres utilisées en espéranto qu'on ne trouve pas sur nos claviers (par exemple ĝ). Ces lettres sont très facile à avoir pour un linuxien (circonflexe + g), mais bien sûr, sous windows, ça marche pas, et j'ai donc fait une extension Esperanto toolbar (effet de bord : cela permet de pousser l'utilisation de Firefox chez les espérantistes sous windows).

Avec Firefox 3, la sécurité des mises à jour d'extension a été renforcée, ce qui fait que les extensions doivent être modifiées pour s'installer et se mettre à jour. Comme je ne suis pas les changements internes de Firefox de près, je me suis simplement rendu compte le jour de la sortie de Firefox 3 que mon extension était désactivée !

Mises à jour sécurisées

Une attaque possible sur les extensions, possible avec Firefox 2, c'est d'intercepter une connexion vers le site qui fournit la mise à jour et de remplacer la nouvelle version téléchargée par une autre.

Par exemple, on pourrait imaginer qu'un proxy d'entreprise remplace le contenu de tous les .xpi téléchargés par une extension qui affiche « Bosse au lieu d'installer des extensions Firefox » à la place du code original contenu dans l'extension.

Sur cet exemple, c'est sympa, mais si on remplace le proxy par un pirate et l'extension par un virus ou un logiciel espion, c'est tout de suite moins drôle.

Pour prévenir ce risque, il y a 2 solutions. Soit télécharger la mise à jour sur un site en HTTPS (la communication est chiffrée, le pirate ne peut pas la modifier). Soit signer l'extension pour qu'il soit possible de vérifier qu'elle n'a pas été modifiée pendant le transport.

La première solution est très simple, c'est par exemple celle utilisée sur http://addons.mozilla.org. C'est d'ailleurs pour ça que Firefox 3 est très pointilleux (c'est un euphémisme) sur les certificats utilisées sur les sites utilisant TLS.

La deuxième solution utilise simplement HTTP, mais elle ajoute de la cryptographie, ce qui la rend plus compliquée, et je viens de passer la soirée à essayer de comprendre le tout (d'où ce billet, d'ailleurs).

En pratique, c'est pas dur

Je pars du principe qu'on a déjà une extension monextension (qui contient un install.rdf), et un site web en HTTP (http://monsite.fr) sur lequel on donne les mises à jour en les décrivant dans le fichier http://monsite.fr/update.rdf.

La première chose, c'est de générer, une seule fois une paire de clé, en utilisant le logiciel McCoy, fournit par Mozilla. Ensuite, on réutilisera cette paire de clé tout le temps pour cette extension, voire même pour d'autres.

Ensuite, on bidouille monextension, et quand elle est prête, on ajoute la clé publique dans le fichier install.rdf (balise em:updateKey), en utilisant la fonction Install de McCoy. L'extension est prête à être publiée !

On fait ensuite un sha1sum sur l'extension et on l'ajoute dans l'update.rdf (balise updateHash, au même niveau qu'updateLink). Et maintenant, on va signer update.rdf avec la fonction Sign de McCoy.

On mets update.rdf en ligne, ainsi que l'extension, et on a une mise à jour sécurisée !

C'est vraiment sécurisé ?

Oui ! Et c'est là que je suis bien content d'avoir fait une thèse sur la sécurité :)

Firefox, pour faire la mise à jour, va aller voir le fichier http://monsite.fr/update.rdf et vérifier qu'il est valide, c'est-à-dire qu'il a bien été signé avec la clé privée, dont il a la clé publique (souvenez-vous, la clé publique est fournie dans l'extension). Si un pirate modifie update.rdf pendant le transport, sa signature ne sera plus bonne, et le fichier sera ignoré.

Si une mise à jour est disponible, il va télécharger le fichier et calculer le sha1sum de ce fichier : s'il est différent de celui du update.rdf, c'est que la mise à jour a été modifiée pendant le transport et elle est rejetée. Sinon, la mise à jour est bonne, et elle est installée.

Commentaires (fil RSS RSS) :

Gravatar de yoho# yoho (Jabber), le mardi 29 juillet 2008 à 09h53 :
Un seul mot : bravo.
Gravatar de deap# deap, le vendredi 1 août 2008 à 13h52 :
Très intéressant, merci ! Comment expliques-tu alors le fait que si peu d'extensions soient signées (je n'en ai jamais vu) ?
Gravatar de Olivier# Olivier (Jabber), le samedi 2 août 2008 à 01h14 :
Pour signer une extension, il faut utiliser un certificat. C'est le même type de certificat que pour les sites en HTTPS.
Du point de vue sécurité, on a alors la même protection que si on télécharge le XPI depuis le site en HTTPS, sauf qu'une fois signé le XPI peut être hébergé n'importe où.

Après, on a toujours le même problème pour les certificats : il faut avoir un certificat signé par un des certificats racine de Firefox (style CACERT ou Verisign) et il faut donc passer à la caisse...
 :
 :(non-publié, utilisé pour le gravatar)
 :
 :
Commentaire :

Merci d'utiliser un français (ou espéranto) correct. Les liens deviennent cliquables.
Vérification anti-spam :
En quelle année a été publié cet article ? / Jaro de tiu artikolo?

À propos de l'auteur

photo Olivier FAURAX Olivier FAURAX

D'un naturel joyeux, positif et curieux, je m'intéresse à beaucoup de choses parmi lesquels la salsa, l'espéranto, la plongée mais surtout l'informatique, le web et Linux.

Même si j'aime programmer, je m'intéresse également aux aspects d'ergonomie, de design et de marketing.

Si vous pensez avoir du travail pour moi, il y a mon LinkedIn et mon CV.

M'écrire : olivier+blog@faurax.fr

Retrouvez-moi sur Facebook et Twitter.

Catégories

S'abonner / Rechercher

S'abonner par RSS logo RSS
S'abonner par courriel :

Rechercher sur ce blog :

Contact

Je lis & je lie

Archives

Archives du blog

Infos & trucs de couleurs

Geo Visitors Map
Validation HTML Validation CSS
spampoison
Creative Commons License

Carte de visite

photo Olivier FAURAX Olivier FAURAX
Téléphone : 0681651140
Courriel :
Jabber : ofaurax@jabber.fr

Cette hCard sémantique a été créée avec le hCard creator.

 
  Olivier FAURAX