Vous n'êtes pas connecté.
DotClear passe en version 1.2.5 pour corriger une faille de sécurité divulguée hier. La faille est exploitable dans le cas d'un serveur configuré avec le paramètre "register_globals" et "allow_url_fopen" à "on". Dans ce cas, il est possible d'appeler un fichier particulier de dotclear et de l'utiliser pour inclure un fichier d'un autre serveur. Si vous avez suffisament d'imagination vous savez ce qu'il est possible de faire de ça.
La mise à jour est vivement recommandée. Vous pouvez également ne changer que le fichier inc/magic_strip.php, c'est suffisant et fonctionne même sur les plus vieilles installations de DotClear.
L'exploit ayant été révélé avant de nous prévenir, je ne citerai ni ne remercierai cette personne dont le comportement est simplement imbécile vis à vis de tous les utilisateurs.
Bonne mise à jour :)
Hors ligne
olivier a écrit:
DotClear passe en version 1.2.5 pour corriger une faille de sécurité divulguée hier. La faille est exploitable dans le cas d'un serveur configuré avec le paramètre "register_globals" et "allow_url_fopen" à "on".
bon bé "register_globals" à on c'est un peu checher les ennuis ...
donc pas d'urgence si on est sur off ?
Hors ligne
olivier a écrit:
Vous pouvez également ne changer que le fichier inc/magic_strip.php, c'est suffisant et fonctionne même sur les plus vieilles installations de DotClear.
Dis, monsieur, on devrait pas changer le fichier VERSION aussi (pour ceux déjà en 1.2.4) ?
j'dis ça, j'dis rien hein...
Hors ligne
Bravo pour ta réactivité Olivier (et toute l'équipe) !
Hors ligne
Je n'ai pas fort envie de recommencer toute une procédure de mise à jour...
Pourrais tu nous dire quels sont les fichiers qui ont été modifiés ? Vu que c'est une toute petite mise à jour ça ne devrait pas poser de problèmes non ?
Hors ligne
Cédric H. > et si tu relisais le message d'Olivier ? ;-)
Hors ligne
Mouai, tout bien réfléchi j'aurais mieux fait de me taire ;)
Hors ligne
Cédric H. a écrit:
Je n'ai pas fort envie de recommencer toute une procédure de mise à jour...
Pourrais tu nous dire quels sont les fichiers qui ont été modifiés ? Vu que c'est une toute petite mise à jour ça ne devrait pas poser de problèmes non ?
Un petit diff sur le contenu des archives, et hop :
Les fichiers dotclear-1.2.4/CHANGELOG et dotclear-1.2.5/CHANGELOG sont différents.
Les fichiers dotclear-1.2.4/inc/libs/lib.util.php et dotclear-1.2.5/inc/libs/lib.util.php sont différents.
Les fichiers dotclear-1.2.4/inc/magic_strip.php et dotclear-1.2.5/inc/magic_strip.php sont différents.
Les fichiers dotclear-1.2.4/layout/prepend.php et dotclear-1.2.5/layout/prepend.php sont différents.
Les fichiers dotclear-1.2.4/LISEZMOI.txt et dotclear-1.2.5/LISEZMOI.txt sont différents.
Les fichiers dotclear-1.2.4/VERSION et dotclear-1.2.5/VERSION sont différents.
Bonne mise-à-jour.
Hors ligne
Hmmm ... j'aurais une remarque d'ordre plus général sur l'aspect sécurité : il y a un paquet de fichiers .php fournis par dotclear qui font uniquement l'objet d'une inclusion via d'autres fichiers du moteur (tous les php des thèmes et plugins, les fichiers include, ...). La plupart du temps, leur appel en direct échoue parce que certaines variables n'ont pas été préalablement définies. Je n'ai pas cherché plus que ça, si ça se trouve, je sors des énormités, hein ...
Une idée en l'air : serait-il pertinent d'ajouter au tout début de ces fichiers un bout de code faisant un exit() violent si une variable globale (définie par toutes les pages accessibles via un browser) n'est pas définie ? C'est certes une programmation quelque peu défensive, mais ça permettrait de prendre un peu d'avance sur d'éventuels petits soucis... je pense notamment à tous les plugins qu'il est difficile d'auditer en profondeur, et qui pourraient receler de petites failles inexplorées ...
A moins qu'il n'y ait un moyen via des .htaccess de limiter l'entrés à certains fichiers ...
Hors ligne
obergix > non juste magic_strip et VERSION.
Hors ligne
je confirme, il y a aussi deux petites modifs dans layout/prepend.php et dans libs/lib.util.php
dans lib.util.php 1.2.4 :
# Obtenir l'host complet
function getHost()
{
$server_name = $_SERVER['HTTP_HOST'];
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')
{
$scheme = 'https';
$port = ($_SERVER['SERVER_PORT'] != '443') ? ':'.$_SERVER['SERVER_PORT'] : '';
}
else
{
$scheme = 'http';
$port = ($_SERVER['SERVER_PORT'] != '80') ? ':'.$_SERVER['SERVER_PORT'] : '';
}
return $scheme.'://'.htmlspecialchars($server_name).$port;
}devient dans 1.2.5
# Obtenir l'host complet
function getHost()
{
$server_name = explode(':',$_SERVER['HTTP_HOST']);
$server_name = $server_name[0];
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')
{
$scheme = 'https';
$port = ($_SERVER['SERVER_PORT'] != '443') ? ':'.$_SERVER['SERVER_PORT'] : '';
}
else
{
$scheme = 'http';
$port = ($_SERVER['SERVER_PORT'] != '80') ? ':'.$_SERVER['SERVER_PORT'] : '';
}
return $scheme.'://'.$server_name.$port;
}et dans prepend.php 1.2.4
if (!empty($_COOKIE['comment_info'])) {
$c_cookie = unserialize($_COOKIE['comment_info']);
$c_nom = $c_cookie['c_nom'];
$c_mail = $c_cookie['c_mail'];
$c_site = $c_cookie['c_site'];
}devient dans 1.2.5
if (!empty($_COOKIE['comment_info'])) {
if (($c_cookie = @unserialize($_COOKIE['comment_info'])) !== false) {
if (isset($c_cookie['c_nom'])) {
$c_nom = $c_cookie['c_nom'];
$c_mail = $c_cookie['c_mail'];
$c_site = $c_cookie['c_site'];
}
}
}@Dsls
un peu comme ce qui est fait dans punbb ; une variable (par exemple) IN_DC pourrait être déclarée dans le config.php et en haut de tous les script inclus if(!defined('IN_DC')) exit();
enfin si j'ai bien compris ce que tu veut dire :P
Hors ligne
Faut que le patron arrête de boire (son post ne parle que d'un fichier)
:-D
Hors ligne
Alors, finalement il faut changer les trois fichiers indiqués (plus VERSION, CHANGELOG et LISEZMOI.txt), ou juste un seul ?
Pour l'instant je n'en ai changé qu'un… Si ça doit tout mettre en l'air, mieux vaut me prévenir ^_^;
En tout cas bravo pour la réaction.
Publier l'exploit sans avertir l'équipe avant, c'est tout de même balot…
Hors ligne
En tout cas, c'est rapide, bravo pour cette MAJ éclair :)
Hors ligne
Pour le changement d'un seul fichier, ce n'est pas une erreur, c'est la procédure si vous n'avez pas envie de faire toute la mise à jour et être tranquiles. Ça ne sera pas une 1.2.5 (surtout si on met à jour de cette manière une 1.0) donc il n'y a pas lieu de changer le numéro de version.
Hors ligne
Wé, c'est ce que j'ai fini par comprendre et j'ai donc modifié le billet sur mon blog en conséquence.
Tu peux re-boire donc :-P
Hors ligne
Dsls, je pense utiliser le code suivant :
if(count(get_included_files())==1){exit;}
C'est assez semblable au if __name__ == "__main__" de Python. On peut aussi tester __FILE__ et SERVER['SCRIPT_NAME'] mais c'est loin d'être une science exacte :)
Reste plus qu'à tracer get_included_files() pour voir comment ça se comporte côté perfs.
Hors ligne
olivier a écrit:
Pour le changement d'un seul fichier, ce n'est pas une erreur, c'est la procédure si vous n'avez pas envie de faire toute la mise à jour et être tranquiles. Ça ne sera pas une 1.2.5 (surtout si on met à jour de cette manière une 1.0) donc il n'y a pas lieu de changer le numéro de version.
Merci pour l'info :)
Et merci pour Dotclear (je pense pas l'avoir déjà écrit quelque part, donc je profite de l'occasion) !
Hors ligne
j'ai modifié le plugin patch124 de la dcTeam pour mettre à jour mes blogs 1.2.4 en 1.2.5 ; suivant les indications de obergix.
le plugin patch125 (pour mettre à pour dotclear 1.2.4) ici http://cvie.free.fr/temp/ et ici http://cvie.free.fr/blog/share/
merci de vos remarques
C'était trop compliqué de l'envoyer à Xave plutôt que tirer la couverture ?
Hors ligne
merci de ta remarque, mais je ne voie pas ou je tire la couverture. J'ai fais des modifs que j'aurai pu garder pour moi mais que je mets à disposition des utilisateurs de dotclear. Enfin il y a des personnes à qui je ne parle plus.
Tu vois Cymago, à chaque fois on a le même problème : que tu reprennes mon boulot, je m'en fous un peu. Cette fois-ci, au moins, tu n'oublies pas de préciser que ce n'est pas de toi. Mais à chaque fois, tu t'arranges pour faire ça comme un cochon. Il ya des guidelines pour les plugins Dotclear, malgré ton expérience dans le domaine, tu n'as jamais été foutu de les suivre. Ici tu n'avais qu'à reprendre le truc tel quel, et il a fallu que tu rajoutes des morceaux qui fonctionnent dans ton environnement mais vont afficher n'importe quoi chez la moitié des autres.
Franchement, si tu apprenais à coder proprement pour Dotclear, je t'assure que tes plugins n'en seraient que meilleurs.
Hors ligne
de plus xave peut reprendre ces modifs et faire un plugin "officiel". Il n'y a aucune objection de ma part. Mon code est parfaitement libre.