David Madore's WebLog: Comment se battre contre les programmeurs imbéciles de chez LCL

[Index of all entries / Index de toutes les entréesLatest entries / Dernières entréesXML (RSS 1.0) • Recent comments / Commentaires récents]

↓Entry #1959 [older| permalink|newer] / ↓Entrée #1959 [précédente| permalien|suivante] ↓

(mercredi)

Comment se battre contre les programmeurs imbéciles de chez LCL

(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.

↑Entry #1959 [older| permalink|newer] / ↑Entrée #1959 [précédente| permalien|suivante] ↑

[Index of all entries / Index de toutes les entréesLatest entries / Dernières entréesXML (RSS 1.0) • Recent comments / Commentaires récents]