Faille SQL : LoL Guru, je LIKE.

Par Maxime, le 29 mars 2010.

Aujourd’hui a été annoncé en grandes pompes (…) le nouveau site du groupe PlayWeb, dirigé de main de maître par Romain Casolari (on sent que c’est le même, vu les sites), alias Chauffeur de Buzz, j’ai nommé LoL Guru. Le nom fait déjà frémir, cependant la description vaut le détour :

Bienvenue sur mon site, je suis LoL Guru ®, né le 21 décembre 1891, je suis considéré comme le Gourou du Divertissement !!! Je blogue, mets à jour ce site depuis le début du XXe siècle pour partager avec vous les news, photos, vidéos, sites Internet, jeux et coloriages en ligne, prochaines et dernières sorties de DVD, jeux vidéo, logiciels, applications, …

Amusez-vous bien LOL

Moi quand on me propose de m’amuser, je dis jamais non.

Mais… J’ai des loisirs un peu différents.

En tant que développeur, le backoffice d’un site si énorme m’intriguait. Je l’imaginais déjà rempli d’algorithmes, une interface à la Minority Report pour taper plus vite que son ombre, de l’autocompletion en AJAX en veux-tu en voilà…

akaa.png
Paie ta déception.

Ouais bon, on repassera. Je vous reprends encore quelques minutes de votre temps, mes petits pandas, pour vous expliquer comment j’en suis arrivé là.

Il ne faut pas très longtemps, même pour un con comme moi, pour trouver l’adresse de l’administration du site. En effet, un aller simple sur http://fr.lolguru.com/admin/connexion.asp nous laissait apparaître un joli formulaire d’identification.

Ayant peu d’espoir mais ne pouvant repartir sans avoir testé, je me lance et écris une apostrophe comme identifiant, ainsi qu’en mot de passe. Je m’attendais à me faire rejeter bien comme il faut, avec une alerte automatique au GIGN. Quand je vois simplement l’erreur suivante :

[Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans la chaîne dans l’expression "login like ’’’ and password like ’’’".

Je n’ai donc pas pu accéder à l’administration du site. Cependant deux points m’intriguent :

  • L’utilisation de la syntaxe SQL LIKE pour l’identification autorise le wildcard %. Très dangereux pour un système d’identification.
  • Mes apostrophes n’ont en plus pas été échappées par un antislash, ce qui a provoqué l’erreur SQL. Très très dangereux…

L’idée de mettre le wildcard % comme identifiant ainsi que mot de passe rendrait donc la requête SQL suivante : login like ‘%’ and password like ‘%’, ce qui sélectionnerait donc n’importe quel identifiant stocké dans la base. Et effectivement, j’ai été identifié comme administrateur (voir capture d’écran ci-dessus).

axcv.png
Faut toujours deux preuves.

Ne cherchez plus à aller sur cette page, elle a été supprimée / renommée depuis. Encore mes talents de prestidigitateur.

Pour résumer, voici 4 erreurs à ne pas reproduire sur votre site :

  • Ne pas utiliser la syntaxe SQL LIKE en dehors de cas très particuliers (comme la recherche dans une table).
  • Ne pas afficher les erreurs SQL lorsque son site est en production (ou au moins, pas les requêtes complètes…).
  • Ne pas oublier d’échapper les données injectées dans une requêtes.
  • Eviter d’avoir un répertoire administration avec un nom évident si on n’est pas sûr de sa sécurité.

Si vous ne savez pas protéger correctement votre administration et que vous êtes sur Apache, vous pouvez tout aussi bien utiliser la méthode de la protection par .htaccess/.htpasswd.

Au-delà de cette faille, j’ai été surpris par l’austérité de ce backoffice. Rempli de cases austères tel un formulaire de l’administration pénitencière, avec des couleurs hasardeuses et des fautes d’orthographe, ça ne donne pas vraiment envie de travailler et produire du contenu.

Et vous, est-ce que l’administration de votre blog/site est agréable ? Est-ce que ça a de l’importance pour vous ?

41 commentaires

Leg'Z

Ah ah fort !
Presque aussi dur que pour Hacker-Croll et Twitter dites donc ;)

Merci pour ces screens et pour l’explication qui va bien :)

Mallox

AHAHA !! Enorme! bien ouèj le Champenois
je recommande l’utilisation du mod_security pour apache qui permet de bloquer 70% des attaques connues dont l’injection SQL… la base!

laLettreD —

« Depuis le début du XXeme siècle » … il est fort, très fort.

Nicolas Laurent

Ahahah… FAIL ! Bah, honnêtement, je me fait pas chier à réinventer la roue. Pour tout se qui est blog WordPress est mon ami. Si non, .htaccess/.htpasswd s’occupe de la sécurité de mes interface d’admin depuis de nombreuse années. Les problème de sécurité ont été résolu par des gens compétant. Pourquoi se faire chier ?

Jérôme M.

Tout à fait d’accord avec toi sur le fait qu’une interface d’admin (surtout si c’est fait pour les autres) doit être un minimum agréable.

Sinon wai la faille est quand même impardonnable.

Pouet —

Belle démonstration.
Mais au dela de ca, tu n’aurais pas un peu peur qu’il entame une procédure contre toi pour intrusion toussa toussa ?

milou —

Encore un splendide site signé CHAUFFEUR DE FAIL bien sucé sur Buzzfeed la patte franchouillarde en +. Je lui donne pas plus à vivre que francewideweb.com ..

odenis

Interface austère pourquoi pas.. Après tout si l’essentiel est là.
Pas contre c’est vrai que cela sent un peu trop l’amateurisme en développement (injection, nom page logon). Mais bon le site est vraiment sympa coté utilisateur. En espérant qu’avant de publier ton article, tu lui as fait part de tes trouvailles ?

MrMoins —

Bien vu, et j’imagine que tu as prévenu l’intéréssé avant de publié tout ceci ? :)

Bref, c’est vrai que l’interface est importante pour moi aussi, c’est qd même lus agréable de produire à la chaine qd on ne s’arrcahe pas les yeux sur des fonts en 10px. J’aime bien utiliser ce thème pour mes admins http://www.admintasia.com/

Tu nous fais un capture de celui de VDM histoire de ?

Romain —

Non Pouet, Maxime vient de me rendre service.

Hugo

Avec une requête SQL préparée (comprendre Prepared Statement), ce genre de faille de sécurité n’aurait pas été rendue possible. Après, l’utilisation du LIKE est toujours à proscrire pour ce genre de fonctionnalité. Il aurait même fallu éviter le AND password.

Le mot de passe devrait être stocké haché dans la table et généré à partir d’un grain de sel unique tenu secret.

L’algorithme d’authentification devrait s’exécuter en trois temps :

1. Récupération du password utilisateur à partir du username et d’une requête préparée.

SELECT password, salt FROM user WHERE username = ?

2. Appliquer l’algorithme de hachage sur le password saisi dans le formulaire en utilisant bien sûr le grain de sel récupéré dans la table ou bien ailleurs dans un fichier de configuration. Une fois calculé, le hash doit être comparé à celui qui se trouve dans la table pour valider ou invalider l’authentification.

// Calcul du hash, par exemple:
String hash = sha1(salt.password_saisi);

Si hash = password_en_bdd Alors:
Authentification Ok;
Sinon:
Echec Authentification;
FinSi

3. Password Ok, alors autoriser l’authentification.

Vu son système d’authentification très spartiate, je suis presque sûr que l’on peut accéder aux pages d’admin sans forcément repasser par le formulaire de login si l’on n’est pas authentifié.

Hugo.

Joffrey

Hugo> Théoriquement oui, les sessions devraient suffire.

Steuf

@Hugo C’est effectivement la procédure classique et recommandée pour faire un formulaire de connexion. Impressionnant d’ailleurs de voir que cela n’est toujours pas rentré dans les mœurs…

Mis à part ça, je n’ai toujours pas compris ce qu’était le concept de ce site :/ Je le trouve même totalement banal.

pocky

Cette histoire (couplé au commentaire d’Hugo) me fait furieusement penser à un article dont le titre était (il me semble) « how to build your login system with salt and pepper ».

Certains auraient pu jeter un oeil dessus -_-v

Plus sérieusement, il me semble que le principal problème (qui n’est pas abordé) c’est le fait que CDB utilise plus ou moins le même code à chacun de ses nouveaux projets ce qui implique donc que ce genre de faille est plus ou moins présente de partout.

Quant à l’adresse du BO, il est vraiment tout de suite, on va penser admin/administration/… l’avantage est que c’est facile à mémoriser, l’inconvénient que n’importe qui peut y penser. Il ne faut cependant pas oublier le client final qui aura du mal à comprendre pourquoi est-ce qu’il faut tapper /trucmuche ou /trucmuche.php alors qu’il serait tellement facile de mettre /admin. Donc avantage/inconvénient à jauger.

Donc la conclusion en ce qui me concerne :
- Avant toute chose, pensez toujours à vous créer une base saine et robuste que vous pourrez réutiliser à chacun de vos développements (avec pour l’authentification un hashage dynamique dépendant du nom du site par exemple).
- En plus des conditions citées par Hugo, rajouter un petit message d’erreur dépendant du contexte « vous n’avez pas accès à cette partie » « l’utilisateur bidule n’a pas été trouvé »…
- Avec PHP, utiliser PDO qui vous permettra de préparer des requêtes, échapper automatiquement et pleins d’autres avantages.
- Eviter d’utiliser un login basique « admin/root/god/… »
- Ne pas oublier qu’une personne peut rentrer par une autre page que /admin/index.php (par exemple), veillez donc à bien sécuriser l’ensemble du BO
- Pensez tout de même à vos l’UI de votre backoffice, qui dans le cas présent, est gentil tant qu’on est tout seul à interagir dessus mais qui deviennent très chiant pour d’autres utilisateurs

A noter que cela n’a rien d’extraordinaire, il s’agit juste d’une série de bonnes pratique que vous devez mettre en place pour assurer un minimum.

Mathias

Vous en voulez encore ?

Il n’y a pas de limitation de votes par l’IP. Exemple : je viens de cliquer 20 (vingt) fois sur « shame » sur cette page : http://fr.lolguru.com/news/apple-annonce-iphone.htm . (Rien de spécial contre l’iPhone, c’était juste un test.)

Mathias

J’ai l’impression qu’il faut avoir jugé au moins une fois un article pour voir les vrais scores… gné ?

Etienne

c’est du farmlink à la pelle non ?

Romain —

Et par curiosité, l’admin de VDM ressemble à quoi ?

Nico —

@romain : a priori elle ressemble à ça
http://www.fmyscript.com/demo.html

leonjerome —

Comme quoi on peux être riche (tout est relatif) et s’en sortir en étant incompétent (tout est relatif aussi) lal.

Simca1000 —

Encore une bouse signée Chauffeur de Bouse : le type qui donne des leçons de designs web alors que ses sites sont moches comme c’est pas possible.
Comme dirait l’autre, quand t’as vu le design de Agrojob, tu peux mourrir tranquille (surtout que quand tu vas sur ce site, t’as trop envie d’aller sur Agrojob.tel, le domaine qui t’apprends les même choses que tu peux trouver sur agrojob.com)
Il se prend pour le king du web, alors que ce qu’il fait surtout c’est sortir des sites redondants (sors nous un 8eme site sur les coloriages, un 12eme site sur Mario), avec des technos vieillotes (ASP et l’excellent moteur JET), des hébergeurs d’un autre temps (Prosygma). Ca se voit clairement qu’il n’a aucune archi web digne de se nom pour gérer sa flotte de milliards de pages « long-tail-focused ».
A ca il est en fier de ses designs en 1280px, moi perso ca m’a mis une claque
Mais passons, maintenant il a pris le melon ultime, depuis qu’il accumule les chèques adsense il peut être fier de préciser (même si ca fait passablement beauf pour un entrepreneur) que le Groupe Play Web est une SAS (waaa, c le niveau supérieur à la SARL, trop petit joueur en cas de revente pour toucher sa retraite à un capital de 300 000. Il précise bien que SAS est une « Société par Action Simplifiée ». S’il mettait son melon de côté, il saurait que ca veut dire « Société par Actions Simplifiée », car ce n’est pas l’action qui est simplifiée.
Casolari, c’est le collectionneur du web, le type qui accumule des trucs sans reelles cohérents. Pas l’entrepreneur du siecle, mais il a le merite d’être excellent en SEO et a su toujours generer du cash, même si certaines thematiques sont pas reluisantes.
Si je suis critique, c’est que Casolari est trop prétentieux sur le web (j’ai dit sur le web, mais dans la vie de tous les jours), a dire que ses sites mettent des claques au web, à faire des critiques de sites web sur CDB alors que lui est loin d’avoir de quoi critiquer le design par exemple) et blabla, relayées par ses potes blogueurs clebards en admiration devant le roi du PageRank, il ferait mieux de prendre exemple sur Debarnot et ses sites étudiants, bien mieux foutus techniquement et graphiquement, et surtout il a l’air quand même plus respectable, si j’en juge le ratio melon/qualité du taff.
Casolari c’est le plentyoffish francais : il fait de la merde, il encaisse et fait bosser la famille. Tant mieux pour lui.
Un bon point positif sur LOLGuru : il nous a pas mis les Meta Title en majuscules, voila qui va arreter de pourrir visuellement les resultats de google. Ouf, merci l’artiste !
Vu que y’en a qui ont déja abordé le cas FranceWideWeb, qui a encore mis une grosse claque au web français, pas besoin d’en rajouter plus; comme dirait le Guru: LOL !!!

PS : je précise que je suis un critique independant, non affilié à la doublette Vallette-Dambricourt, ni au clan LeMeur et encore moins à Presse-Orange.
A bon entendeur.

spdy

@Nico : ou pas :)

Yus

Aujourd’hui, je suis déçu. Je m’attendais à voir un « What a Fail » à la fin de l’article ou dans les commentaires mais non, allez je me devoue : WAF.

Maxime —

A la demande générale, un screenshot de l’admin de VDM :

http://img706.imageshack.us/img706/3820/hkc3.png

soymalau —

Simca1000, on ne se connait pas mais là j’ai un peu envie de te faire un enfant.

Corentin

Moi j’aime bien la gestion de l’encodage des caractères sur son site perso. C’est si compliqué à insérer que ça, une baliste meta utf8?

Joli fail quand même :)

Guillaume —

Ce site m’a bien fait marrer lorsqu’il a ouvert. Du basket, des vidéos et un cul sur la page d’accueil. Pas de doute, c’était bien du playweb.

Mais là, c’est encore plus drôle :) A force de faire du référencement, on en oublie les bases.

Steuf

@guillaume Le plus drôle c’est que je demande à un blogueur (Surement du copinage) de m’expliquer le concept puisqu’il parle dans son article d’un concept qui va faire trembler le web sans expliquer ce qu’il est en. Et j’ai eu droit en réponse :

« Car le concept, autant que le reste, sont effectivement taillés pour faire une boucherie… du moins pour qui a suffisamment de culture web.

en résumé : c’est pourtant d’une telle évidence !! »

En gros je suis trop con pour comprendre un concept évident ^^ Et ma question reste toujours sans réponse.

Guillaume —

@Steuf : C’est drôle ce que tu dis car je me suis posé exactement la même question. Où est le concept dans ce site à part faire un peu la même chose que chauffeur de buzz mais en ajoutant 8 votes par article et du LOL partout ?

Je suis arrivé à la conclusion qu’ils parlent de ce qu’ils aiment en étant pété à la coke et défoncé à la bière (ou l’inverse au choix).

Steuf

@guillaume Pour moi un site qui parle de coloriage, d’actualité, de cinéma, du téléchargement, de la conjugaison, de la recette de cuisine, et enfin qui parle de shopping… Il ne manque plus que l’onglet météo et porno pour bientôt montrer que ce site n’est destiné qu’au référencement dans les plus gros secteurs du domaine… Pour le reste ça reste à mes yeux un site qui fait « tout » (Sauf qu’on ne peut pas être bon sur tout, je préfère de loin les sites spécialisés) comme il en existe bien d’autres et qui au final ne sert à rien d’autre que de faire du référencement. Un agrégateur de contenu sans plus value en clair.

Grafix —

<3 Faille <3
J'ai une admin du meme genre je dois l'avouer , avec titre & meta & url rewrite de ce genre mais un peu moins austère :p

Après, il est bon dans ce qu'il fait et c'est tout à son honneur à ce monsieur !
On ferait tous pareil autrement :]

John —

L’interface n’a pas d’importance du moment que ça marche. Perso le seul bout d’admin, le design est repris sur du site, gain de temps. Le reste c’est avec phpmyadmin en accès par l’IP locale via un tunnel SSH, vu que chaque cas est différent et demande un interpréteur, c’est parfait.

Les failles peuvent être évitées en utilisant PDO, il fait le boulot du débutant. Sinon bah faut vérifier si les variables sont échappées ou non et agir en conséquence, un entier c’est un entier, une chaîne une chaîne, un email un email. Voir l’extension filter de php aussi.

flob9 —

Encore un kéké qui a du faire un chmod 666 lolguru.mdb

Ah non merde c’est un serveur windows ^^

Bon bref, c’est pas joli joli de hack un site de noob et s’en vanter comme ça; je m’attendais à mieux de la part d’un guru comme toi maxime … allez fais nous une petite injection sur un .gouv quoi.

En fait, suffisait de quote ce epic fail :
« [Pilote ODBC Microsoft Access]« 

Simca1000 —

En fait, suffisait de quote ce epic fail :
« [Pilote ODBC Microsoft Access]«

Il faudrait aussi ajouter derrière comme ferait le chauffeurdebouse : MOUAAAAHAHAHA

Microsoft Access! sérieux! #LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOLLLLLLL
#FAIL
#DUMB
#STUPID

On me dit dans l’oreillette qu’une partie de la techno de Groupe Play Web Universal Holdings (cotée au NASDAQ) est hébergé dans un Amstrad CPC 6128

aleatoire —

Tentez un Ctrl+U (afficher la source) sur chauffeur de buzz.
A faire si vous êtes bien assis.

Même pas de CSS, c’est la fête. Quand on sait qu’il est consultant et qu’il demande 4000€ HT/jour (cf http://casolari.fr/). Ca c’est LOL !

Alexandre

Romain est bon dans le référencement c’est certain, c’est même peut être un mec sympa, mais c’est clair que je trouve la plupart de ses sites présomptueux et beaufs :-/

Grafix —

il s’adapte à sa cible :)

Steuf

Sympa le monologue :p

Laisser un commentaire

Note : Pour qu'un commentaire soit affiché, votre e-mail doit être valide, et votre texte ne doit pas comporter d'insultes. Si vous ne respectez pas ça, n'essayez même pas de commenter.