SecuPress

SecuPress v2.7 aka Disco

Blog SecuPress SecuPress v2.7 aka Disco
0 commentaire

Une 2.6.4 qui devient une 2.7 ? Pourquoi pas… Voilà une majeure un peu plus chargée : 5 nouveautés, un firewall passé en 8G, des backups qui sortent enfin de la racine web, 3 correctifs de sécurité, et une ribambelle d’améliorations.

SecuPress 2.7

Disco, c’est la Mark XXVII, une armure de l’Iron Legion vue dans Iron Man 3. Tony l’a conçue pour le furtif : un système de camouflage façon caméléon, bleu et orange, d’où le surnom, parce que ça ressemble autant à une boule disco qu’à un lézard qui se fond dans le décor. Elle n’est pas là pour le combat de front, elle est là pour ne pas se faire voir, ou au contraire pour voir clairement ce qui se passe autour.

L’idée de cette 2.7 tient un peu des deux. D’un côté on affiche enfin l’état du système, on peut même retirer l’armure 30 minutes si on a besoin de respirer. De l’autre on cache mieux ce qui ne doit pas fuiter : cookies dans les rapports, existence d’un email au débannissement, sauvegardes hors du dossier web, export qui n’emporte plus les logs.

Mettre la sécurité en pause

Oui, vous avez bien lu. Un bouton pour couper SecuPress.

Avant de hurler : les réglages ne bougent pas, rien n’est désactivé pour de bon. Seuls les modules PHP s’arrêtent. Les règles déjà écrites dans le .htaccess ou le robots.txt restent en place. Au bout de 30 minutes, tout se relance tout seul, si vous ne l’avez pas fait. Au bout de 5 minutes, un mail part de toutes façons à l’adresse d’administration pour prévenir que la sécurité est encore en pause, au cas où ce ne serait pas vous.

Pourquoi 30 minutes ? Parce que c’est le temps d’un debug, d’un plugin qui râle, d’un prestataire qui « a juste besoin que ça passe ». Assez long pour travailler, assez court pour que personne n’oublie l’armure au vestiaire. Les deux durées sont filtrables si vous avez vraiment besoin d’autre chose.

Le bouton est sur le module d’accueil, avec le nombre de modules concernés. Une confirmation s’affiche avant de valider, ce n’est pas un « missed click ». Pendant la pause, la barre d’admin passe au rose, un bandeau vous rappelle que le site est exposé, et vous pouvez relancer immédiatement.

security status

security status

Ce n’est pas un « désactiver le plugin ». C’est un House Party Protocol à l’envers : on range l’armure, JARVIS la ressort tout seul.

Widget « System Status »

Depuis la 2.3 on a un gadget d’attaques bloquées sur le tableau de bord. Il manquait le pendant : un état des lieux du site, sans aller fouiller dans cinq écrans.

Le nouveau widget « System Status » aligne WordPress, HTTPS, PHP, le serveur (Apache, Nginx, IIS, LiteSpeed), la présence du robots.txt physique, du .htaccess ou du web.config, le nombre de modules SecuPress actifs, la date du dernier scan avec la note, les comptes connectés en live, et le nombre d’administrateurs. Si quelque chose cloche (PHP trop vieux, HTTPS absent en prod, sécurité en pause, licence expirée), la ligne passe en warning ou en danger, avec une explication au survol.

system status

system status

C’est le genre de truc que je voulais pour moi, en support, et que vous allez ouvrir une fois par semaine pour vérifier que rien n’a dérivé. Le widget d’attaques, lui, reste à sa place ; un petit pictogramme depuis le statut de sécurité vous y renvoie.

Alertes mots de passe d’application

WordPress permet depuis un moment de créer des mots de passe d’application pour la REST API. Pratique. Aussi pratique pour quelqu’un qui a déjà un accès profil et qui se fabrique une clé dans votre dos.

Nouveau module, activé automatiquement à la mise à jour Pro : dès qu’un mot de passe d’application est ajouté à un compte, le propriétaire reçoit un mail avec le nom de l’application. Si c’est un administrateur, l’email d’administration du site est prévenu aussi.

application passwords

application passwords

Vous n’avez rien à régler. Si ce n’était pas vous, vous révoquez. Si c’était vous, vous ignorez. Simple, et ça manque dans le core (il parait que ça arrive…).

Anti Hotlink, version expert

Le module existe depuis longtemps : empêcher les autres sites d’embarquer vos images et de pomper votre bande passante. En mode expert, il a enfin des options.

Trois comportements quand quelqu’un hotlink :

  • Erreur 403, recommandé
  • Image de remplacement (notre petit pictogramme « hotlinking »)
  • Pixel transparent 1×1, l’ancien comportement, marqué Legacy

Et une liste de referers autorisés, moteurs et réseaux, pour que Google, Bing, DuckDuckGo, Qwant, Facebook, X, Slack, LinkedIn, Discord et quelques autres puissent encore afficher vos médias. Par défaut tout est coché, vous retirez ce que vous ne voulez pas.

anti hotlink

anti hotlink

Toujours réservé au HTTPS, toujours en expert. Si vous ne savez pas pourquoi vous touchez à ça, ne touchez pas.

Backups : hors web, et mot de passe sur le ZIP

Deux changements majeurs dans le même module, les deux vont dans le même sens.

D’abord l’emplacement. Quand c’est possible, les sauvegardes sont maintenant (enfin) stockées au-dessus de la racine web, pas dans un dossier que n’importe qui pourrait tenter d’atteindre. Si open_basedir ou les droits l’interdisent, on retombe dans l’ancien emplacement avec le warning habituel : supprimez-les dès que vous les avez récupérées. À la mise à jour, le dossier existant est migré.

Ensuite, en option, un mot de passe sur les ZIP. Le secret n’est pas dans les options de la base, il part dans une constante du wp-config.php générée pour l’installation. AES-256, donc il faut PHP 7.2+ et libzip 1.2+. Le mot de passe n’est pas récupérable : gardez-le quelque part de sûr. Les anciens ZIP gardent leur propre génération. Pour enlever la protection, vous retapez le mot de passe actuel et vous laissez le nouveau vide. Trois essais faux et c’est verrouillé, avec un lien de reset par mail.

Une sauvegarde dans wp-content sans mot de passe, c’est une sauvegarde qui attend d’être téléchargée. Là, même si le fichier fuit, il reste un ZIP chiffré, et idéalement il n’est même plus dans le web root.

Firewall 8G

Le firewall interne encore mis à jour sur les jeux de règles 8G de Perishable Press : query, URI, host, cookie, user-agent, referer. Ce n’est pas « on a ajouté trois regex », c’est le jeu à jour, chargé depuis nos fichiers de données, donc on pourra le faire évoluer sans attendre une majeure comme d’habitude.

Dans la foulée, les valeurs sensibles des cookies sont masquées dans les rapports de blocage. Vous voyez qu’un cookie a déclenché une règle, vous ne voyez plus le secret en clair. Pareil côté self-unban : le mail de débannissement ne dit plus si l’adresse existe ou pas. Moins d’énumération, moins de fuite.

Le reste

  • Les mots de passe forts s’appliquent aussi sur le formulaire de réinitialisation.
  • L’export / import ne sort plus que les clés de configuration. Plus de logs, plus de transients, plus de scans, plus d’IP bannies dans le fichier. Vous migrez des réglages, pas l’historique d’un site.
  • La redirection HTTPS écrit maintenant correctement les règles IIS.
  • Un scan malware manuel n’est plus tué par une désactivation planifiée qui tombait au mauvais moment : on sait d’où le scan vient.
  • Fallbacks si l’extension PHP mbstring n’est pas là.
  • Liste d’extensions de fichiers interdites mise à jour.
  • Correctifs d’URL et de rewrite pour les installs en sous-dossier, sous-domaine, siteurl déporté, WordPress dans son propre répertoire. Ça touchait readme.html, les changelogs, le bad URL/file access, Move Login.
  • Énumération des comptes : routes REST, préfixes de langue du type /fr/, et ?_embed=.
  • Fatal is_processing() si WooCommerce embarque une vieille lib async : encore (oui, encore).
  • Hooks de désactivation des mauvais thèmes, message du déverrouillage admin, plugin revenu sur le dépôt toujours listé comme fermé, filtre Fake Google Bots, type de retour des rewrite bases, scan malware base de données qui mélangeait string et array, option PasswordLess retirée proprement.

3 correctifs de sécurité

Ceux-là méritent leur ligne, ils sont dans la notice « What’s new » pour une raison :

  • Contournement d’authentification non authentifié via le paramètre secupress_auto_login_token. Les transients concernés sont purgés à la mise à jour. Merci à la team Wordfence.
  • Possible RCE à l’écriture de constantes dans wp-config.php.
  • Injection SQL côté administrateur à la suppression des logs.

Mettez à jour. Ce n’est pas une suggestion.

Prérequis

SecuPress 2.7 demande WordPress 5.5 minimum et PHP 7.3 minimum. Si vous êtes encore en dessous, ce n’est plus un sujet SecuPress, c’est un sujet d’hébergeur.

La 2.8 aura les logs HTTP, rendez-vous est pris au plus vite, la beta était déjà en cours !

0 commentaire