[Design] Réu dans une heure
by Kozlika
Soyez pas en retard si possible, je suis crevée j'aimerais qu'on concentre
le tout en une heure si on peut.
Au programme,
* récap de la dernière fois parce que j'ai perdu les logs et me souviens
plus de tout :-P
* qui peut contribuer à quoi
* tests des uns et des autres pour créer un thème en partant des html de
currywurst
* implémentation d'aria
* tickets ouverts concernant les thèmes
Adtal !
--
Anne / Kozlika
10 years, 3 months
2.6.2
by Franck Paul
Plop les gens,
Quelqu'un a-t-il testé les modifs présentes sur la 2.6.2, plus précisément
celles faites pour corriger le(s) bug(s) SQLite et qui impactent aussi
PostgreSQL et MySQL ?
A priori ça concerne les changements de status des commentaires et les
actions sur billets/pages et commentaires.
--
Franck
10 years, 3 months
Fwd: Dotclear PHP Object Injection > Potential Remote Code Execution
by Franck Paul
Réponse de Charlie Briggs
---------- Forwarded message ----------
From: Charlie Briggs <charlie.briggs(a)mwrinfosecurity.com>
Date: 2014/1/20
Subject: RE: Dotclear PHP Object Injection > Potential Remote Code Execution
To: Franck Paul <carnet.franck.paul(a)gmail.com>
Hi Franck,
Thanks for the quick response. Here is the patch that I cooked up:
# Password protected entry
if ($post_password != '' && !$_ctx->preview)
{
# Get passwords cookie
if (isset($_COOKIE['dc_passwd'])) {
$pwd_cookie = json_decode( $_COOKIE['dc_passwd'], true );
} else {
$pwd_cookie = array();
}
# Check for match
if ((!empty($_POST['password']) && $_POST['password'] ==
$post_password)
|| (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] ==
$post_password))
{
$pwd_cookie[$post_id] = $post_password;
setcookie('dc_passwd',json_encode( $pwd_cookie ),0,'/');
}
else
{
self::serveDocument('password-form.html','text/html',false);
return;
}
}
This calls json_decode with the ASSOC flag set to true, meaning it still
works in the same way as unserialize would, but without the unwanted
functionality of the object injection.
Regards,
Charlie Briggs
Security Consultant
MWR InfoSecurity
Mobile: +44 (0) 7584 558 782
*From:* Franck Paul [mailto:carnet.franck.paul@gmail.com]
*Sent:* 20 January 2014 11:51 AM
*To:* Charlie Briggs
*Subject:* Re: Dotclear PHP Object Injection > Potential Remote Code
Execution
Hi Charlie,
We commited a patch (see http://dev.dotclear.org/2.0/changeset/d60876d7e4e4)
and we will publish a new release (Dotclear 2.6.2) as soon as possible.
Thanks a lot again
Franck for the DC Team
2014/1/20 Franck Paul <carnet.franck.paul(a)gmail.com>
Hi Charlie,
Thanks a lot for reporting this and we will try to fix this as soon as
possible.
Franck for DC Team
2014/1/20 Charlie Briggs <charlie.briggs(a)mwrinfosecurity.com>
Hi there,
I recently came across Dotclear and decided to briefly look over its
security.
After doing some code review and grepping for common PHP pitfalls – calls
to exec, eval, system, passthru, preg_replace with the e modifier,
unescaped queries, calls to move_uploaded_file with no verification, and so
on, I found that in inc/public/lib.urlhandlers.php and
plugins/pages/_public.php there is a call to unserialize() which takes
direct user input via the cookies. For this call to go ahead, you need to
access a password-protected post/page.
# Password protected entry
if ($post_password != '' && !$_ctx->preview)
{
# Get passwords cookie
if (isset($_COOKIE['dc_passwd'])) {
$pwd_cookie =
unserialize($_COOKIE['dc_passwd']);
} else {
$pwd_cookie = array();
}
.....
}
Setting the dc_passwd cookie to a serialized object which does not exist,
O:4:"Test":0:{}, throws the PHP error “Cannot use object of type
__PHP_Incomplete_Class as array”. For a code execution proof-of-concept, if
we create the class “Test” and ensure it is loaded before the unserialize()
runs:
class Test
{
function __wakeup()
{
echo "Hello world";
}
}
The following output is given:
Hello world
Fatal error: Cannot use object of type Test as array in
/var/www/dotclear/dotclear/inc/public/lib.urlhandlers.php on line 389
I haven’t gone through all the loaded classes to see if any interesting
code execution can occur off-the-bat; however, as plugins can be loaded,
it’s possible that a plugin could cause this core vulnerability to become
exploitable.
I have rated the overall risk for this as medium, as it is
context-dependant – i.e. it only works on a password-protected post.
The recommended fix for this would be to use safe methods of data exchange,
such as PHP’s json_encode() / json_decode().
Regards,
Charlie Briggs
Security Consultant
MWR InfoSecurity
Mobile: +44 (0) 7584 558 782
--
Franck
--
Franck
--
Franck
10 years, 3 months
maj 2.6.2
by gilsoub
Bon ben grosse merde chez moi !
j'ai cliqué sur le bouton maj et j'ai eu cela comme message :
Fatal error: Uncaught exception 'Exception' with message 'MySQL server has gone away (2006)' in /homez.402/gilsoub/www/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php:105 Stack trace: #0 /homez.402/gilsoub/www/dotclear/inc/libs/clearbricks/dblayer/dblayer.php(348): mysqlConnection->db_query(Resource id #15, 'SELECT L.log_id...') #1 /homez.402/gilsoub/www/dotclear/inc/core/class.dc.log.php(100): dbLayer->select('SELECT L.log_id...') #2 /homez.402/gilsoub/www/dotclear/plugins/maintenance/inc/class.dc.maintenance.php(278): dcLog->getLogs(Array) #3 /homez.402/gilsoub/www/dotclear/plugins/maintenance/inc/class.dc.maintenance.php(43): dcMaintenance->getLogs() #4 /homez.402/gilsoub/www/dotclear/plugins/maintenance/_admin.php(152): dcMaintenance->__construct(Object(dcCore)) #5 [internal function]: dcMaintenanceAdmin::adminDashboardItems(Object(dcCore), Object(ArrayObject)) #6 /homez.402/gilsoub/www/dotclear/inc/core/class.dc.core.php(319): call_user_func_array(Array, Array) #7 /homez.402/gilsoub/www/dotclear/admin/index.php in /homez.402/gilsoub/www/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php on line 105
Je ne peut plus accéder à mon administration :-(
Je laisse cela à votre réfléxion je vais me coucher , because je bosse à 6 h demain (juste ne vous étonnez pas si je répond pas tout de suite) mais cela m'apprendra, une mise à jours ne se fait que quand on a du temps devant soi, et surtout aprés avoir écrit son dernier billet...
@+ Gilsoub
10 years, 3 months
Fwd: Dotclear PHP Object Injection > Potential Remote Code Execution
by Franck Paul
Tiens, on dirait qu'il faudrait un peu blinder du côté des billets/pages
protégés par mot de passe :-p
---------- Forwarded message ----------
From: Charlie Briggs <charlie.briggs(a)mwrinfosecurity.com>
Date: 2014/1/20
Subject: Dotclear PHP Object Injection > Potential Remote Code Execution
To: contact(a)dotclear.org
Hi there,
I recently came across Dotclear and decided to briefly look over its
security.
After doing some code review and grepping for common PHP pitfalls – calls
to exec, eval, system, passthru, preg_replace with the e modifier,
unescaped queries, calls to move_uploaded_file with no verification, and so
on, I found that in inc/public/lib.urlhandlers.php and
plugins/pages/_public.php there is a call to unserialize() which takes
direct user input via the cookies. For this call to go ahead, you need to
access a password-protected post/page.
# Password protected entry
if ($post_password != '' && !$_ctx->preview)
{
# Get passwords cookie
if (isset($_COOKIE['dc_passwd'])) {
$pwd_cookie =
unserialize($_COOKIE['dc_passwd']);
} else {
$pwd_cookie = array();
}
.....
}
Setting the dc_passwd cookie to a serialized object which does not exist,
O:4:"Test":0:{}, throws the PHP error “Cannot use object of type
__PHP_Incomplete_Class as array”. For a code execution proof-of-concept, if
we create the class “Test” and ensure it is loaded before the unserialize()
runs:
class Test
{
function __wakeup()
{
echo "Hello world";
}
}
The following output is given:
Hello world
Fatal error: Cannot use object of type Test as array in
/var/www/dotclear/dotclear/inc/public/lib.urlhandlers.php on line 389
I haven’t gone through all the loaded classes to see if any interesting
code execution can occur off-the-bat; however, as plugins can be loaded,
it’s possible that a plugin could cause this core vulnerability to become
exploitable.
I have rated the overall risk for this as medium, as it is
context-dependant – i.e. it only works on a password-protected post.
The recommended fix for this would be to use safe methods of data exchange,
such as PHP’s json_encode() / json_decode().
Regards,
Charlie Briggs
Security Consultant
MWR InfoSecurity
Mobile: +44 (0) 7584 558 782
--
Franck
10 years, 3 months
CKEditor
by Nicolas
Bonjour à tous,
chose promise, chose dûe.
Voici donc une version en cours de développement (comme on dit dans le
grand monde) du plugin dcCKEditor qui permettra pour une future version de
dotclear d'avoir CKEditor comme éditeur de billet, page, ...
Dans le désordre le plus complet :
- en pièce jointe une version 0.1 que vous pouvez tester dans un dotclear
qui va bien (branche dev, nighlies,...)
- le nom est moisi mais je n'ai pas beaucoup d'imagination !
- le code est disponible, modifiable (via des pull request ou des forks)
sur github (même pas désolé) : https://github.com/nikrou/dcCKEditor/
Ce qui fonctionne :
- l'édition normal d'un billet
- l'ajout de lien
- l'ajout de lien vers des billets
- l'ajout d'image provenant du gestionnaire de média
Ce qui ne fonctionne pas :
- les images sont ajoutées dans une dimension en "dur"
- on ne peut pas modifier un lien, un lien vers un billet, une image.
Voilà. A vous les studios.
Nicolas
10 years, 3 months
2.6.2, 2.7 et toutes ces sortes de choses
by Franck Paul
Plop les gens,
Ce soir, réunion IRC à 21h.
Comme je l'avais annoncé la semaine dernière, je n'ai pas encore eu le
temps de faire une revue complète des tickets en souffrance. Je prévois de
faire ça pendant la semaine qui commence.
En attendant, plusieurs choses :
1. JcDenis, tu as en charge le dernier ticket ouvert pour la 2.6.2.
Penses-tu pouvoir t'en occuper d'ici vendredi, j'aimerais sortir la 2.6.2 à
la fin de la semaine.
2. Bruno/Dsls, on avais émis l'idée de faire un billet un peu techno sur le
blog DC, à propos du nouveau système de blocs, d'héritage et d'extension du
moteur de template DC. Tu penses pouvoir nous faire quelque chose dans les
jours qui viennent ?
3. Nikrou, tu as repris les devs sur le(s) éditeur(s), ou pas encore/du
tout ?
4. On a une discussion en cours avec Romy Tetue sur ce que devrait être la
syntaxe wiki idéale pour nos CMS (elle c'est Spip, nous c'est DC). Perso je
pense qu'il ne manque pas grand chose à Markdown Extra pour en faire un bon
candidat. Quoi qu'il en soit Romy souhaite organiser un atelier
découverte/étude de ces syntaxes rapidement, en mettant à contribution des
pas-que-geeks (soit plutôt des gens qui utilisent régulièrement une syntaxe
wiki sans être forcément développeur). Z'en pensez ? Des candidats dispos
sur Paris assez rapidement ?
D'une manière générale j'ai le sentiment d'un (légitime) relâchement de
l'ambiance depuis la fin de l'année 2013 (agapes et vacances obligent
vraisemblablement), z'êtes d'attaque pour reprendre un peu tout ça et
mettre un peu le dawa/le souk/d'animation ?
On en cause ce soir…
D'ici là, bonne journée les gens !
--
Franck
10 years, 3 months
Le resultat !
by Christopher Crouzet
Hello !
Apres pas mal de temps passe a taper des lignes de code, mon site est enfin
fini : http://christophercrouzet.com/
Pour ceux qui auront la flemme de lire jusqu'au bout du premier article,
encore un grand merci a tous de m'avoir donne un coup de main ! :)
D'ailleurs, je serais eventuellement pas contre un petit dernier pour la
route.
L'URL de mon premier article (
http://christophercrouzet.com/blog/post/2013/11/27/Catching-Up-With-the-M...)
retourne un header 404 alors que la page se charge bien. C'est
verifiable
avec le debugger de chrome ou avec l'Open Graph Debugger de Facebook. Une
idee de ce qui pourrait se passer ?
Merci !
Christopher.
10 years, 3 months