Releases
Releases
Posted By

WP Cerber Security 9.9


English version: WP Cerber Security 9.9


In één oogopslag

WP Cerber 9.9 is er, en deze release draait volledig om veerkracht. We hebben een zelfherstellend mechanisme voor je plugininstellingen ingebouwd, verschillende detectie-omzeilingen in de versleutelde JavaScript-detector van de Traffic Inspector verholpen en een reeks fatale fouten opgelost die een site op bepaalde hostingomgevingen plat konden leggen. Als je WP Cerber op een drukke site of op een verouderde hostingomgeving gebruikt, maakt deze update je installatie merkbaar robuuster.

Belangrijkste hoogtepunten

  • Nieuw: Automatische back-up en herstel van plugininstellingen, met duidelijke rapportage wanneer een herstel plaatsvindt.
  • Beveiliging: Meerdere beveiligingsrondes voor de detector van versleutelde JavaScript-code die door de Traffic Inspector wordt gebruikt, waardoor daadwerkelijke omzeilingsmogelijkheden worden gedicht.
  • Betrouwbaarheid: WP Cerber werkt nu correct op oudere hostingomgevingen waar PHP de moderne mysqlnd-databasedriver niet ondersteunt.
  • Bugfixes: Een probleem dat leidde tot een websitecrash door corruptie van de instellingen in PHP 8 is opgelost, evenals een regressie in de detectie van hexadecimaal geëscapte JavaScript-code.

Nieuwe functies

Automatische back-up en herstel voor plug-ininstellingen

Dit is de belangrijkste nieuwe functie van deze release. WP Cerber bewaart nu een laatst bekende geldige kopie van de configuratie in de key-value-opslag van de plugin. De back-up wordt vernieuwd na elke succesvolle update van de instellingen, import van instellingen, plugin-upgrade en door de dagelijkse onderhoudstaak. Alleen geldige configuraties mogen de bestaande back-up vervangen, zodat een onjuiste configuratie nooit een correcte configuratie kan overschrijven.

Waarom is dit belangrijk? Als de opgeslagen pluginconfiguratie in de database onleesbaar wordt, detecteert WP Cerber de corruptie en herstelt de configuratie automatisch vanuit de back-up. Zo blijven uw firewallregels, toegangslijsten en notificatie-instellingen behouden in plaats van dat er stilletjes wordt teruggevallen op de fabrieksinstellingen.

Het herstelproces is volledig transparant. Elk resultaat wordt gerapporteerd via de probleemmonitor van de plugin:

  • Na een succesvolle automatische herstelprocedure verschijnt een waarschuwing die u kunt wegklikken. Deze waarschuwing legt uit wat er is gebeurd, welke actie is ondernomen en wat u moet controleren. De melding verdwijnt vanzelf nadat u uw instellingen hebt gecontroleerd en opgeslagen.
  • Als de back-up ontbreekt, ongeldig is of het herstel mislukt, wordt een kritiek probleem geregistreerd met bruikbare instructies en relevante diagnostische metadata, zonder dat geserialiseerde instellingen of interne opslaggegevens worden weergegeven.
  • Tegenstrijdige of dubbele meldingen worden voorkomen, zodat u nooit tegenstrijdige berichten ziet.

Als herstel niet mogelijk is, blijft de bestaande terugvaloptie naar de standaardinstellingen behouden. Deze standaardinstellingen worden nu opgeslagen in de database, zodat de plugin vanuit een deterministische staat start. We hebben het herstelproces ook beveiligd tegen verouderde optiecaches: de beschadigde waarde wordt expliciet verwijderd voordat de herstelde waarde wordt weggeschreven, en de back-up wordt opgeslagen en geladen zonder de objectcache te raadplegen, zodat alleen de duurzame databasegegevens worden vertrouwd.

Adviesbericht voor hosts zonder het mysqlnd-stuurprogramma

Een nieuwe waarschuwingsdetector in de widget 'Systeemgereedheid' identificeert servers waar de mysqli-extensie van PHP is gebouwd met de verouderde libmysqlclient-bibliotheek in plaats van de moderne mysqlnd. De melding is informatief. Het bevestigt dat WP Cerber blijft werken via een compatibele fallback en adviseert om mysqlnd in te schakelen voor volledige compatibiliteit en betere prestaties. Dit geeft u een concrete, bruikbare diagnose die u aan uw hostingprovider kunt voorleggen.

Wijzigingen in beveiliging en toegangscontrole

Verbeterde detectie van versleutelde JavaScript in de Traffic Inspector

De Traffic Inspector controleert openbare aanvraagvelden op versleutelde JavaScript-code. Deze release dicht diverse hiaten in de dekking en omzeilt methoden in die detector, terwijl het model met een laag aantal valse positieven behouden blijft.

Bredere dekking van escape-sequenties. De detector herkende voorheen alleen \xNN hex escapes in volledig ontsnapte strings. Nu detecteert hij ook \uNNNN en \u{...} Unicode escapes, inclusief strings die de ondersteunde formaten combineren. Decodering is beperkt tot ASCII-codepunten en gedeeltelijke escapes en willekeurige expressies blijven bewust buiten het bereik om valse positieven te voorkomen.

Detectie van primitieven die verborgen zitten in fromCharCode()-aanroepen. Payloads die worden gedecodeerd uit expliciete String.fromCharCode() constructies worden nu gecontroleerd op uitvoerings-, DOM-, netwerk- en systeemprimitieven, en niet alleen op externe URL's en IP-adressen. Decodering is beperkt tot gevalideerde decimale en hexadecimale literals, ondersteunt meerdere aanroepen, hoofdletters 0X prefixen en optionele afsluitende komma's, en past de JavaScript ToUint16-semantiek toe, zodat gedecodeerde waarden overeenkomen met wat een browser daadwerkelijk zou produceren. Tokenbewuste primitieve matching met identificatiegrenzen betekent dat gewone woorden zoals "description" en "evaluation" niet langer worden gematcht op de eval of script subtekenreeksen.

Beperking van het omzeilen van de detectie van ingekapselde gehele getallen. String.fromCharCode() past ToUint16 toe op elk argument, waardoor een ASCII-code plus een veelvoud van 65536 hetzelfde teken oplevert. De detector accepteerde voorheen alleen letterlijke waarden tot zes cijfers, wat betekende dat ingekapselde waarden van zeven of meer cijfers de detectie volledig omzeilden. De detector accepteert nu niet-ondertekende decimale en hexadecimale letterlijke waarden tot JavaScript's Number.MAX_SAFE_INTEGER en reduceert elk token deterministisch tot de ToUint16-code-eenheid, onafhankelijk van de grootte van het gehele getal op het platform. De tokenlengte wordt tijdens de conversie begrensd, zodat een te grote letterlijke waarde geen onbeperkte berekeningen per cijfer kan uitvoeren op een openbaar verzoek, waardoor een potentieel DoS-risico wordt weggenomen.

Geen onderdrukking meer door een enkel ongeldig token. Voorheen zorgde één ongeldig of dubbelzinnig token ervoor dat de hele gedecodeerde oproep werd geweigerd, waardoor een aanvaller een enkele niet-ondersteunde waarde aan een verder detecteerbare payload kon toevoegen en de detectie kon onderdrukken. Een structureel geldig maar niet-ondersteund token wordt nu toegewezen aan een sentinel-teken en de rest van de oproep wordt nog steeds gedecodeerd. De hele oproep wordt alleen overgeslagen als de argumentenlijst onjuist of niet-numeriek is.

Door commentaren gescheiden gegevens zijn geen blinde vlek meer. De inputcompactie van de detector verwijderde alleen algemene witruimte, waardoor JavaScript-commentaren intact bleven en door commentaren gescheiden numerieke argumenten zoals String.fromCharCode(101,/*x*/118,97,108,40,49,41,59) de detectie konden omzeilen. De detector verwijdert nu JS-blokcommentaren, regelcommentaren en lexicale witruimte buiten geciteerde strings voordat de heuristieken worden uitgevoerd, en verwerkt argumentenlijsten die meerdere regels beslaan.

Voor een WordPress-site-eigenaar is het praktische resultaat duidelijk: verschillende realistische technieken die een aanvaller zou kunnen gebruiken om versleutelde JavaScript langs de Traffic Inspector te smokkelen, werken niet meer, en de detector blijft voorzichtig genoeg om legitiem verkeer niet als verdacht aan te merken.

Verbeteringen in betrouwbaarheid

Compatibiliteit met oudere databasestuurprogramma's

WP Cerber werkt nu correct op hostingomgevingen waar PHP de moderne mysqlnd-databasedriver niet ondersteunt. De databaselaag controleert of mysqli_fetch_all() beschikbaar is voordat de snelle mysqlnd-methode wordt gebruikt. Als deze niet beschikbaar is, worden de resultaten rij voor rij opgehaald via een compatibele methode, waarbij de volgorde van de rijen, de structuur van de resultaten en het bestaande foutafhandelingscontract behouden blijven. In plaats van een fatale fout krijgt u een langzamere, maar volledig functionele terugvaloptie, plus de hierboven beschreven waarschuwing.

Bugfixes

Fatale fout op sites met beschadigde instellingen (PHP 8)

Een beschadigde, niet-deserialiseerbare configuratiewaarde in de database veroorzaakte een fatale TypeError in array_merge() tijdens het laden van de plugin op PHP 8, waardoor de hele site platlag. Bij het laden van de instellingen wordt de opgeslagen waarde nu gevalideerd en wordt teruggevallen op de standaardinstellingen als deze niet kan worden geparseerd. De fout wordt geregistreerd als een persistent kritiek probleem en wordt automatisch opgelost wanneer de beheerder de instellingen opnieuw opslaat. Het corruptieprobleem treedt alleen op wanneer een niet-lege opgeslagen waarde daadwerkelijk niet kan worden gedeserialiseerd; een lege waarde, wat simpelweg betekent dat de instellingen nog niet bestaan, veroorzaakt dus nooit een vals alarm. In combinatie met de nieuwe back-up- en herstelfunctie verandert dit een scenario dat een site zou laten crashen in een scenario dat zichzelf herstelt.

Fatale fout op hosts zonder mysqlnd

De databaselaag roept mysqli_result::fetch_all() aan, waarvoor de mysqlnd-driver vereist is en die niet beschikbaar is op hosts die mysqli gebruiken met libmysqlclient, wat een fatale fout veroorzaakt. Het snelle pad is nu beveiligd en valt terug op het rij-voor-rij ophalen van gegevens, zoals beschreven in het gedeelte over betrouwbaarheid hierboven.

Regressie in de detectie van hexadecimaal ontsnapte JavaScript-code

Een fout in de detector voor versleutelde JavaScript-bestanden zorgde ervoor dat strings die uitsluitend uit \xNN -sequenties bestonden, niet konden worden gedecodeerd. De normalisatiestap gebruikte trim() met een tekenmasker dat de voorloop-backslash van de eerste escape-sequentie samen met het openingsaanhalingsteken verwijderde, waardoor een oneven lengte string ontstond die vervolgens door de decoderingsbeveiliging werd overgeslagen. Als gevolg hiervan werden hex-escaped primitieve tekens zoals eval , script en XMLHttpRequest niet gedetecteerd op het standaard ingeschakelde aanvraagveldpad van Traffic Inspector. De decodering werkt nu correct, waardoor de detectie van deze versleutelde primitieve tekens is hersteld.

Omzeilen via commentaar-gescheiden fromCharCode-argumenten

Geldige, door commentaar gescheiden numerieke argumenten in fromCharCode() -aanroepen werden niet gedetecteerd omdat JavaScript-commentaren intact bleven tijdens de invoercompactie. Dit is verholpen zoals beschreven in het beveiligingsgedeelte hierboven.

Samenvatting

Versie 9.9 is een release die u hopelijk nooit zult merken, en dat is precies de bedoeling. Uw instellingen blijven nu intact, zelfs bij corruptie van de database, in plaats van te verdwijnen. Een eigenaardigheid van de hostingomgeving die de plugin voorheen deed crashen, werkt nu soepeler en geeft precies aan wat u bij uw hostingprovider moet laten oplossen. Voor de beheerder blijft de dagelijkse ervaring hetzelfde vertrouwde dashboard, dat draait op een basis die zelfstandig herstelt van storingen en verdacht verkeer met minder blinde vlekken inspecteert.


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.