(Comment ça, ce blog est en train de devenir un blog de râlerie contre les banques ?)
Ayant ranimé un compte
au CIC qui était dans le coma, je voulais me préparer la
possibilité de faire des virements vers ce compte depuis mon
compte LCL (pour les virements dans l'autre sens, on
verra, euh, plus tard). L'interface en ligne de gestion des comptes
de LCL permet de faire des virements, à condition d'avoir
préalablement enregistré le RIB du compte
destinataire. C'est une sécurité minimale qui ne me paraît pas
absurde : on ne peut pas faire un virement vers n'importe où, il faut
d'abord ajouter le RIB, on reçoit un courrier
papier informant de ce fait (ce qui permet de crier au secours si
c'est une tentative de vol), et quelques jours plus tard on peut faire
les virements. Cependant, la sécurité du site en ligne a été
améliorée de bidon
à bidon++
(par exemple, maintenant
pour saisir son code d'accès on ne peut plus le taper au clavier, il
faut cliquer sur des petites images de chiffres — les non-voyants
doivent adorer ça, c'est super pour l'accessibilité — et du coup
n'importe qui qui voit l'écran voit le code, ce qui est assez bof au
niveau sécurité). Maintenant, pour ajouter un RIB
externe, il ne suffit pas de taper son code d'accès, il faut utiliser
un certificat.
A priori, ça me plaît bien. Je suis cryptographe, j'aime bien la signature électronique. Mais le nombre de conneries auxquelles je suis confronté, et qui transforment la simple opération d'ajout d'un RIB en un véritable parcours du combattant, est effarant.
D'abord, la procédure est lourdingue au possible. Il faut : (1) se connecter au site pour faire une demande de certificat, (2) recevoir par courrier papier un code d'activation du certificat, (3) retourner sur le site pour « retirer » le certificat et (4) l'« activer ». C'est lourdingue mais ce n'est pas foncièrement idiot : l'étape (2) est une précaution minimale pour limiter les dommages si quelqu'un récupère les codes d'accès au site (ceci dit, s'il peut faire ça, il pourra probablement récupérer aussi l'accès au certificat, mais passons). L'étape (3) est celle où se fait la génération proprement dite, et il est possible qu'ils aient correctement fait les choses et qu'ils n'aient pas connaissance de la clé privée. Possible. L'étape (4) est une vérification dont je ne comprends pas bien le sens puisqu'ils signent eux-mêmes le certificat à l'étape (3), mais bon, ce n'est pas problématique en soi. Le problème est surtout qu'ils se sont chié dessus à tous les niveaux possibles.
Première connerie : utiliser Java côté client. C'est idiot, on
peut tout faire en JavaScript
(voir ceci,
et penser aussi à la balise magique <keygen>
du HTML), alors que Java dans un navigateur est
lourdingue et marche atrocement mal. Mais admettons.
Premier problème pour moi : mon Java ne marche pas. Ça, je dois le reconnaître, ce n'est pas du tout la faute de LCL. C'est apparemment AdBlock Plus et/ou GreaseMonkey (outils malheureusement indispensables) qui empêchent le plugin Java de Firefox de fonctionner correctement (au moins sur mon Linux, je ne sais pas à quel point c'est général ; j'imagine que non, sinon le problème serait plus connu et probablement déjà résolu). Il faut les désactiver complètement (tous les deux) : il ne suffit pas de les désactiver sur le site, il faut vraiment relancer le navigateur sans ces extensions, si on veut que Java marche. Bon, deux bonnes heures de perdues à découvrir ça.
((Mise à jour
() : On me souffle que seul le
plugin Java de Sun Oracle souffre de ce problème. Si
j'utilise le plugin Java IcedTea, il est, lui, compatible avec AdBlock
Plus et GreaseMonkey (même si, en contrepartie, il semble beaucoup
plus lent au démarrage). Comme c'est IcedTea qui est utilisé par
Ubuntu, je suppose que c'est ça qui explique que le problème ne soit
pas largement connu.))
Ayant enfin réussi à faire marcher mon Java, je retourne sur le site de ma banque, et j'arrive à retirer mon certificat. Maintenant, je veux m'en servir pour signer la demande d'ajout de RIB. Nouvelle applet Java, et celle-ci meurt immédiatement sans autre forme d'explication. Nouveau problème, donc : pourquoi ça ne marche pas ?
Je dois d'abord trouver le moyen d'ouvrir une console Java pour
avoir quelques diagnostics. Pas évident de
trouver la
recette, mais une fois que c'est fait, la raison devient claire :
non seulement ces andouilles croient indispensable d'utiliser Java,
mais ils ne savent pas se débrouiller avec la bibliothèque standard de
Java (qui fait
pourtant tout
en la matière, et surtout le café) : ils ont besoin d'un package à la
con et non
standard, com.dictao
,
dont la simple vue du site Web me laisse penser que c'est du bidon
intégral. Mais le plus affligeant : pour faire une simple signature
électronique, ils ont besoin non seulement d'un package Java externe,
mais ils ont même besoin de bibliothèques natives. (Le
lecteur non techniquement initié ne comprend sans doute pas un mot de
ce que je raconte, mais c'est un peu comme si pour faire fonctionner
une télé on prétendait devoir ouvrir mon compteur électrique et
installer des choses dedans. C'est même pire que ça, tout le principe
de Java est d'éviter d'avoir à utiliser du code natif !, et là ils
arrivent à combiner les inconvénients des deux.)
Et évidemment, ces bibliothèques natives ne sont fournies que dans un petit nombre de versions : Windows 32-bits, Windows 64-bits, Mac OS (je ne sais pas exactement quelles architectures) et Linux 32-bits. Dommage pour ceux qui sont clients de LCL et qui utilisent FreeBSD, ou bien Linux sur un ARM (comme un téléphone mobile Android ?), ou n'importe quoi d'autre ; et dommage pour le principe de portabilité de Java. Dans mon cas, c'est Linux 64-bits, donc je suis baisé. Bon, il se trouve que j'ai un système 32-bits au chaud, donc une fois que j'ai compris le problème, j'ai pu m'en sortir. Tout de même, deux nouvelles heures de perdues ; et au passage, je ne suis pas spécialement content de laisser ces gens de Dictao, que je ne connais ni d'Ève ni des dents, faire tourner des bibliothèques que je ne maîtrise pas sur mon ordi. Ça aussi, c'est assez bof pour la sécurité.
Si quelqu'un veut analyser le truc, l'applet est ici : je serais bien curieux de savoir à quoi servent précisément toutes ces bibliothèques.
Ceci étant, je me rends compte, une fois que j'arrive à faire
marcher l'applet de signature, que j'ai oublié l'étape
d'« activation » du certificat que j'ai reçu. Celle-ci, apparemment,
consiste en gros à refaire une connexion au site de la banque en
s'authentifiant avec le nouveau certificat. Manque de chance, cette
reconnexion constitue techniquement une
renégociation SSL, ce qui est la base
d'une vulnérabilité
connue depuis deux ans, que tous les navigateurs vaguement
décents, et en tout cas le mien, ont corrigé en interdisant le
renégociation SSL. Du coup, cette étape ne marche pas
(error ssl_error_renegotiation_not_allowed
). Bon,
heureusement, si on cherche un peu, on apprend que Firefox
a des
préférences permettant de lever cette interdiction (au cas par
cas, ou globalement). Mais ça donne une idée du niveau de compétence
en sécurité informatique des programmeurs qui ont pondu ce truc.
Au final j'ai bien réussi à activer mon certificat et à signer ma demande d'ajout de nouveau RIB… qui sera effective sous quelques jours, quand ils m'auront envoyé un nouveau courrier pour m'en avertir. Mais quel parcours semé d'embûches !
Ce que j'aimerais bien faire maintenant, c'est analyser ce que fait exactement cette applet Java, la reprogrammer moi-même, et contourner leur truc (par exemple avec GreaseMonkey) pour utiliser le mien à la place. Ça demanderait pas mal d'efforts, donc je ne sais pas si ça en vaut vraiment la peine, mais ça aurait quelque chose de jouissif de rendre public un tel script servant à réparer les idioties de LCL (et à le rendre accessible depuis n'importe quelle machine avec Firefox, pas seulement les Windows, Mac OS et Linux 32-bits).
Je pourrais aussi écrire une lettre à LCL en
disant écoutez, je suis chercheur en crypto dans une grande école
de télécommunications, et mon avis technique détaillé en tant que
spécialiste de sécurité informatique est que vous êtes des
quiches
, mais je crois que je pourrais tout aussi bien pisser dans
un violon que d'espérer pouvoir faire remonter mes critiques à ceux
qui les méritent.