Releases
Releases
Posted By

WP Cerber Security 9.9


English version: WP Cerber Security 9.9


Aperçu

WP Cerber 9.9 est disponible et cette version est entièrement dédiée à la résilience. Nous avons intégré un mécanisme d'auto-réparation pour les paramètres de vos plugins, corrigé plusieurs failles de détection dans le détecteur de JavaScript obfusqué de Traffic Inspector et résolu une série d'erreurs critiques pouvant entraîner l'indisponibilité d'un site sur certains environnements d'hébergement. Si vous utilisez WP Cerber sur un site à fort trafic ou sur un hébergement ancien, cette mise à jour rendra votre installation nettement plus robuste.

Points clés

  • Nouveau : Sauvegarde et restauration automatiques des paramètres des plugins, avec un rapport clair en cas de restauration.
  • Sécurité : Plusieurs cycles de renforcement du détecteur JavaScript obfusqué utilisé par l'inspecteur de trafic, bloquant ainsi les véritables vecteurs de contournement.
  • Fiabilité : WP Cerber fonctionne désormais correctement sur les environnements d'hébergement anciens où PHP ne dispose pas du pilote de base de données moderne mysqlnd.
  • Corrections de bugs : Un scénario de corruption des paramètres provoquant le plantage du site sous PHP 8 a été corrigé, ainsi qu’une régression de la détection pour le JavaScript échappé hexadécimal.

Nouvelles fonctionnalités

Sauvegarde et restauration automatiques des paramètres du plugin

Voici la principale nouveauté de cette version : WP Cerber conserve désormais une copie valide de sa configuration dans le système de stockage de clés-valeurs du plugin. Cette sauvegarde est actualisée après chaque mise à jour ou importation réussie des paramètres, chaque mise à niveau du plugin et lors de la maintenance quotidienne. Seules les configurations valides peuvent remplacer la sauvegarde existante ; ainsi, une configuration erronée ne peut jamais écraser une configuration correcte.

Pourquoi est-ce important ? Si la configuration du plugin stockée dans la base de données devient illisible, WP Cerber détecte la corruption et restaure automatiquement la configuration à partir de la sauvegarde. Vos règles de pare-feu, listes de contrôle d'accès et paramètres de notification sont ainsi conservés, au lieu d'être réinitialisés aux valeurs par défaut.

Le processus de récupération est totalement transparent. Chaque résultat est consigné via le système de suivi des problèmes du plugin :

  • Après une restauration automatique réussie, un message d'avertissement s'affiche et explique ce qui s'est passé, l'action effectuée et les informations à vérifier. Ce message disparaît une fois vos paramètres enregistrés.
  • Si la sauvegarde est manquante, invalide ou si la récupération échoue, un problème critique est enregistré avec des conseils exploitables et des métadonnées de diagnostic pertinentes, sans exposer les paramètres sérialisés ni les éléments internes du stockage.
  • Les états de problèmes contradictoires ou dupliqués sont empêchés, vous ne verrez donc jamais de notifications conflictuelles.

Si la récupération est impossible, le comportement par défaut est conservé et enregistré dans la base de données afin que le plugin démarre dans un état déterministe. Le processus de restauration a également été renforcé pour se prémunir contre les caches d'options obsolètes : la valeur corrompue est explicitement supprimée avant l'écriture de la valeur restaurée, et la sauvegarde est stockée et chargée en contournant le cache d'objets, de sorte que seul l'enregistrement de base de données durable est pris en compte.

Avis aux hôtes ne disposant pas du pilote mysqlnd

Un nouvel avertissement dans le widget « État du système » signale les serveurs où l'extension mysqli de PHP est compilée avec l'ancienne bibliothèque libmysqlclient au lieu de la bibliothèque moderne mysqlnd. Cet avertissement est informatif : il confirme que WP Cerber continue de fonctionner avec une bibliothèque de secours compatible et recommande d'activer mysqlnd pour une compatibilité totale et de meilleures performances. Vous disposez ainsi d'un diagnostic concret et exploitable à présenter à votre hébergeur.

Modifications apportées à la sécurité et au contrôle d'accès

Détection renforcée du JavaScript obfusqué dans l'inspecteur de trafic

L'outil Traffic Inspector inspecte les champs de requêtes publiques à la recherche de JavaScript obfusqué, et cette version comble plusieurs lacunes de couverture et vecteurs de contournement dans ce détecteur tout en préservant son faible taux de faux positifs.

Couverture étendue des séquences d'échappement. Auparavant, le détecteur ne reconnaissait que les séquences d'échappement hexadécimales \xNN dans les chaînes entièrement échappées. Il détecte désormais également les séquences d'échappement Unicode \uNNNN et \u{...} , y compris dans les chaînes combinant les formats pris en charge. Le décodage est limité aux points de code ASCII ; les séquences d'échappement partielles et les expressions arbitraires sont volontairement exclues afin d'éviter les faux positifs.

Détection des primitives dissimulées dans les appels à `fromCharCode()`. Les données décodées à partir de constructions String.fromCharCode() explicites sont désormais analysées pour détecter les primitives d'exécution, DOM, réseau et système, et non plus seulement les URL externes et les adresses IP. Le décodage est limité aux littéraux décimaux et hexadécimaux validés, prend en charge les appels multiples, les préfixes 0X majuscules et les virgules finales facultatives, et applique la sémantique JavaScript `ToUint16` afin que les valeurs décodées correspondent à ce qu'un navigateur produirait réellement. La correspondance des primitives prenant en compte les jetons et les limites des identifiants signifie que les mots courants tels que « description » et « evaluation » ne sont plus analysés sur les sous-chaînes eval ou script .

Correction des contournements liés aux entiers tronqués. String.fromCharCode() ` applique `ToUint16` à chaque argument ; ainsi, un code ASCII suivi d'un multiple de 65 536 produit le même caractère. Auparavant, le détecteur n'acceptait que les littéraux à six chiffres maximum, ce qui permettait aux valeurs à sept chiffres ou plus tronquées de passer inaperçues. Désormais, le détecteur accepte les littéraux décimaux non signés et hexadécimaux jusqu'à la valeur de Number.MAX_SAFE_INTEGER en JavaScript et convertit chaque jeton de manière déterministe en son unité de code `ToUint16`, indépendamment de la taille des entiers de la plateforme. La longueur des jetons est limitée lors de la conversion, empêchant ainsi un littéral trop long d'entraîner un traitement illimité par chiffre lors d'une requête publique et éliminant une potentielle faille de sécurité (DoS).

Aucune suppression n'est possible en cas de jeton erroné. Auparavant, un jeton hors plage ou ambigu entraînait le rejet de l'appel décodé entier. Un attaquant pouvait donc ajouter une valeur non prise en charge à une charge utile normalement détectable et ainsi contourner la détection. Désormais, un jeton structurellement valide mais non pris en charge est associé à un caractère sentinelle, et le reste de l'appel est décodé. L'appel entier est ignoré uniquement si la liste d'arguments est malformée ou non numérique.

Les données séparées par des commentaires ne constituent plus un angle mort. Auparavant, la compression des données d'entrée du détecteur ne supprimait que les espaces génériques, laissant ainsi les commentaires JavaScript intacts et permettant aux arguments numériques séparés par des commentaires, tels que String.fromCharCode(101,/*x*/118,97,108,40,49,41,59) , de contourner la détection. Désormais, le détecteur supprime les commentaires de bloc JS, les commentaires de ligne et les espaces lexicaux en dehors des chaînes de caractères entre guillemets avant d'exécuter ses heuristiques, et il gère les listes d'arguments s'étendant sur plusieurs lignes.

Pour un propriétaire de site WordPress, le résultat pratique est simple : plusieurs techniques réalistes qu’un attaquant pourrait utiliser pour faire passer du JavaScript obfusqué devant l’inspecteur de trafic ne fonctionnent plus, et le détecteur reste suffisamment conservateur pour ne pas signaler le trafic légitime.

Améliorations de la fiabilité

Compatibilité avec les pilotes de bases de données hérités

WP Cerber fonctionne désormais correctement sur les environnements d'hébergement où PHP ne fournit pas le pilote de base de données mysqlnd moderne. La couche de base de données vérifie la disponibilité de mysqli_fetch_all() avant d'utiliser le chemin rapide mysqlnd. Si cette fonction est indisponible, les résultats sont récupérés ligne par ligne via une méthode compatible, préservant ainsi l'ordre des lignes, la structure des résultats et le protocole de gestion des erreurs existant. Au lieu d'une erreur fatale, vous obtenez une solution de repli plus lente mais parfaitement fonctionnelle, ainsi que le message d'avertissement décrit précédemment.

Corrections de bugs

Erreur fatale sur les sites dont les paramètres sont corrompus (PHP 8)

Une valeur de configuration corrompue et non sérialisable dans la base de données a provoqué une erreur fatale TypeError ) dans la fonction array_merge() au chargement du plugin sous PHP 8, rendant le site inaccessible. Désormais, le chargement des paramètres valide la valeur enregistrée et utilise les paramètres par défaut si elle ne peut être analysée. L'erreur est enregistrée comme un problème critique persistant et est résolue automatiquement lorsque l'administrateur enregistre à nouveau les paramètres. Le problème de corruption ne se produit que lorsqu'une valeur enregistrée non vide ne peut être désérialisée ; une valeur vide, qui signifie simplement que les paramètres n'existent pas encore, ne déclenche donc jamais de fausse alerte. Combinée à la nouvelle fonctionnalité de sauvegarde et de restauration, cette solution transforme un plantage du site en un processus d'auto-réparation.

Erreur fatale sur les hôtes sans mysqlnd

La couche de base de données appelée mysqli_result::fetch_all() , qui requiert le pilote `mysqlnd` et n'existe pas sur les hôtes exécutant `mysqli` avec `libmysqlclient`, provoque une erreur fatale. Le chemin d'accès rapide est désormais protégé et utilise une récupération ligne par ligne, comme décrit dans la section relative à la fiabilité ci-dessus.

Régression dans la détection JavaScript échappée hexadécimale

Une régression dans le détecteur de JavaScript obfusqué empêchait le décodage des chaînes composées uniquement de séquences \xNN . L'étape de normalisation utilisait la fonction trim() avec un masque de caractères supprimant la barre oblique inverse initiale du premier caractère d'échappement ainsi que le guillemet ouvrant, produisant une chaîne de longueur impaire que le système de décodage ignorait. Par conséquent, les primitives échappées en hexadécimal telles que eval , script et XMLHttpRequest n'étaient pas détectées sur le chemin du champ de requête de l'inspecteur de trafic activé par défaut. Le décodage fonctionne désormais correctement, rétablissant la détection de ces primitives obfusquées.

Contournement via des arguments de code de caractère séparés par des commentaires

Les arguments numériques valides séparés par des commentaires dans les appels à fromCharCode() échappaient à la détection car les commentaires JavaScript étaient conservés lors de la compression des données. Ce problème est résolu comme décrit dans la section sécurité ci-dessus.

Résumé

La version 9.9 est une mise à jour que vous ne remarquerez probablement même pas, et c'est bien là l'objectif. Vos paramètres sont désormais conservés même en cas de corruption de la base de données. Un problème d'environnement d'hébergement qui provoquait auparavant le plantage de l'extension se résout maintenant de manière transparente et vous indique précisément la correction à demander à votre hébergeur. Pour l'administrateur, l'interface reste la même, avec un tableau de bord familier, reposant sur une infrastructure qui se rétablit automatiquement après une panne et analyse le trafic malveillant avec une plus grande précision.


I'm a team lead in Cerber Tech. I'm a software & database architect, WordPress - PHP - SQL - JavaScript developer. I started coding in 1993 on IBM System/370 (yeah, that was amazing days) and today software engineering at Cerber Tech is how I make my living. I've taught to have high standards for myself as well as using them in developing software solutions.

View Comments
There are currently no comments.