Faille de sécurité sur Les Numériques : modifiez vos mots de passe
Des cookies qui manquent de sel
Le 03 novembre 2015 à 12h49
2 min
Internet
Internet
La semaine dernière, nos confrères de Les Numériques ont été victimes d'une cyberattaque ayant entrainé la fuite de logins et de cookies de session. Ces derniers contiennent une empreinte du mot de passe associé au compte, il est donc conseillé d'en changer.
Le site Les Numériques a été victime d'un pirate qui a exploité une faille XSS sur certaines pages du site afin d'exécuter du code JavaScript. Mathias Lallement, directeur technique, explique en effet qu'un « attaquant l'a utilisée pour collecter login+cookie de session, sur certains commentaires d'articles du site, depuis le 25/10 à 17h41 [...] Nous avons été prévenus jeudi soir et avons pu trouver et corriger cette faille entre vendredi et lundi ».
Il ajoute que « la faille permettait d'être connecté à la place du membre, donc d'accéder à l'édition de son profil sur le site, de connaître l'adresse email associée au compte et de changer les informations liées au compte, comme le mot de passe ». Plus problématique, le cookie de session contient une empreinte (hash) du mot de passe du compte, mais qui n'est pas salé. Il est donc bien plus facile de retrouver le mot de passe original, notamment via des Rainbow tables par exemple.
Quoi qu'il en soit, la procédure est toujours la même en pareille situation : changer de mot de passe sur le site, mais aussi sur n'importe quel autre service où il aurait été utilisé. On ne rappellera en effet jamais assez que réutiliser le même mot de passe n'est pas une bonne idée. Nos confrères précisent enfin que « les attaquants n'ont pas eu accès à nos serveurs ni à la base de données du site », sans plus de précisions sur l'origine de l'attaque ou sur le nombre de comptes impactés. Bien évidemment, ils indiquent qu'une plainte va être déposée.
Commentaires (61)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 03/11/2015 à 13h00
Comme quoi, il faut toujours saler avant de hasher !
Le 03/11/2015 à 13h03
Pas cool de bosser le week-end sur ce genre de galère " />
Le 03/11/2015 à 13h04
Bientôt le même problème pour NxI?
" />
Le 03/11/2015 à 13h05
Le 03/11/2015 à 13h10
C’est un cauchemar en cuisine mixé avec qui est le meilleur pâtissier.
Le 03/11/2015 à 13h11
Le 03/11/2015 à 13h14
Le 03/11/2015 à 13h16
Et la faille Php exploité sur 000webhost.com (=hostinger en France), personne n’en parle?
Le 05/11/2015 à 13h10
Le 05/11/2015 à 16h03
Le 05/11/2015 à 16h09
Le 05/11/2015 à 17h10
Si je sais que f(x & sel) = qdmcjadica, f(x+1 & sel) = qo^finpqocve, f(x+2 & sel) = dqsùvknaevn ; potentiellement, ça me donne un angle d’attaque (d’ailleurs, le sel, s’il est constant, n’apporte absolument rien). On est d’accord que ça reste quelque chose de pas trivial.
Mais surtout, si j’y arrive, que ce soit par chance, par astuce ou en tapant suffisamment fort sur ton admin, je peux prédire tous tes futurs id de session, et usurper l’identité de qui je veux.
En fait ta méthode c’est un peu comme hasher les mots de passe avec un sel constant.
En soit, c’est pas mauvais, parce que ça reste très difficile d’inverser l’algo de hachage, mais le problème c’est que si quelqu’un se procure son mdp haché hors-ligne, il peut prendre tout son temps pour le casser et en déduire le sel. Avec cette info, il aura beaucoup plus de facilité à casser les autres mots de passe s’il arrive à se procurer leurs hashs.
La critique ne porte pas sur la facilité à casser un mécanisme donné, mais sur le fait que réussir à en casser un ouvre la porte à tous les autres. Pour reprendre ta métaphore de la porte blindée, c’est comme si forcer tranquillement une porte blindée dans mon garage me permet d’en déduire comment fabriquer la clé de toutes les portes blindées de la même marque à travers le monde. Elle peut être aussi solide qu’elle veut, ça en fait une porte blindée médiocre.
C’est pour ça qu’il est recommandé de façon générale d’utiliser des valeurs aléatoires pour tout ce qui doit être difficile à deviner, et n’a pas besoin d’être retenu par un humain. C’est pour les sels de mots de passe, les jetons CSRF, les id de session…
Le 05/11/2015 à 17h16
Arf, j’ai dit une connerie sur le hash.
Ce qu’il va avoir ton son temps pour faire, c’est construire sa rainbowtable, évidemment pas trouver le sel, qui n’a rien de secret.
Le 03/11/2015 à 16h00
En parlant de sécurité de mdp, étant abonné chez orange (internet fixe) j’avais perdu mon mot de passe. Je demande donc un mdp et il me sort quoi ? mon ancien mot de passe, en clair…. Bizarre non ?
Le 03/11/2015 à 16h01
C’est quoi le salage exactement? explication Simple hein.
Le 03/11/2015 à 16h03
Mais ça, il n’y a rien à y faire en HTTP. La seul parade c’est d’être en HTTPS.
Le 03/11/2015 à 16h42
Ah d’accord, donc ça veut dire que les failles xss permette à une personne mal intentionné d’écrire sur le serveur qui contient le code javascript à la base et d’en altérer son contenu.
Ce genre de chose m’étonnera toujours. y’a pas un paramètre dans le serveur qui empêcherait qu’une écriture de ce genre soit possible ? (au niveau de la restriction rwx )
Enfin pour moi un serveur web dans l’idéal serait un point accessible du net (donc vulnérable) mais dont il serait impossible d’écrire dessus sauf lors d’un déploiement/MàJ.
Le 03/11/2015 à 20h12
Le 03/11/2015 à 22h05
Le HTTPS n’empêche pas le XSS.
Chopage des cookies via XSS, puis immédiatement, usurpation des sessions en cours. Cookie crypté ou non, communications en HTTPS ou non. Bon, normalement certains gestionnaires de sessions gueulent si on réutilise le même cookie depuis plusieurs IP pour éviter ça, mais ça fait aussi merdoyer ces sites sur les hotspots instables ou les connexions avec load balancing.
Le 03/11/2015 à 22h09
Disons qu’une attaque par dictionnaire arriverait à trouver mon mdp ^^.
Le 04/11/2015 à 00h11
c’est pas nécessairement stocké dessus, dans ce cas, le XSS est dit reflectif et ne s’applique qu’aux personne qui font la requête directement avec le code dedans (par exemple suite à un phishing ou on amène la victime a cliquer sur un lien spécifique).
Maintenant un serveur où tu n’as aucun moyen d’écrire ce sont certain sites web style an2000, de nos jour ya toujours une partie commentaires ou une partie compte utilisateur ou que sais-je qui fait qu’il est possible d’écrire (rien qu’a la place de mon pseudo je pourrais mettre du code, et sur un site vulnérable, toute personne chargeant une page affichant mon pseudo exécutera le code). les informations sont stockées en base de données mais ça reste une inscription de donnée sur le serveur… la seule protection c’est de filtrer correctement les informations que le serveur reçoit de la part des utilisateur pour s’assurer qu’il n’intègre ou en renvoie rien qui puisse tromper le navigateur de ses visiteurs.
Le 04/11/2015 à 04h08
Mettre dans le cookie un jeton temporaire de connexion, lié dans la bdd à un compte utilisateur dont on mémorise l’ip de dernière authentification, et vérifier la correspondance IP/JETON ca doit marcher non?
(je précise, le jeton est lié a un COMPTE unique, pas juste a une ip. L’ip est une info enregistrée dans le compte :)
Le pirate récupère le cookie, mais a moins d’avoir la meme ip que le visiteur il ne pourra rien faire.
Le 04/11/2015 à 07h29
C’est une suite de caractères ajoutée au mot de passe pour rendre le hachage plus difficile à inverser. Jette un oeil à la page Wikipedia sur le sujet Wikipedia
Le 04/11/2015 à 15h58
Le 04/11/2015 à 16h26
Ce qu’on m’avait présenté comme bonne pratique, c’est un truc long, aléatoire (généré par un outil de qualité, qui lave plus aléatoire que les générateurs " />), et vérification que l’id n’ait jamais été utilisé (pas même par une session passée). L’id doit changer à chaque session, bien entendu.
Ce qui est essentiel, c’est que l’id ne puisse pas être deviné, donc pas de n° qui se suivent ou de timestamp (pas même hashés), ni de construction à partir des infos du clients (son IP, MAC, id…).
Le point ‘jamais utilisé’ me semble légèrement overkill, et peut-être pas très facilement scalable. Après, tel que j’ai compris le sujet, si on a une section aléatoire suffisamment longue et une section non aléatoire qui assure l’unicité, c’est bien sécurisé : la longue partie aléatoire assure la non-devinabilité, l’autre partie assure l’unicité, peu importe si elle peut être devinée.
Attention toutefois à ce que cette partie qui assure l’unicité ne contienne pas d’info sensible, donc pas d’id ou de mdp. Un compteur incrémenté fait l’affaire.
Le 05/11/2015 à 08h17
Le 05/11/2015 à 11h31
Oui, mais avec un simple id chiffré, si un pirate arrive à récupérer la clé (par exemple en analysant ses cookies successifs), il peut ensuite très facilement prédire tous les identifiants futurs. C’est certes très difficile, mais si quelqu’un y arrive, c’est catastrophique. D’où l’intérêt de mélanger les deux, ce qui est à la fois techniquement facile, et très robuste.
D’ailleurs, php génère ses id de session à peu près comme ça (à la différence qu’ils ne garantissent pas de façon absolue l’unicité, c’est seulement très improbable d’avoir une collision). Je ne sais pas pourquoi ils n’ont pas garanti l’unicité avec un truc genre auto-increment, il doit y avoir une subtilité qui m’échappe.
Le 05/11/2015 à 11h40
Le 05/11/2015 à 12h55
L’écrasante majorité des chiffrements symétriques sont basés sur des clé générées aléatoirement, et périmées rapidement. Le risque qu’un pirate puisse retrouver la clé en analysant en détail une connexion existe, mais ça ne lui donne pas le moyen de déchiffrer toutes les communications futures.
Pour ton id de session c’est pareil : si tu chiffres avec une clé aléatoire, unique et à faible durée de vie, c’est probablement super-sécure. Par contre tu reportes la difficulté le la génération de l’id sur la génération de la clé. Si tu chiffres toujours avec la même clé, la difficulté pour remonter à la clé est toujours la même, mais si quelqu’un y arrive, c’est une porte d’entrée durable.
Sinon même sans considérer que c’est l’algo de chiffrement qui tombe, une clé de chiffrement peut s’obtenir par d’autres moyens (chantage…). Le nombre aléatoire à le bon goût de ne pas être divulguable à l’avance.
Pour un petit site perso, ça n’a pas une très grande importance, mais si tu gères des données vraiment sensibles, mieux vaut éviter.
Après, tu as peut-être raison de dire qu’il existe souvent des moyens plus simple d’entrer, mais c’est pas parce que la porte de derrière ferme mal qu’il faut laisser les fenêtres ouvertes!
Le 03/11/2015 à 14h17
du coup si je fais la synthèse des échanges, il faudrait un cookie qui contienne l’ID plus un élément aléatoire chiffré par le serveur, qui le déchiffre a chaque fois, récupère l’id dans la chaine pour ensuite requêter les bonnes info?
je sais pas si en perf c’est plus économique que de taper directement sur le contexte associé a ton PHPSESSID par exemple… mais pourquoi pas, je m’y connais pas des masses en optimisation
Le 03/11/2015 à 14h28
Le 03/11/2015 à 14h29
Mais une question…
Comment un pirate peut récupérer le cookie d’un utilisateur X ?
Il l’a intercepté ? du coup c’est une MitM non ?
il l’a récupéré sur un serveur de lesnumeriques.com ?
il l’a récupéré en étant sur l’ordinateur de l’utilisateur X ?
Enfin c’est un peu la question que je me pose en lisant cette article…
Le 03/11/2015 à 14h30
c’est chiant car j’utilise un login et mdp que j’utilise pas mal ailleurs … mais sais pas trop ou " />
Le 03/11/2015 à 14h41
Du coup sans aléat tu te retrouves avec un autre problème, ton cookie est toujours le meme pour une personne donnée, donc il suffit que bidule se connecte une fois depuis un poste partagé ou que je me balade sur son poste pendant sa pause café et me voila capable d’usurper sa session quand je veux.
les bonnes pratiques en la matière étant de renouveller le cookie à chaque changement d’état (après authent et après déco ) et que lors de la déco la session soit correctement purgée, si dès que l’utilisateur se réauthentifie on lui ressort le meme cookie ca pose problème.
Le 03/11/2015 à 14h45
en fait le XSS est une attaque qui vise l’utilisateur et pas le serveur en injectant du code qui est interpreté par ton navigateur.
bref, l’attaquant a peut être trouvé une faille dans les commentaires par exemple, et a donc posté un commentaire spécial avec du code javascript. S’il s’applique un peu, les artefact sont pas trop visible quand tu regardes la page, mais ton navigateur quand il recoit le contenu de la page, au moment d’afficher le fameux commentaire va afficher ce qu’il comprend etre du texte et interpreter le code qu’il reconnait.
Ce code est généralement “fait une requete vers tel serveur en affichant le login courant et la valeur du cookie de session”
donc ce n’est ni du MitM, ni une attaque du serveur, mais le piégeage de ton navigateur web
Le 03/11/2015 à 14h45
Via la faille XSS.
Celle-ci permet à l’attaquant de glisser du code javascript malveillant qui sera exécuté sur un client (celui qui n’aura pas de chance).
Le script permet de venir lire les infos du cookie du client (autrement dit, c’est un vol de cookie), et ces infos sont ensuite renvoyée d’une manière ou d’un autre vers un autre serveur (celui de l’attaquant).
S’il n’y avait pas de faille XSS, l’attaquant ne devrais pas pouvoir ajouter du script javascript a une page.
C’est un peut comme si tu trouvais une faille dans NXI qui te permette de rajouter une photo dans les commentaire. Cette photo serait ensuite visible par les autres utilisateur (le vol peut commencer).
L’autre faille c’est d’être vu coller le hash du mot de passe dans le cookie." />
Si la première faille est excusable, la seconde ne l’est pas..
Le 03/11/2015 à 14h53
Cookie de session ?
Donc ces cookies doivent être transmis en https uniquement. Le bon réflexe est donc de mettre l’attribut Secure sur ses cookies.
De plus, ils ont été volés par une faille XSS, donc il manquait l’attribut httpOnly qui doit être mis sur ce type de cookie.
On ajoutera qu’une politique Content-Security-Policy et l’utilisation de fonction comme htmlspecialchars() auraient évité cet incident.
PS: mince grillé ci-dessus pour les attributs
Le 03/11/2015 à 14h56
Le 03/11/2015 à 14h58
Mais avec la certification ISO 1664
(Désolé)
Le 03/11/2015 à 15h16
excuser un XSS? tu est trop bon avec eux " />
C’est
pas parce que c’est hyper courant que c’est excusable, avec des
frameworks comme BeeF on fait des choses très sales depuis quelques années maintenant
Le 03/11/2015 à 15h20
Oui, j’excuse. C’est toujours moins gênant qu’une faille SQL.. ou des mots de passe stockés en clair." />
Si le reste du site n’est pas trop mal construit, une faille XSS n’est en principe pas trop virulente.
Le 03/11/2015 à 15h21
meuuuuh non ca dépend juste de ta catégorie: utilisateur de debian ou non." /> comme ca par exemple
Le 03/11/2015 à 15h23
Je viens de me rendre compte qu’ils n’ont pas de connexion sécurisée pour l’identification sur le forum… Sinon de mon coté c’est fait, mot de passe changé " />
Le 03/11/2015 à 15h29
Je savais pas que l’aléatoire “pseudo-aléatoire” était un problème de distribution.
En tout cas le rand() PHP (quelque soit la distrib) est une calamité." />
Ce qui me fait bien marrer, c’est la description de la fonction mt_rand () : Génère une meilleure valeur aléatoire " />
Le 03/11/2015 à 15h57
Le 03/11/2015 à 13h33
Mauvaise gestion des cookies par les devs.
Bonne pratique : un cookie n’est pas fait pour stoker des données mais uniquement un identifiant unique crypté (lisible uniquement par le serveur). De cet identifiant, on récupère ensuite les infos associées coté serveur.
De cette manière, un seul cookie est nécessaire (on y associe autant d’info qu’on veut coté serveur), celui-ci est le plus léger possible, et n’y a plus de risque de fuite d’infos (quand bien même quelqu’un arriverait à décrypter le cookie il ne récupèrerais qu’un identifiant inexploitable en tant que tel..)
Le 03/11/2015 à 13h40
" />Et en attendant pas un seul message sur leur propre page d’accueil " />
Le 03/11/2015 à 13h41
Roh, les méchants pirates pourraient avoir accès à ma boite /trash " />
Le 03/11/2015 à 13h43
Tout à fait d’accord. C’est quoi cette histoire de stocker le hash du mot de passe dans le cookie ? Sérieusement ?
Le 03/11/2015 à 13h45
aucun intérêt/sens de chiffrer un cookie, oui pour le reste. il ne doit etre qu’un id permettant de retrouver les informations. Par contre l’attribut HttpOnly, déja ca evite de recupérer l’info via un XSS moisi et si possible le tout communiqué sur SSL bien (mais bon la pub limite visiblement cf les problematique NxI) avec l’attribut secure.
Le 03/11/2015 à 13h49
Si si, le crypter évite que le client viennent le bidouiller et/ou le modifier.
Si j’ai un id (en clair) du genre 123456 dans mon cookie et que je remplace par 123457 il y a de grandes chance que je me retrouve connecté avec un autre compte." /> Si c’est crypté tu peux toujours essayer de le modifier…
Le 03/11/2015 à 13h50
Un cookie de session en fait ?
Le 03/11/2015 à 13h52
J’aime pas crypter. Chiffrer c’est plus mieux.
Je sors " />
Le 03/11/2015 à 13h52
Oui." />
Le 03/11/2015 à 13h55
le problème reste le meme, il ne s’agit pas de crypter, il suffit juste de générer des ID non linéaires et suffisament entropique c’est la qu’est la sécurité, en diminuant la proba que l’utilisateur trouve une chaine de caractère qui corresponde à un ID (si ton chiffré est ridiculement court tu ne résoud pas le problème par exemple) , ce que globalement php et consort savent faire plutot bien de nos jours.
Le 03/11/2015 à 13h58
Mais là tu compares un bête ID que tu incrémentes à chaque connexion à un ID aléatoire (le résultat de ton chiffrement). Pas sûr que tu gagnes en sécurité avec le chiffrement si ton ID fait autant de bits et est simplement généré aléatoirement.
Le 03/11/2015 à 14h01
Le 03/11/2015 à 14h04
Le 03/11/2015 à 14h06
Pour la faille 000webhost, voici ce que j’ai reçu :
What happened?
A hacker used an exploit in an old PHP version, that we were using on our website, in order to gain access to our
systems. Data that has been stolen includes usernames, passwords, email addresses, IP addresses and names.
Although the whole database has been compromised, we are mostly concerned about the leaked client information.
What did we do about it?
We have been aware of this issue since 27th of October and our team started to troubleshoot and resolve this issue
the same day, immediately after becoming aware of this issue.
In an effort to protect our users we have temporarily blocked access to systems affected by this security flaw. We
will re-enable access to the affected systems after an investigation and once all security issues have been
resolved. Affected systems include our website and our members area. Additionally we have temporarily blocked FTP
access, as FTP passwords have been stolen as well.
We reseted all users passwords in our systems and increased the level of encryption to prevent such issues in the
future.
We are still working around the clock to identify and eliminate all security flaws. We will get back to providing
the free service soon. We are also updating and patching our systems.
What do you need to do?
As all the passwords have been changed to random values, you now need to reset them when the service goes live
again.
DO NOT USE YOUR PREVIOUS PASSWORD.
PLEASE ALSO CHANGE YOUR PASSWORDS IF YOU USED THE SAME PASSWORD FOR OTHER SERVICES.
We also recommend that you use Two Factor Authentication (TFA) and a different password for every service whenever
possible. We can recommend the Authy authenticator app and the LastPass password manager.
We are sorry
At 000webhost we are committed to protect user information and our systems. We are sorry and sincerely apologize we
didn’t manage to live up to that.
At 000webhost our top priority remains the same - to provide free quality web hosting for everyone. The 000webhost
community is a big family, exploring and using the possibilities of the internet together.
Our leadership team will closely monitor this issue and will do everything possible to earn your trust every day.
Sincerely,
000webhost CEO,
Arnas Stuopelis
Le 03/11/2015 à 14h07
Le 03/11/2015 à 14h09
Merci d’éviter les HS :)