PluXml 5.8.8 and 5.8.9 releases

P3terP3ter PluXml Project Manager
1 août modifié dans Annonces officielles

🇬🇧 PluXml 5.8.8 is now available ! This release contains eight fixes including two security vulnerabilities in the PluXml administration. Good update!

🇫🇷 PluXml 5.8.8 est disponible ! Cette version contient huit corrections dont deux concernant des failles de sécurités au sein de l'administration de PluXml. Bonne mise à jour !

Changelog

FIX Delete install.php link and redirect fixed for all administration pages #540 (P3ter)
FIX Sitemap lastmod attribute is now set with the modification date #541 (gcyrillus, P3ter)
FIX Filter articles, comments and pages names in plxGlob #383 #545 (bazooka07)
FIX PHP8 __Deprecated: Required parameter $conf follows optional parameter $isHtml #537 (MAPC2012, Francis)
FIX Force some values of $plxMotor->aConf[] to be integer #552 (bazooka07)
FIX Minor fix in PlxMotor function artInfoFromFilename #554 (gcyrillus, bazooka07)
FIX Article thumbnail XSS vulnerability #556 (P3ter, Moritz Huppert)
FIX Static pages PHP injection vulnerability #558 (P3ter, Moritz Huppert)

EDIT 2022/08/01 : une version 5.8.9 a été publiée contenant le retrait de la correction #558 concernant les pages statiques.

RĂ©ponses

  • Bonjour,

    J'ai mis à jour les fichiers par ftp comme d'habitude, mais la page de mise à jour ne s'est pas affichée lors de mon accès suivant au site et la version indiquée dans l'administration est toujours 5.8.7 !?

    Comment faire ?

    Merci.

  • Salut,

    Avec cette mouture, il nettoie les balise php des pages statiques. :'(

    Ce qui pose problème pour l'utilisation de hook ou tout autres idées qui a besoin de php et cela est possible depuis la version 5.2 (au minimum).

    Donc éviter de passer a cette version si vous avez du code php avec certaines de vos pages statiques (ou ne jamais les modifiées avec Pluxml).

    Après avoir bien visionné la vidéo, il rentre ds l'admin pour faire cela, il a donc les identifiants et est en local... what's a hack :o

    Ps: Si nous allons par là, Il y a aussi la modif des fichiers du thème qui permet ça :p

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

  • bazooka07bazooka07 Moderator
    1 août modifié

    @Sudwebdesign,
    Je suis bien d'accord avec toi. et en bon français :
    Quel exploit !!!
    Pour réaliser son forfait,@MoritzHuppert utilise son serveur web local. Pas sûr qu'il puisse renouveler son forfait chez un hébergeur sérieux.
    Il ferait mieux d'apprendre à paramétrer PHP sur son serveur et d'utiliser la directive "disable_functions" dans "php.ini".
    Pour résoudre son problème, modifier php.ini comme suit et redémarrer le serveur :

    disable_functions=fsockopen,proc_open
    

    Mais pour Ă©viter d'autres tracas, il vaut mieux mettre ces valeurs :

    disable_functions=fsockopen,proc_open,system,exec,chroot,shell_exec,proc_open,fsockopen
    

    Le plus gros risque est de trouver ces scripts malicieux dans de jolis thèmes de PluXml en libre téléchargement sur Internet.

    Franchement, @MoritzHuppert ne mérite pas son bounty !

    En modifiant php.ini, on Ă©vite cet Ă©cueil.

    J'ai publié sur Github le contenu d'une page statique qui liste ces fonctions malicieuses de PHP :
    voir le gist sur Github

    Le correctif apporté dans la version 5.8.8 de PluXml est déjà hacké ! Voir.
    Il ne résout rien.

    Si on n'a pas accès à php.ini, il vaut mieux renommer ces fonctions critiques dans le contenu des pages statiques en utilisant les expressions régulières mais cela n'assure aucune protection pour les thèmes.

    Pour voir rapidement les fonction invoquées par la directive disable_functions, créer une page statique avec le contenu suivant pour Pluxml version 5.8.7 et précèdentes :

    <?php
    $disabled = ini_get('disable_functions');
    if($disabled === false) {
            echo '<p>Aucune fonction désactivée</p>' . PHP_EOL;
    } else {
    ?>
    <ul>
    <?php
            foreach(explode(',', $disabled) as $item) {
            $it = trim($item);
    ?>
        <li><a href="https://www.php.net/manual/fr/function.<?= str_replace('_', '-', $it) ?>.php" target="_blank"><?= $it ?></a></li>
    <?php
            }
    </ul>
    }
    ?>
    
  • 1 aoĂ»t modifiĂ©

    Bonjour,

    Pareil que @Sudwebdesign , je ne suis pas du tout convaincu qu'il soit nécessaire de sortir un missile pour écraser un peu probable moustique, et pas tous :astonished: C'est en premier lieu un problème de chaise->clavier qui laisserait quelqu'un se connecter à l'administration. Et puis c'est pas comme ci c'était nouveau dans PluXml, les pages statiques existent depuis la V4 de PluXml (2008-2009) et à priori n'ont jamais servis à ce genre d'exploit. C’était même l'une des évolutions de PluXml des plus séduisantes.

    edit: page statitique présentes depuis la beta4 de pluxml https://pluxml.org/article17/pluxml-blog-beta (10/2008).

    Un filet serait peut-être plus efficace en gérant plus finement les droits des users en dehors de l'administrateur (numero 000) . Avec une option autorisant ou non l'ajout de php dans les pages statiques , ou ne laisser accès à la création/modifications des pages statiques uniquement par l'administrateur (numero 000), idem pour le coup pour l'édition des fichiers php des théme pour bien faire comme le mentionne sudwebdesign.

    Bref, perso je vois cette modif plutôt comme une régression qu'un gain de sécurité.

    Cdt

    edit @bazooka07 zavais pas vu ton post qui me conforte bien dans l'idée que le risque se situe ailleurs que dans le code de PluXml :)

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • P3terP3ter PluXml Project Manager

    Bonjour,

    @chantoine si tu as récupéré la version depuis les tags github, il y avait effectivement un soucis sur le positionnement du tag, c'est corrigé.

    Concernant, le correctif #558 sur les pages statiques, après avoir lu vos messages, j'ai publié une version 5.8.9 contenant uniquement le retrait de ce correctif. Le correctif étant déjà obsolète et pouvant apportant des régressions, j'ai finalement préféré aller dans votre sens et le retirer. Mes excuses pour le désagrément.

  • @P3ter merci pour nous , dĂ©cidĂ©ment j'adore PluXml :)

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • bazooka07bazooka07 Moderator
    1 août modifié

    Cela ne résoud pas le problème pour ceux qui n'ont pas accès à php.ini.

    Voir PR#565
    La nouvelle fonction plxUtils::sanitizePhp remplace par un commentaire l'appel Ă  certaines fonctions critiques dans le contenu d'une page statique :

    • fsockopen
    • proc_open
    • system
    • exec
    • chroot
    • shell_exec
    • socket*

    Si vous voyez d'autres fonctions critiques, n'hésitez pas à le faire remarquer.

  • Salut! Merci d'avoir mis Ă  jour ce superbe cms) TrouvĂ© un bug... J'utilise PluXml (5.8.9) sur php 8.1 donc, quand la prĂ©moditation des commentaires est activĂ©e, ils n'atteignent pas le panneau d'administration. Lorsque la modĂ©ration est dĂ©sactivĂ©e, les commentaires sont publiĂ©s...

  • bazooka07bazooka07 Moderator

    Bonjour,
    Effectivement, il y a un bug quand la modération des commentaires est activée.

    dans core/lib/class.plx.glob.php, il faut modifier le tableau plxGlob::PATTERNS pour la clé 'commentaires' comme ci-dessous :

        const PATTERNS = array(
            'arts'          => '#^\D?(\d{4,})\.(?:\w+|\d{3})(?:,\w+|,\d{3})*\.\d{3}\.\d{12}\..*\.xml$#',
            'statiques'     => '#^(\d{3,})\..*\.php$#',
            'commentaires'  => '#^_?\d{4,}\.(?:\d{10,})(?:-\d+)?\.xml$#'
        );
    

    J'ai publié un pull request (PR) pour corriger cela avec diverses optimisations.

    Voir PR #571

  • Merci, bazooka07. Maintenant tout fonctionne)

  • bazooka07bazooka07 Moderator

    Bonjour,
    Sous Linux, la ligne de commande suivante :

    grep PHP_VERSION *.php update/*.php core/{admin,lib}/*.php
    

    donne le résultat suivant :

    jpierre@beelink-1:/var/www/test/PluXml-5.8.9$ grep PHP_VERSION *.php update/*.php core/{admin,lib}/*.php
    install.php:if(version_compare(PHP_VERSION, '5.0.0', '<')){
    install.php:    echo utf8_decode(L_WRONG_PHP_VERSION);
    install.php:                        <li><?php echo L_INFO_PHP_VERSION.' : '.phpversion() ?></li>
    update/index.php:if(version_compare(PHP_VERSION, '5.0.0', '<')){
    update/index.php:   echo utf8_decode(L_WRONG_PHP_VERSION);
    core/admin/parametres_infos.php:    <li><?php echo L_INFO_PHP_VERSION; ?> : <?php echo phpversion(); ?></li>
    core/lib/class.plx.utils.php:           version_compare(PHP_VERSION, '7.2', '>=') ?
    

    Les versions de PHP testées dans "install.php", "update/index.php" et "core/lib/class.plx.utils.php" ne sont pas cohérentes.
    Il faut définir une constante "PHP_VERSION_MIN" comme dans la version 6.0 de PluXml et faire les tests de version de PHP par rapport à elle.

    D'autre part, on utilise l'opérateur "??" uniquement dans "core/admin/article.php".
    Cet opérateur n'existe que depuis PHP 7.0.0. Donc exit les installations chez Free.fr.

  • Franck-AWOFranck-AWO Member
    18 août modifié

    Bonjour,

    Je viens de mettre Ă  jour 5.8.2 vers 5.8.9 avec PHP 7.4.8. C'est vraiment d'un simplissime.

    Un ancien plugin (PrevNext 1.0 - 19/01/2014 (!!)) ne fonctionnant plus, je suis venu jeter un Ĺ“il ici.

    La lecture des posts précédents m'inquiète au regard de la sécurité. N'y comprenant pas trop en php, je ne sais plus quoi penser. Il faut sans doute mettre à jour pluxml. Mais faut-il insister pour refaire fonctionner les (très) anciens plugins ?

    Aussi, depuis que j'ai modifié le php.ini comme indiqué plus haut :

    disable_functions=fsockopen,proc_open,system,exec,chroot,shell_exec,proc_open,fsockopen

    un message d'erreur apparaît en front, en rapport avec PrevNext :

    Warning: array_search() expects parameter 2 to be array, bool given in /xxxxx/www/htdocs/plugins/prevNext/prevNext.php on line 62

    Ensuite j'ai passé la version de PHP à 8.1.8. Les messages suivants en front :

    Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /xxxxx/www/htdocs/core/lib/class.plx.plugins.php on line 42

    et :

    Fatal error: Uncaught TypeError: array_search(): Argument #2 ($haystack) must be of type array, bool given in /xxxxx/www/htdocs/plugins/prevNext/prevNext.php:62 Stack trace: #0 /xxxxx/www/htdocs/plugins/prevNext/prevNext.php(62): array_search('0101.home,003,0...', false) #1 /xxxxx/www/htdocs/core/lib/class.plx.plugins.php(133): prevNext->prevNext(Array) #2 /xxxxx/www/htdocs/core/lib/class.plx.show.php(2184): plxPlugins->callHook('prevNext', Array) #3 /xxxxx/www/htdocs/themes/80hg/article.php(15): plxShow->callHook('prevNext', Array) #4 /xxxxx/www/htdocs/index.php(63): include('/xxxxx/s...') #5 {main} thrown in /xxxxx/www/htdocs/plugins/prevNext/prevNext.php on line 62

    Même en désactivant tous les plugins, le site n'affiche plus les articles et seulement ce message :

    Fatal error: Uncaught Error: Class "kzChamPlus" not found in /xxxxx/www/htdocs/themes/80hg/home.php:35 Stack trace: #0 /xxxxx/www/htdocs/index.php(63): include() #1 {main} thrown in /xxxxx/www/htdocs/themes/80hg/home.php on line 35

    Donc là, à part faire machine arrière je ne vois pas. Donc à l'aaiiiiide :-) Des préconisations, des indications, des suggestions, des solutions, je prends tout. Si besoin je peux aussi donner plus d'infos.

  • @Franck-AWO
    Bonsoir,

    Avant de repartir complètement en arrière, desactive tous les plugins et efface à la main tout les fichier de configuration des plugins. Inclus plugins.xml (un fichiers plugins.xml peut tout seul faire planter si un plugin y est répertorier deux fois ... quasi impossible mais ça arrive parfois en cours de bidouille ou migration)

    De la, les messages d'erreurs devraient avoir disparus. Il sera alors temps de les réactivé un à un et de voir ceux incompatibles. (Version de php)

    Si tu as un thème qui embarque des modifications spécifiques à un ou plusieurs plugin incompatible ou avec un hook hors normes :) , il est possible que cela généré encore quelques messages d'erreurs.

    Pour les plugins incompatible avec les dernières versions de php, voir avec les auteurs ou d'autres similaires plus récents ou ouvrir un sujet dédié. Idem pour le thème.

    Cdt

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • bazooka07bazooka07 Moderator

    Bonjour,
    Je suis surpris par l'erreur Ă  propos de FILTER_SANITIZE_STRING car PluXml n'utilise pas encore les constantes de filtration de PHP pour filtrer les $_POST.
    Sur une installation neuve de la dernière version de Pluxml, je viens de vérifier l'emploi de FILTER_SANITIZE_STRING avec la commande ci-dessous executée à la racine du site :

    grep FILTER_SANITIZE_STRING *.php update/*.php core/{admin,lib}/*.php
    

    Elle ne trouve aucun résultat.

    Attention aux antiques plugins (2014 !!). Au fil des versions de PHP, certaines fonctions deviennent obsolètes, voire disparaissent.

    Comme conseillé, désactive tous les plugins avec le back-office de PluXml. Mais sans supprimer les fichiers de config de chaque plugin dans le dossier data/configuration/plugins. Et tester sans modifier les articles, catégories, etc ...

    Si l'erreur persiste, créer un nouveau dossier sur ton serveur et y faire une nouvelle installation de la dernière version de PluXml pour voir si l'erreur persiste.

  • Bonjour @gcyrillus-nomade @bazooka07,

    Merci beaucoup pour vos réponses encourageantes. Voici ce que j'ai tenté.

    En repartant d'un backup, pluxml 5.8.2 php 7.4.8, j'ai mis Ă  jour vers pluxml 5.8.9 php 8.1.8.

    Tous les plugins actifs, le blog s'affiche (presque) correctement Ă  part le message suivant en front et en admin juste sur la page Gestion des plugins :

    Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /xxxxx/www/htdocs/core/lib/class.plx.plugins.php on line 42

    Pourtant, en effet, la commande "grep FILTER_SANITIZE_STRING..." à la racine du site retourne un résultat nul.

    En affichant un article, le contenu est vide avec un message "Fatal error: Uncaught TypeError: array_search(): Argument #2..../xxxxx/www/htdocs/plugins/prevNext/prevNext.php on line 62".

    En désactivant le plugin PrevNext (1.0 - 19/01/2014 (!!)), le contenu des articles s'affichent. Le message "Deprecated: Constant FILTER_SANITIZE_STRING...line 42" persiste.

    En désactivant un à un les plugins :

    • prevNext - Version 1.0 (19/01/2014)
    • Cmixml - Version 1.1.1 (21/07/2020)
    • CookieMessage - Version 1.1 (19/08/2015)
    • CKEditor - Font Awesome - Version
    • MySearch - Version 1.7 (07/09/2017)
    • scrollToTop - Version 2.1 (05/07/2014)
    • MyBetterUrls - Version 1.5.5 (10/04/2017)
      Cela ne change rien : le blog et les articles s'affichent pareillement et le message "Deprecated: Constant FILTER_SANITIZE_STRING...line 42" persiste.

    En désactivant le plugin :

    • kzChamPlus - Version 2.6.3 (12/05/21)
      Le message "Deprecated: Constant FILTER_SANITIZE_STRING...line 42" disparaît (sauf sur l'admin que sur la page Gestion des plugins) mais le site n'affiche plus que l'entête du premier article avec le message :

    Fatal error: Uncaught Error: Class "kzChamPlus" not found in /xxxxx/www/htdocs/themes/80hg/categorie.php:43 Stack trace: #0 /xxxxx/www/htdocs/index.php(63): include() #1 {main} thrown in /xxxxx/www/htdocs/themes/80hg/categorie.php on line 43

    J'ai donc commenté les lignes des fichiers de mon thème qui font appel à kzChampPlus. Ce qui ne change rien.

    En conclusion intermédiaire, le plugin prevNext ne fonctionne plus, et le plugin kzChampPlus fait s'afficher le message "Deprecated: Constant FILTER_SANITIZE_STRING...line 42".

    Ensuite j'ai activé le thème pluxml par défaut dont aucun fichier ne fait appel à prevNext ni à kzChampPlus et réactivé tous les plugins. Tout fonctionne correctement à part le message en front et admin que sur la page Gestion des plugins :

    Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /xxxxx/www/htdocs/core/lib/class.plx.plugins.php on line 42

    En désactivant le plugin kzChampPlus le message "Deprecated: Constant FILTER_SANITIZE_STRING...line 42" disparaît (sauf sur l'admin que sur la page Gestion des plugins).

    Ensuite j'ai fait un tour côté édition des articles, et là :anguished:

    Warning: Undefined array key "thumbnail" in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 735
    Warning: Trying to access array offset on value of type null in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 735
    Warning: Undefined array key "thumbnail_title" in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 736
    Warning: Trying to access array offset on value of type null in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 736
    Warning: Undefined array key "thumbnail_alt" in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 737
    Warning: Trying to access array offset on value of type null in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 737
    Warning: Undefined array key "date_creation" in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 744
    Warning: Trying to access array offset on value of type null in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 744
    Warning: Undefined array key "date_update" in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 745
    Warning: Trying to access array offset on value of type null in /xxxxx/www/htdocs/core/lib/class.plx.motor.php on line 745

    En désactivant tout les plugins ces messages persistent. Même comportement en réinstallant pluxml de zéro et juste en copiant le répertoire data :anguished:

    A tout hasard j'ai repassé la version de PHP à 7.4.30 et depuis tout semble bien fonctionner.

    Conclusion du moment : pluxml 5.8.9, PHP 7.4.30, aucun plugin. Je vais tenter de réinstaller quand même Cmixml.

  • bazooka07bazooka07 Moderator

    Bonjour,

    Effectivement il y a un problème avec PHP version 8.1.0 et FILTER_SANITIZE_STRING. Voir cette page :
    https://www.php.net/manual/fr/filter.filters.sanitize.php
    Je vais regarder le plugin kzChamArt dès que possible.

  • bazooka07bazooka07 Moderator

    Bonjour,
    AU fil des versions PluXml a ajouté des nouveaux champs aux articles. Et la mise à jour de PluXml ne prend pas en compte ces nouveautés. Et il vaut mieux car cela peut-être assez sportif.

    Pour thumbnail et cie, c'est un bug qui a déjà été évoqué.
    Par exemple, dans plxMotor::parseArticle(), on ne vérifie pas que que le tableau $iTags a des clés "thumbnail", "thumbnail_title", etc..., avant d'appeler la fonction plxUtils::getValue()

    J'avais envoyé un Pull-Request pour corriger ce problème. Mais apparemment, il est tombé au fond des oubliettes.
    Si tu sais utiliser Github et Git, regarde la branche "plxutils-gettagvalue" sur mon dépôt :
    https://github.com/kazimentou/PluXml/

    Je vais faire un test et renvoyer mon Pull-Request.
    Fais un test de ton côté ou envoie moi un de tes fichiers articles dans le dossier data/articles qui pose problème.

  • Bonsoir @bazooka07,

    Merci pour le suivi.

    Je ne pratique pas Github et Git.

    Aucun article ne pose problème a priori. C'est plutôt mon thème.
    En continuant sur ma lancée (après réinstalle de pluxml 5.8.9 sous PHP 7.4.30) et en remplaçant les fichiers php de mon thème par ceux du thème default, tout fonctionne correctement.

    Par contre j'ai installé la dernière version de kzChamPlus (2.6.3 du 2021-05-12).

    Je vais continuer en replaçant les champs supplémentaires dans les fichiers php de mon thème.
    Ensuite, peut-ĂŞtre remettre prevNext, peut-ĂŞtre monter les en version PHP.

    Au cas où voici tout de même un lien pour télécharger un des articles : https://drop.infini.fr/r/ajyAqf18wt#NmttE6O8UhA4Zk5tuGQhdJHAK1Ba1Y3hkCSkZ3Y1Hlc=

  • krockroc Member

    Bonjour,

    Faut-il faire cette mise à jour pour des questions de sécurité même si mon site fonctionne bien ?

  • Bonjour,
    Bien sûr nous savons tous les bonnes pratiques, mais je les redonnent avant de partager mon avis :

    • La règle #1 c'est toujours de mettre Ă  jour.
    • La règle #0 c'est toujours de faire des backup au moins AVANT de mettre Ă  jour ;-)
      J'ai donc mis à jour pluxml et php. Et j'ai rencontré des pb, voir plus haut. Finalement, ces problèmes sont résolus en revenant à une version php antérieure. En conclusion le problème c'est le suivi des plugins, certains (très) anciens plugins ne fonctionnent plus avec des versions de php récentes.
      Bonne chance!
Connectez-vous ou Inscrivez-vous pour répondre.