WP Cerber Security 9.9
English version: WP Cerber Security 9.9
In sintesi
WP Cerber 9.9 è finalmente disponibile e questa versione è interamente dedicata alla resilienza. Abbiamo implementato un meccanismo di autoriparazione per le impostazioni dei plugin, chiuso diverse vulnerabilità di rilevamento nel rilevatore di JavaScript offuscato di Traffic Inspector e corretto una serie di errori fatali che potevano mandare in crash un sito su determinati ambienti di hosting. Se utilizzi WP Cerber su un sito molto trafficato o su un hosting obsoleto, questo aggiornamento renderà la tua installazione notevolmente più robusta.
Punti salienti
- Novità: Backup e ripristino automatici delle impostazioni dei plugin, con report chiari in caso di ripristino.
- Sicurezza: Diversi cicli di rafforzamento per il rilevatore di JavaScript offuscato utilizzato da Traffic Inspector, al fine di bloccare le reali vie di elusione.
- Affidabilità: WP Cerber ora funziona correttamente anche su ambienti di hosting meno recenti in cui PHP non dispone del driver di database mysqlnd moderno.
- Correzioni di bug: è stato risolto un problema che causava il blocco del sito a causa di un danneggiamento delle impostazioni su PHP 8, insieme a una regressione nel rilevamento di JavaScript con escape esadecimale.
Nuove funzionalità
Backup e ripristino automatici delle impostazioni dei plugin
Questa è la novità principale di questa versione. WP Cerber ora mantiene una copia valida e aggiornata della sua configurazione nel database chiave-valore del plugin. Il backup viene aggiornato dopo ogni aggiornamento delle impostazioni, importazione delle impostazioni, aggiornamento del plugin e dall'attività di manutenzione giornaliera. Solo le configurazioni valide possono sovrascrivere il backup esistente, quindi uno stato errato non potrà mai sovrascrivere uno stato corretto.
Perché è importante? Se la configurazione del plugin memorizzata nel database dovesse diventare illeggibile, WP Cerber rileva il danneggiamento e ripristina automaticamente la configurazione dal backup. In questo modo, mantieni le tue regole del firewall, le liste di controllo degli accessi e le impostazioni di notifica, invece di ripristinare silenziosamente le impostazioni predefinite di fabbrica.
Il processo di ripristino è completamente trasparente. Ogni esito viene segnalato tramite il sistema di monitoraggio dei problemi del plugin:
- Dopo un ripristino automatico riuscito, viene visualizzato un avviso che può essere chiuso, il quale spiega cosa è successo, quali azioni sono state intraprese e cosa dovresti rivedere. L'avviso scompare dopo aver rivisto e salvato le impostazioni.
- Se il backup è mancante, non valido o il ripristino non riesce, viene registrato un problema critico con indicazioni pratiche e metadati diagnostici pertinenti, senza esporre impostazioni serializzate o dettagli interni del dispositivo di archiviazione.
- Vengono evitati stati di emissione contraddittori o duplicati, in modo da non visualizzare mai avvisi contrastanti.
Se il ripristino non è possibile, viene mantenuto il fallback di ultima istanza alle impostazioni predefinite, che vengono ora salvate nel database in modo che il plugin si avvii da uno stato deterministico. Abbiamo inoltre rafforzato il percorso di ripristino contro le cache delle opzioni obsolete: il valore corrotto viene esplicitamente eliminato prima che venga scritto il valore ripristinato e il backup viene memorizzato e caricato bypassando la cache degli oggetti, in modo che venga considerato attendibile solo il record persistente nel database.
Avviso importante per gli host sprovvisti del driver mysqlnd
Un nuovo avviso nel widget "Prontezza del sistema" identifica i server in cui l'estensione mysqli di PHP è compilata con la vecchia libreria libmysqlclient anziché con la moderna mysqlnd. L'avviso è informativo: conferma che WP Cerber continua a funzionare tramite un fallback compatibile e consiglia di abilitare mysqlnd per la piena compatibilità e prestazioni migliori. Questo fornisce una diagnosi concreta e utile da presentare al proprio provider di hosting.
Modifiche alla sicurezza e al controllo degli accessi
Rilevamento rafforzato di JavaScript offuscato in Traffic Inspector
Traffic Inspector analizza i campi delle richieste pubbliche alla ricerca di codice JavaScript offuscato, e questa versione colma diverse lacune di copertura e sfrutta le vulnerabilità di tale rilevatore, preservandone al contempo il basso tasso di falsi positivi.
Copertura più ampia delle sequenze di escape. Il rilevatore in precedenza riconosceva solo le sequenze di escape esadecimali \xNN nelle stringhe completamente codificate. Ora rileva anche le sequenze di escape Unicode \uNNNN e \u{...} , incluse le stringhe che mescolano i formati supportati. La decodifica è limitata ai punti di codice ASCII e le sequenze di escape parziali e le espressioni arbitrarie rimangono volutamente escluse per evitare falsi positivi.
Rilevamento di primitive nascoste nelle chiamate fromCharCode(). I payload decodificati da costruzioni esplicite String.fromCharCode() vengono ora controllati per primitive di esecuzione, DOM, rete e sistema, non solo URL esterni e indirizzi IP. La decodifica è limitata a letterali decimali ed esadecimali convalidati, supporta chiamate multiple, prefissi 0X maiuscoli e virgole finali opzionali e applica la semantica JavaScript ToUint16 in modo che i valori decodificati corrispondano a ciò che un browser produrrebbe effettivamente. La corrispondenza di primitive con consapevolezza dei token e limiti degli identificatori significa che parole comuni come "description" e "evaluation" non vengono più abbinate nelle sottostringhe eval o script .
Mitigazione delle vulnerabilità di bypass degli interi avvolti. String.fromCharCode() applica ToUint16 a ogni argomento, quindi un codice ASCII più un multiplo di 65536 produce lo stesso carattere. In precedenza, il rilevatore accettava solo valori letterali fino a sei cifre, il che significava che i valori avvolti di sette o più cifre eludevano completamente il rilevamento. Ora il rilevatore accetta valori letterali decimali senza segno ed esadecimali fino a Number.MAX_SAFE_INTEGER di JavaScript e riduce ogni token in modo deterministico alla sua unità di codice ToUint16, indipendentemente dalla dimensione intera della piattaforma. La lunghezza del token è limitata durante la conversione, quindi un valore letterale di dimensioni eccessive non può generare un lavoro illimitato per cifra su una richiesta pubblica, chiudendo una potenziale vulnerabilità DoS.
Nessuna soppressione tramite un singolo token errato. In precedenza, un token fuori intervallo o ambiguo causava l'interruzione dell'intera chiamata decodificata, consentendo a un aggressore di aggiungere un singolo valore non supportato a un payload altrimenti rilevabile e di sopprimere il rilevamento. Ora, un token strutturalmente valido ma non supportato viene mappato a un carattere sentinella e il resto della chiamata viene comunque decodificato. L'intera chiamata viene saltata solo quando l'elenco degli argomenti è malformato o non numerico.
I payload separati da commenti non rappresentano più un punto cieco. La compattazione dell'input del rilevatore rimuoveva solo gli spazi bianchi generici, lasciando intatti i commenti JavaScript e consentendo ad argomenti numerici separati da commenti come String.fromCharCode(101,/*x*/118,97,108,40,49,41,59) di eludere il rilevamento. Ora il rilevatore rimuove i commenti a blocchi JS, i commenti di riga e gli spazi bianchi lessicali al di fuori delle stringhe tra virgolette prima di eseguire le sue euristiche e gestisce elenchi di argomenti che si estendono su più righe.
Per il proprietario di un sito WordPress, il risultato pratico è semplice: diverse tecniche realistiche che un attaccante potrebbe utilizzare per far passare del codice JavaScript offuscato attraverso Traffic Inspector non funzionano più, e il rilevatore rimane sufficientemente prudente da non segnalare il traffico legittimo.
Miglioramenti dell'affidabilità
Compatibilità con i driver di database legacy
WP Cerber ora funziona correttamente anche su ambienti di hosting in cui PHP non fornisce il moderno driver di database mysqlnd. Il livello del database verifica la disponibilità di mysqli_fetch_all() prima di utilizzare il percorso più veloce di mysqlnd. Quando non è disponibile, i set di risultati vengono recuperati riga per riga tramite un metodo compatibile, preservando l'ordine delle righe, la struttura dei risultati e il contratto di gestione degli errori esistente. Invece di un errore irreversibile, si ottiene un fallback più lento ma perfettamente funzionante, oltre all'avviso descritto in precedenza.
Correzioni di bug
Errore irreversibile sui siti con impostazioni danneggiate (PHP 8)
Un valore di configurazione corrotto e non deserializzabile nel database causava un errore irreversibile TypeError nella array_merge() al momento del caricamento del plugin su PHP 8, mandando in crash l'intero sito. Ora, durante il caricamento delle impostazioni, il valore memorizzato viene convalidato e, in caso di errore, vengono ripristinate le impostazioni predefinite. L'errore viene registrato come problema critico persistente e si risolve automaticamente quando l'amministratore salva nuovamente le impostazioni. Il problema di corruzione si verifica solo quando un valore memorizzato non vuoto non viene effettivamente deserializzato correttamente; pertanto, un valore vuoto, che indica semplicemente che le impostazioni non esistono ancora, non genera mai un falso allarme. In combinazione con la nuova funzionalità di backup e ripristino, questo trasforma uno scenario di crash del sito in uno scenario di auto-riparazione.
Errore irreversibile sugli host senza mysqlnd
Il livello del database chiamato mysqli_result::fetch_all() , che richiede il driver mysqlnd e non è presente sugli host che eseguono mysqli con libmysqlclient, causa un errore irreversibile. Il percorso veloce è ora protetto e ripiega sul recupero riga per riga, come descritto nella sezione sull'affidabilità precedente.
Regressione nel rilevamento di JavaScript con escape esadecimale
Un bug nel rilevatore di JavaScript offuscato impediva la decodifica delle stringhe composte esclusivamente da sequenze \xNN . La fase di normalizzazione utilizzava trim() con una maschera di caratteri che rimuoveva la barra rovesciata iniziale del primo carattere di escape insieme all'apostrofo di apertura, producendo una stringa di lunghezza dispari che il controllo di decodifica ignorava. Di conseguenza, i caratteri primitivi con escape esadecimale come eval , script e XMLHttpRequest non venivano rilevati sul percorso del campo di richiesta di Traffic Inspector abilitato di default. Ora la decodifica funziona correttamente, ripristinando il rilevamento di questi caratteri primitivi offuscati.
Bypass tramite Commento separato dagli argomenti di CharCode
Gli argomenti numerici validi separati da commenti nelle chiamate fromCharCode() eludevano il rilevamento perché i commenti JavaScript venivano lasciati intatti durante la compattazione dell'input. Questo problema è stato risolto come descritto nella sezione sulla sicurezza precedente.
Riepilogo
La versione 9.9 è un aggiornamento che, si spera, non noterete nemmeno, ed è proprio questo l'obiettivo. Le vostre impostazioni ora sopravvivono alla corruzione del database anziché scomparire. Un problema dell'ambiente di hosting che in precedenza causava il crash del plugin ora si risolve in modo più controllato, indicandovi esattamente cosa chiedere al vostro provider di hosting per risolvere il problema. Per l'amministratore, l'esperienza quotidiana rimane la stessa dashboard di sempre, basata su un sistema che si ripristina automaticamente in caso di errore e analizza il traffico dannoso con meno punti ciechi.