Un patch de sécurité pour Dotclear
Par Sacha le 30 novembre 2007, 00:00 - Lien permanent
Deux raisons justifient ce patch :
- Il existe un problème de sécurité dans Dotclear qui permet d'exécuter du code JavaScript sur le navigateur de l'administrateur du blog à son insu.
- L'information sur l'adresse IP d'un commentaire ou d'un rétrolien est facilement falsifiable. De même, tous les filtres Antispam basés sur la vérification de l'adresse IP sont dérisoires pour un spammeur utilisant cette vulnérabilité Dotclear.

Description technique
La fonction realIP() de la classe http de Clearbricks renvoie un contenu (censé être l'adresse IP du client) qui peut être modifié arbitrairement par le client en précisant les en-têtes HTTP CLIENT_IP ou X_FORWARDED_FOR sur son navigateur web (p.ex. en utilisant l'extension Modify Headers pour Firefox). De plus, il est possible d'assigner du code JavaScript à CLIENT_IP qui sera exécuté sur le navigateur de l'administrateur du blog au moment de la prévisualisation d'un commentaire ou de l'édition d'un article existant[1].
Correction rapide
Le moyen le plus simple de corriger cette faille de sécurité est d'éditer le fichier inc/clearbricks/common/lib.http.php. Il faut de remplacer la fonction realIP() (lignes 129 - 189) par celle-ci :
public static function realIP()
{
if (isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
else {
return null;
}
}
Vous pouvez également télécharger le fichier lib.http.php joint à ce billet et le mettre à la place de l'ancien fichier.
Patch pour la version SVN
La correction rapide suffit parfaitement pour corriger cette faille de sécurité. Ce qui suit s'adresse donc à des personnes qui connaissent bien au moins les bases de la programmation et qui souhaitent faire une correction "plus propre". Si ce n'est pas votre cas, il est plus sûr d'opter pour la correction rapide, qui est équivalente.
Le patch se situe dans les documents annexes à ce billet.
Un exploit ?
Je ne montre pas ici la manière dont cette vulnérabilité peut être exploitée pour, par exemple, se connecter en tant qu'administrateur sur un blog vulnérable. Cependant c'est faisable sans trop de peine. Si je ne m'en suis pas occupé, c'est parce que mon temps libre est limité et j'ai autre chose à faire que de montrer les conséquences qu'une omission de cette correction peut avoir.
Notes
[1] La preuve, suite à un incident (involontaire de ma part), brol m'a poliment proposé d'utiliser mon propre blog pour mes essais de merde
. Que brol soit rassuré, j'utilisais mon propre blog pour le faire, c'est juste que j'avais oublié de désactiver l'extension qui me permettait de faire ces essais quand je visitais son blog.
Commentaires
Je suis venu, j'ai lu et j'ai appliqué...
Je vais manquer de Merci à force de te le dire et redire en raison de tes nombreux plugins et correctifs que tu nous proposes. Un des meilleurs développeurs ou quelque soit le nom qu'on donne, pour plate forme DC et environnement PHP/prog
Vraiment bien
A+
Merci pour tes compliments JFMichaud.
Mais le nombre de patchs et d'améliorations s'accumule, alors que l'équipe ne communique pas avec moi (à part Biou en fait, il a été très gentil). Devant l'impossibilité d'échanger, j'ai abandonné l'idée de continuer de faire part à Olivier et autres membres de l'équipe de mes modifications personnelles.
Tout ce que j'ai pu en conclure, c'est que mes contributions n'intéressent pas l'équipe. Alors pourquoi continuerais-je de me fatiguer pour rien ?
Je vais continuer à apporter des modifications dans Dotclear pour que ma plate-forme de blog soit meilleure. Après tout, pourquoi pas créer à mon tour un DotPress, basé sur Dotclear et refait à volonté. Cela me simplifierait beaucoup la vie pour créer des plugins mieux construits, par exemple.
Tiens, c'est décidé, dès que j'ai un petit serveur (quelqu'un aurait-il une idée de matériel à acheter ?), il y aura un DotPress disponible en téléchargement.
Si l'usage le permet je vois pas pourquoi on (tu) pourrait (pourrais) pas...Si tu as besoin de testeurs je suis toujours partant...
Pour ton serveur, si j'étais ton j'irais probablement dans l'usagé, low voltage...toujours ouvert ces petites bêtes ça bouffe un peu pour la conso. personnelle.
A+
Salut Sacha,
Je comprends ton début de dépît et ton amertume. Il serait effectivement d'avoir un semblant de comm' de la part de l'équipe Dotclear.
Tu proposes des corrections, des plugins codés aussi vite que pensés, tu interviens sur le forum avec classe. Il est évident que tu ne veux pas nuire au soft comme à la communauté.
J'ose simplement penser qu' Olivier, Pep, Zeubeubeu, biou et Xave sont en vacances ou submergés et je suppose qu'ils n'ont pas attention de dénigrer tes améliorations. Il faut juste attendre. La notion d'urgence est différente chez eux.
A moins que tu les rencontres, rentres dans l'équipe :D
Et Dc2 finale sort pour Noël :).
Continues comme ça, Sacha, ne te résignes pas encore à monter ta plateforme de Blog ;)
Courage.
Osku m'a ôté les mots du clavier... peux pas mieux dire.
Même si c'est mon premier commentaire ici, je suis (du verbe suivre) régulièrement tes deux blogs "Au bout des mots" et "Les bricoles du web" et lis toujours avec intérêt tes interventions sur le forum.
Je suis plus ou moins d'accord avec le fait qu'il faut attendre...
Merci pour vos encouragements et conseils.
Alors j'ai décidé de garder mes corrections pour moi pour le moment. C'est vrai, il n'y a rien d'urgent, et il ne sera jamais tard de rendre une version améliorée publique d'ici quelques mois si les choses ne bougent pas d'ici-là. Et d'autre part Dotclear reste une création excellente, rares sont les applications qui sont aussi perfectionnistes et bien ficelées. Il ne faut pas lui en demander trop non plus. :-)
Pour ma part ça ne me change pas la vie si ces améliorations sont prises en compte ou pas dans la version officielle. L'équipe est libre de décider ce qu'elle fait et ce qu'elle ne fait pas. Cerise sur le gâteau, c'est du logiciel libre, donc rien ne m'empêche de publier une version modifiée et non-officielle.
Dit moi donc y a t-il une façon de voir que ça fonctionne bien et qu'il est correctement mis en place ce patch?
@JFMichaud : installe l'extension Modify Headers (voir dans le billet) et ajoute une en-tête
CLIENT_IP, en mettant comme valeur "<em>Test</em>".Ensuite, écris un commentaire sur ton blog. Va dans la section "Commentaires" du panneau d'administration et clique sur l'icône "plus" pour visualiser ton commentaire.
Si le patch est correctement appliqué, tu verras ton adresse IP dans le champ "Adresse IP". Sinon, tu verras le mot "Test" à sa place.
Le danger, comme dit plus haut, c'est que tu peux renseigner du code HTML, même du JavaScript, donc récupérer le cookie de session et de te faire passer pour un admin.
Oh là ça craint, c'est simple...trop.
Merci
D'après les logs, Olivier a corrigé hier soir la fonction
realIP()de Clearbricks dans la version SVN.La version SVN n'est donc plus concernée par ce problème. :-)
Bonjour Sacha, ce patch concerne bien la version Dotclear 2 ?
Bonjour Pitt,
Oui, ce patch concerne bien toutes les versions Dotclear 2, hormis la version en développement téléchargeable par SVN qui contient déjà le correctif (merci Olivier).
Moi je dis, la prochaine fois, je te prive d'ordi pendant 10 minutes !
Toc, hein brol toi aussi tu y es passé :-)
Vi ;-(