[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"seo-verification":3,"blog-bricksforge-cve-2026-85097-wordpress-mettre-a-jour-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-bricksforge-cve-2026-85097-wordpress-mettre-a-jour-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":159,"ctaBody":160,"ctaButton":161,"ctaUrl":162,"relatedPosts":163},525,"bricksforge-cve-2026-85097-wordpress-mettre-a-jour",{"fr":10,"en":12,"ar":13,"es":14},"bricksforge-cve-2026-85097-wordpress-update","ثغرة-bricksforge-cve-2026-85097-ووردبريس-التحديث","bricksforge-cve-2026-85097-wordpress-actualizar","Bricksforge CVE-2026-85097 : mettre à jour et auditer le parc","Bricksforge 3.1.8.10 corrige CVE-2026-85097, un upload non authentifié exploité. Inventaire wp-cli, fichiers PHP déposés, journaux, secrets à rotater.",10,0,false,"2026-10-29T00:00:00+00:00","2026-10-29T15:45:55+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fbricksforge-cve-2026-85097-wordpress-mettre-a-jour-poster.svg",{"categorySlug":34,"appSlug":35},"cms","wordpress","Une faille d'upload non authentifiée dans le plugin Bricksforge, add-on du builder Bricks, était déjà exploitée avant d'être rendue publique. Le correctif existe, mais mettre à jour ne suffit pas : un site à jour peut déjà porter un fichier PHP déposé avant le patch. Pour une agence, la difficulté est double : savoir quels clients embarquent le plugin, puis prouver qu'aucun n'a été visité. Ce guide donne la procédure complète, de l'inventaire wp-cli à la rotation des secrets, avec la faille Bricksforge comme cas vécu et un modèle à rejouer pour la prochaine.",[38,42,80,83,105,108,111,132,136,139,150,153,156],{"type":39,"title":40,"body":41},"h2","La faille en un paragraphe, le reste est de la procédure","CVE-2026-85097 touche Bricksforge 3.1.8.9 et les versions antérieures ; le correctif est la version 3.1.8.10. Le module Pro Forms contrôle le type MIME d'un fichier au premier envoi, mais fait confiance, à la soumission du formulaire, au champ `url` fourni par le client dans le paramètre `temporaryFileUploads`. Un fichier polyglotte GIF\u002FPHP passe le contrôle, puis est référencé avec une URL de destination en PHP : le serveur l'écrit à cet endroit et l'exécute à la première requête.\n\nSur la gravité, les sources divergent : critique, avec un score CVSS de 9,8 selon SecurityWeek et de 10,0 selon l'avis de Patchstack. Nous ne tranchons pas, la conduite à tenir est la même. Patchstack a observé les premières exploitations le 7 octobre 2026, avant la divulgation (avis du 8 octobre), et SecurityWeek, dans son article du 12 octobre, cite environ 6 000 sites équipés du plugin. Les listes d'adresses IP attaquantes sont éphémères : elles figurent dans l'avis de Patchstack, inutile de les recopier.",{"type":43,"title":44,"headers":45,"rows":49},"comparison","Tableau de référence : où regarder, quoi chercher",[46,47,48],"Où regarder","Quoi chercher","Ce que cela indique",[50,54,58,62,66,70,73,76],[51,52,53],"Version du plugin","Bricksforge 3.1.8.9 ou antérieure","Vulnérable : passer en 3.1.8.10 ou plus récent",[55,56,57],"Plugin absent ou désactivé","Aucune ligne dans l'inventaire wp-cli","Pas d'exposition par ce plugin, à consigner quand même",[59,60,61],"`wp-content\u002Fuploads\u002Fbricksforge\u002Ftmp\u002F`","Tout fichier PHP","Dépôt probable : site à traiter comme compromis",[63,64,65],"`wp-content\u002Fuploads\u002FAAAA\u002FMM\u002F`","Fichiers `login_admin_*.php`","Cible citée par Patchstack : site à traiter comme compromis",[67,68,69],"Journaux d'accès","POST sur `\u002Fwp-json\u002Fbricksforge\u002Fv1\u002Fform_submit`","Tentative : à croiser avec l'état du disque",[67,71,72],"`admin-ajax.php` avec `bricksforge_form_submit` ou `bricksforge_regenerate_nonce`","Tentative : le nonce est demandé avant l'envoi",[67,74,75],"Requête vers un fichier PHP sous `uploads\u002F`","Exécution probable : rotation des secrets",[77,78,79],"Comptes WordPress","Administrateur récent et inconnu","Persistance possible : restauration à envisager",{"type":39,"title":81,"body":82},"Pourquoi mettre à jour ne suffit pas","L'exploitation a précédé le correctif. Un site passé en 3.1.8.10 le 20 octobre peut avoir reçu un fichier le 8, et ce fichier survit à la mise à jour : le patch ferme la porte, il ne retire pas ce qui est déjà entré. C'est l'objection à traiter avant d'écrire au client « tout est corrigé ». Le bon ordre est donc : patcher ou neutraliser, puis chercher la compromission (fichiers, journaux, comptes, secrets), puis remettre une preuve datée.\n\nIl y a un second obstacle, plus banal : sans inventaire central, personne ne sait quels clients embarquent le plugin. Un site Bricks livré il y a deux ans, hébergé chez un autre prestataire, n'apparaît dans aucune alerte. L'inventaire vient donc en premier, et il vaut pour toutes les failles de plugin à venir.",{"type":84,"title":85,"steps":86},"steps","Inventorier le parc avec wp-cli",[87,90,93,96,99,102],{"title":88,"body":89},"Tester un site à la fois","`cd \u002Fhome\u002Fclient\u002Fpublic_html`\n`wp plugin is-installed bricksforge && wp plugin get bricksforge --field=version`\n`wp plugin list --fields=name,version,update`\nLa première commande répond par son code de sortie, la deuxième affiche la version, la troisième liste tous les plugins avec leur état de mise à jour. Le chemin est un exemple : adaptez-le à votre hébergeur.",{"title":91,"body":92},"Trouver tous les sites d'un serveur","`find \u002Fhome -name wp-config.php -not -path '*\u002Fwp-content\u002F*'`\nChaque `wp-config.php` désigne une installation. Le filtre écarte les copies rangées dans les thèmes ou les sauvegardes ; relisez la liste, un sous-dossier de test oublié compte aussi.",{"title":94,"body":95},"Boucler sur toutes les installations","`find \u002Fhome -name wp-config.php -not -path '*\u002Fwp-content\u002F*' -print0 | while IFS= read -r -d '' f; do d=$(dirname \"$f\"); echo \"$d $(sudo -u \"$(stat -c %U \"$d\")\" wp --path=\"$d\" --skip-plugins --skip-themes plugin get bricksforge --field=version 2>\u002Fdev\u002Fnull)\"; done`\nChaque ligne affiche le dossier puis la version, ou rien si le plugin est absent. L'option `--skip-plugins --skip-themes` évite de charger du code potentiellement piégé pendant l'audit.",{"title":97,"body":98},"Choisir l'utilisateur avec soin","Lancez wp-cli sous l'utilisateur propriétaire du site, comme dans la boucle ci-dessus. `--allow-root` fonctionne, mais crée des fichiers appartenant à root dans le site et exécute le code du site avec les pleins droits : réservez-le à un cas où rien d'autre n'est possible.",{"title":100,"body":101},"Capturer le résultat dans un tableau","Une ligne par installation : client, hébergeur, chemin, version relevée, date et heure du relevé. Ajoutez une colonne « visité depuis le 7 octobre » que vous remplirez à l'étape suivante. Ce tableau devient la pièce centrale du dossier remis aux clients.",{"title":103,"body":104},"Compléter pour les sites hors de votre serveur","Pour un site hébergé ailleurs, demandez un accès temporaire ou un export de `wp plugin list --fields=name,version,update`. Un site que vous ne pouvez pas interroger reste dans le tableau avec la mention « non vérifié », pas absent.",{"type":39,"title":106,"body":107},"Prioriser et fixer la fenêtre de rétroaudit","Traitez d'abord ce qui est à la fois exposé et exploité : un site avec Bricksforge en 3.1.8.9 ou moins, formulaires Pro Forms publics, en production. Viennent ensuite les sites de recette et les copies de travail, puis ceux où le plugin est installé sans être actif. Un plugin dormant mérite une décision : le supprimer reste plus sûr que le laisser vieillir.\n\nLa fenêtre de rétroaudit commence le 7 octobre 2026 à 21:47 UTC, premier signal publié par Patchstack. Convertissez cette heure dans le fuseau de vos journaux avant de filtrer. Le point essentiel : si vos journaux ne remontent pas jusqu'à cette date, l'absence de trace ne prouve rien. Notez la date de la plus ancienne ligne disponible, elle limite ce que vous pouvez affirmer.",{"type":39,"title":109,"body":110},"Mettre à jour, ou neutraliser en attendant","Quand la mise à jour est possible, `wp plugin update bricksforge` suffit pour une installation qui reçoit les versions normalement ; selon la licence, le site peut demander de passer par son tableau de bord ou par l'archive de l'éditeur. Vérifiez ensuite avec `wp plugin get bricksforge --field=version` : le résultat doit être 3.1.8.10 ou plus récent.\n\nQuand elle ne l'est pas encore, trois parades provisoires existent, aucune ne remplace le correctif. Désactiver le plugin avec `wp plugin deactivate bricksforge` coupe la route, au prix des formulaires du site : prévenez le client. Interdire l'exécution de PHP dans `uploads\u002F` retire sa valeur à un fichier déposé : sous nginx, `location ~* ^\u002Fwp-content\u002Fuploads\u002F.*\\.(php|php[0-9]|phtml|pht|phps)$ { deny all; }` placé avant le bloc PHP général ; sous Apache, un `.htaccess` dans `uploads\u002F` avec `\u003CFilesMatch \"\\.(php|php[0-9]|phtml|pht|phps)$\"> Require all denied \u003C\u002FFilesMatch>`. Enfin, une limitation de débit sur `\u002Fwp-json\u002Fbricksforge\u002Fv1\u002Fform_submit` ralentit les rafales, et la règle RapidMitigate de Patchstack bloque le trafic d'attaque pour qui utilise ce service. Ces mesures réduisent le risque, elles ne corrigent pas la faille.",{"type":84,"title":112,"steps":113},"Chasser les fichiers déposés et les traces d'accès",[114,117,120,123,126,129],{"title":115,"body":116},"Chercher les fichiers PHP dans uploads","`find wp-content\u002Fuploads -type f \\( -iname '*.php' -o -iname '*.php[0-9]' -o -iname '*.phtml' -o -iname '*.pht' -o -iname '*.phps' \\) -ls`\nUn dossier `uploads\u002F` sain ne contient pas de PHP exécutable. Un `index.php` de quelques octets, simple commentaire, est courant et sans danger ; tout autre fichier se lit avant d'être jugé.",{"title":118,"body":119},"Viser les cibles citées par Patchstack","`ls -la wp-content\u002Fuploads\u002Fbricksforge\u002Ftmp\u002F`\n`find wp-content\u002Fuploads -name 'login_admin_*.php' -ls`\n`find wp-content\u002Fuploads -type f -newermt '2026-10-07' -ls`\nLes deux premières commandes visent les emplacements et le nom de fichier de l'avis ; la troisième liste tout ce qui a été écrit dans `uploads\u002F` depuis le 7 octobre, pour repérer une variante.",{"title":121,"body":122},"Balayer les journaux nginx","`zgrep -h -i -E 'bricksforge\u002Fv1\u002Fform_submit|bricksforge_(form_submit|regenerate_nonce)' \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log*`\n`zgrep` lit les fichiers compressés comme les fichiers en clair : la rotation gzip est donc incluse par le joker. Gardez la date de chaque ligne et comparez-la à la fenêtre de rétroaudit.",{"title":124,"body":125},"Balayer les journaux Apache et cPanel","`zgrep -h -i -E 'bricksforge\u002Fv1\u002Fform_submit|bricksforge_(form_submit|regenerate_nonce)' \u002Fvar\u002Flog\u002Fapache2\u002F*access*.log* \u002Fvar\u002Flog\u002Fhttpd\u002F*access*log* \u002Fusr\u002Flocal\u002Fapache\u002Fdomlogs\u002F*`\nLes dossiers varient : `\u002Fvar\u002Flog\u002Fapache2\u002F` sous Debian et Ubuntu, `\u002Fvar\u002Flog\u002Fhttpd\u002F` sous RHEL et AlmaLinux, `\u002Fusr\u002Flocal\u002Fapache\u002Fdomlogs\u002F` sur un serveur cPanel. Les chemins absents produisent une erreur sans gravité.",{"title":127,"body":128},"Chercher l'accès aux fichiers déposés","`zgrep -h -i -E 'login_admin_[^ ]*\\.php|\u002Fuploads\u002F[^ ]*\\.(php[0-9]?|phtml|pht)|%2e(php|phtml)' \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log*`\nUne requête, surtout un GET réussi, vers un fichier PHP sous `uploads\u002F` signifie qu'un fichier a pu s'exécuter. Les variantes de casse et d'encodage se couvrent ici, dans les journaux, pas sur le disque.",{"title":130,"body":131},"Compter les sources et consigner","`zgrep -h 'POST \u002Fwp-admin\u002Fadmin-ajax.php' \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log* | awk '{print $1}' | sort | uniq -c | sort -rn | head`\nCette commande classe les adresses par nombre de POST vers `admin-ajax.php`. Consignez le résultat, même vide, avec la plus ancienne date de journal lue.",{"type":133,"title":134,"body":135},"tip","Ce que les journaux ne montrent pas","L'action AJAX voyage souvent dans le corps du POST, que le journal d'accès n'enregistre pas : la recherche de `bricksforge_form_submit` peut alors ne rien trouver alors que l'appel a eu lieu. Dans ce cas, repérez un volume anormal de POST vers `admin-ajax.php` ou vers la route REST, et croisez-le avec l'état du disque. Ce guide décrit des gestes d'administration ; il est fourni tel quel, sans prise en charge de notre part.",{"type":39,"title":137,"body":138},"Un fichier trouvé : le site n'est plus à considérer comme sain","La présence d'un fichier déposé implique une exécution de code côté serveur avec les droits du compte du site. Supprimer le fichier seul est insuffisant : il a pu servir à créer un compte, à lire `wp-config.php` ou à poser une seconde porte. Isolez le site, conservez une copie du fichier pour analyse, puis restaurez depuis une sauvegarde antérieure au 7 octobre 2026 plutôt que de nettoyer à la main.\n\nAprès la restauration, mettez Bricksforge à jour avant de remettre le site en ligne, sans quoi la même requête recommence. Si aucune sauvegarde saine n'existe, reconstruisez à partir du code source et de l'export du contenu, et traitez toute extraction de la base comme suspecte.",{"type":140,"title":141,"items":142},"ul","Secrets et comptes à renouveler après une compromission",[143,144,145,146,147,148,149],"**Sels et clés de `wp-config.php`** — `wp config shuffle-salts` les régénère et invalide les sessions ouvertes, y compris celle d'un intrus.","**Mot de passe de la base de données** — changez-le côté serveur MySQL ou MariaDB, puis dans `wp-config.php`, sans attendre.","**Clés API et jetons** — paiement, messagerie transactionnelle, cartographie, services tiers déclarés dans le site ou dans la base.","**Identifiants SMTP** — un compte de messagerie lisible dans la configuration sert vite à de l'envoi frauduleux.","**Mots de passe des administrateurs** — `wp user reset-password \u003CID>` pour chacun, et un mot de passe unique par personne.","**Comptes WordPress inconnus** — `wp user list --fields=ID,user_login,role,user_registered --orderby=user_registered --order=DESC` révèle les créations récentes.","**Persistances** — `wp cron event list`, le dossier `wp-content\u002Fmu-plugins\u002F` et les plugins ou thèmes qui ne sont pas les vôtres.",{"type":39,"title":151,"body":152},"La preuve datée à remettre au client","Un client qui lit « mis à jour » ne sait pas ce que vous avez vérifié. Remettez une fiche d'une page par site : date et heure de l'audit, version avant et après, résultat des recherches de fichiers, période couverte par les journaux avec la date de la plus ancienne ligne lue, actions menées (restauration, rotation, comptes supprimés) et ce qui n'a pas pu être contrôlé. Inclure les limites protège autant que les résultats.\n\nCette fiche est aussi votre protection si une compromission apparaît plus tard : elle date ce que vous saviez et ce que vous avez fait. Conservez le tableau d'inventaire et les sorties brutes des commandes avec la fiche.",{"type":39,"title":154,"body":155},"Rejouer la procédure pour la prochaine faille de plugin","Cinq temps, valables pour n'importe quel plugin. Inventorier : plugin, version, site, client, hébergeur. Prioriser : exposé et exploité d'abord. Fixer la fenêtre de rétroaudit à partir du premier signal publié. Neutraliser ou mettre à jour, puis chercher fichiers, traces d'accès, comptes et secrets, dans cet ordre. Remettre la preuve datée. Seuls changent la commande d'inventaire et les motifs de recherche, que l'avis de l'éditeur ou de Patchstack donne.\n\nUn parc éparpillé chez plusieurs hébergeurs rend chaque étape lente. Le compte revendeur regroupe vos sites sur un seul compte, avec un point d'accès par client ; l'accès SSH et wp-cli dépend du plan, vérifiez-le avant. Vous gardez la relation client, nous tenons l'infrastructure.",{"type":39,"title":157,"body":158},"La documentation officielle","Avis de Patchstack sur CVE-2026-85097 : https:\u002F\u002Fpatchstack.com\u002Farticles\u002Fcritical-unauthenticated-arbitrary-file-upload-vulnerability-exploited-in-bricksforge-plugin\u002F\nArticle de SecurityWeek : https:\u002F\u002Fwww.securityweek.com\u002Fbricksforge-wordpress-plugin-vulnerability-exploited-in-the-wild\u002F\nCommandes `wp plugin` : https:\u002F\u002Fdeveloper.wordpress.org\u002Fcli\u002Fcommands\u002Fplugin\u002F\nCommande `wp config shuffle-salts` : https:\u002F\u002Fdeveloper.wordpress.org\u002Fcli\u002Fcommands\u002Fconfig\u002Fshuffle-salts\u002F\nDirective nginx `location` : https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_core_module.html#location","Un parc de sites clients, une seule boucle d'audit","Quand les sites des clients vivent chez plusieurs hébergeurs, chaque audit coûte des heures. Avec l'hébergement revendeur ServOrbit.com, un point d'accès par client et une interface unique permettent de regrouper les sites de vos clients sous une seule interface, avec vos tarifs et votre marque.","Découvrir l'offre agences","\u002Fsolutions\u002Fagences",[164,180,196],{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":23,"views":18,"isPinned":19,"publishedAt":173,"updatedAt":174,"category":175,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":179},373,"wordpress-cve-2026-87902-rce-mise-a-jour-7-1-2",{"fr":166,"en":168,"ar":169,"es":170},"wordpress-cve-2026-87902-update-to-712-now","ووردبريس-cve-2026-87902-ترقية-7-1-2","wordpress-cve-2026-87902-actualiza-a-712-urgente","WordPress CVE-2026-87902 : patcher 7.1.2 avant d'être compromis","CVE-2026-87902 (CVSS 9.2) est exploitée activement depuis le 22 sept. 2026. Vérifiez votre version, appliquez WordPress 7.1.2 et comprenez pourquoi le mutualisé.","2026-09-24T00:00:00+00:00","2026-10-26T18:53:20+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[177],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fwordpress-cve-2026-87902-rce-mise-a-jour-7-1-2-poster.svg",{"categorySlug":34,"appSlug":35},{"id":181,"slug":182,"slugs":183,"title":187,"excerpt":188,"readTime":189,"views":18,"isPinned":19,"publishedAt":190,"updatedAt":191,"category":192,"categories":193,"featuredImage":30,"bgImage":31,"posterImage":195,"relatedSolution":30},508,"inventaire-versions-php-parc-sites-clients-agence",{"fr":182,"en":184,"ar":185,"es":186},"php-version-inventory-for-client-sites-an-agency-method","جرد-إصدارات-php-لمواقع-العملاء-منهج-للوكالات","inventario-de-versiones-php-de-sitios-cliente-metodo-de-agencia","Inventaire des versions PHP du parc clients : méthode d'agence","Registre des versions PHP de vos sites clients chez plusieurs hébergeurs : paliers d'accès, scripts en lot, lots de priorité, message client et preuve datée.",11,"2026-10-27T00:00:00+00:00","2026-10-27T23:58:39+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[194],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Finventaire-versions-php-parc-sites-clients-agence-poster.svg",{"id":197,"slug":198,"slugs":199,"title":203,"excerpt":204,"readTime":17,"views":18,"isPinned":19,"publishedAt":205,"updatedAt":206,"category":207,"categories":208,"featuredImage":30,"bgImage":31,"posterImage":210,"relatedSolution":30},521,"checklist-audit-securite-mensuel-vps-clients-agence",{"fr":198,"en":200,"ar":201,"es":202},"monthly-security-audit-checklist-client-vps-agency","قائمة-تدقيق-أمان-vps-شهرية-للعملاء-للوكالات","auditoria-seguridad-mensual-vps-clientes-agencia-checklist","Audit sécurité mensuel d'un VPS client : checklist en 45 min","Sept contrôles à dérouler chaque mois sur un VPS client : mises à jour, noyau, comptes SSH, ports, certificats, sauvegardes, journaux. Rapport daté inclus.","2026-10-28T00:00:00+00:00","2026-10-29T03:10:22+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[209],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fchecklist-audit-securite-mensuel-vps-clients-agence-poster.svg",1793289106500]