WP Cerber Security 9.9
English version: WP Cerber Security 9.9
Auf einen Blick
WP Cerber 9.9 ist da! Diese Version steht ganz im Zeichen der Ausfallsicherheit. Wir haben einen Selbstheilungsmechanismus für Ihre Plugin-Einstellungen entwickelt, mehrere Sicherheitslücken im JavaScript-Detektor des Traffic Inspectors geschlossen und eine Reihe schwerwiegender Fehler behoben, die in bestimmten Hosting-Umgebungen zum Ausfall einer Website führen konnten. Wenn Sie WP Cerber auf einer stark frequentierten Website oder auf einem älteren Hosting-Server betreiben, macht dieses Update Ihre Installation spürbar robuster.
Wichtigste Highlights
- Neu: Automatische Sicherung und Wiederherstellung der Plugin-Einstellungen mit klarer Meldung im Wiederherstellungsfall.
- Sicherheit: Mehrere Härtungsrunden für den vom Traffic Inspector verwendeten verschleierten JavaScript-Detektor, wodurch echte Umgehungsvektoren geschlossen werden.
- Zuverlässigkeit: WP Cerber funktioniert jetzt auch auf älteren Hosting-Umgebungen einwandfrei, in denen PHP nicht über den modernen mysqlnd-Datenbanktreiber verfügt.
- Fehlerbehebungen: Ein Fehler, der zum Absturz der Website durch beschädigte Einstellungen unter PHP 8 führte, wurde behoben, ebenso wie ein Fehler bei der Erkennung von hexadezimal maskiertem JavaScript.
Neue Funktionen
Automatische Sicherung und Wiederherstellung von Plugin-Einstellungen
Dies ist die wichtigste Neuerung dieser Version. WP Cerber speichert nun eine zuletzt gültige Kopie seiner Konfiguration im Key-Value-Speicher des Plugins. Diese Sicherung wird nach jeder erfolgreichen Aktualisierung der Einstellungen, jedem Import von Einstellungen, jedem Plugin-Upgrade und durch die tägliche Wartung aktualisiert. Nur gültige Konfigurationen können die bestehende Sicherung ersetzen, sodass ein fehlerhafter Zustand niemals einen gültigen überschreiben kann.
Warum ist das wichtig? Sollte die gespeicherte Plugin-Konfiguration in der Datenbank einmal unlesbar werden, erkennt WP Cerber die Beschädigung und stellt die Konfiguration automatisch aus dem Backup wieder her. So bleiben Ihre Firewall-Regeln, Zugriffslisten und Benachrichtigungseinstellungen erhalten, anstatt stillschweigend auf die Werkseinstellungen zurückgesetzt zu werden.
Der Wiederherstellungsprozess ist vollständig transparent. Jedes Ergebnis wird über den Problemmonitor des Plugins gemeldet:
- Nach einer erfolgreichen automatischen Wiederherstellung wird Ihnen eine ausblendbare Warnung angezeigt, die erklärt, was passiert ist, welche Maßnahmen ergriffen wurden und was Sie überprüfen sollten. Die Benachrichtigung verschwindet, sobald Sie Ihre Einstellungen überprüft und gespeichert haben.
- Wenn die Sicherung fehlt, ungültig ist oder die Wiederherstellung fehlschlägt, wird ein kritischer Fehler mit umsetzbaren Hinweisen und relevanten Diagnosemetadaten registriert, ohne serialisierte Einstellungen oder interne Speicherinformationen preiszugeben.
- Widersprüchliche oder doppelte Meldungen werden verhindert, sodass Sie niemals widersprüchliche Benachrichtigungen sehen.
Ist eine Wiederherstellung nicht möglich, bleibt die bestehende Ausweichfunktion für die Standardeinstellungen erhalten und wird nun in der Datenbank gespeichert, sodass das Plugin von einem deterministischen Zustand aus startet. Zudem wurde der Wiederherstellungspfad gegen veraltete Optionscaches abgesichert: Der beschädigte Wert wird explizit gelöscht, bevor der wiederhergestellte Wert geschrieben wird. Die Sicherung wird unter Umgehung des Objektcaches gespeichert und geladen, sodass nur dem dauerhaften Datenbankeintrag vertraut wird.
Hinweis für Hosts ohne den mysqlnd-Treiber
Ein neuer Hinweis im Widget „Systembereitschaft“ identifiziert Server, auf denen die PHP-Erweiterung mysqli mit der veralteten Bibliothek libmysqlclient anstatt mit der modernen Bibliothek mysqlnd kompiliert wurde. Die Meldung dient lediglich der Information. Sie bestätigt, dass WP Cerber weiterhin über einen kompatiblen Fallback funktioniert und empfiehlt, mysqlnd für volle Kompatibilität und bessere Leistung zu aktivieren. So erhalten Sie eine konkrete, umsetzbare Diagnose für Ihren Hosting-Anbieter.
Änderungen bei Sicherheit und Zugriffskontrolle
Verbesserte Erkennung von verschleiertem JavaScript im Traffic Inspector
Der Traffic Inspector untersucht öffentliche Anfragefelder auf verschleiertes JavaScript. Diese Version schließt mehrere Abdeckungslücken und Umgehungsvektoren in diesem Detektor und behält gleichzeitig sein Modell mit niedriger Falsch-Positiv-Rate bei.
Erweiterte Abdeckung von Escape-Sequenzen. Der Detektor erkannte bisher nur \xNN Hexadezimal-Escapes in vollständig maskierten Zeichenketten. Er erkennt nun auch \uNNNN und \u{...} Unicode-Escapes, einschließlich Zeichenketten, die die unterstützten Formate mischen. Die Dekodierung beschränkt sich auf ASCII-Codepunkte, und partielle Escapes sowie beliebige Ausdrücke bleiben bewusst ausgeschlossen, um Fehlalarme zu vermeiden.
Erkennung von in `fromCharCode()`-Aufrufen versteckten primitiven Datentypen. Die aus expliziten String.fromCharCode() `-Konstruktionen dekodierten Nutzdaten werden nun auf Ausführungs-, DOM-, Netzwerk- und Systemprimitive geprüft, nicht nur auf externe URLs und IP-Adressen. Die Dekodierung ist auf validierte Dezimal- und Hexadezimalliterale beschränkt, unterstützt mehrere Aufrufe, Großbuchstaben-Präfixe 0X und optionale nachfolgende Kommas und wendet die JavaScript-Semantik von `ToUint16` an, sodass die dekodierten Werte dem entsprechen, was ein Browser tatsächlich erzeugen würde. Tokenbasierter Primitivvergleich mit Bezeichnergrenzen bedeutet, dass gewöhnliche Wörter wie „description“ und „evaluation“ nicht mehr in den Teilstrings eval oder script gefunden werden.
Schutz vor umgebrochenen Ganzzahlen. String.fromCharCode() wendet `ToUint16` auf jedes Argument an, sodass ein ASCII-Code plus ein Vielfaches von 65536 dasselbe Zeichen ergibt. Der Detektor akzeptierte zuvor nur Literale mit bis zu sechs Stellen, wodurch umgebrochene Werte mit sieben oder mehr Stellen die Erkennung vollständig umgingen. Der Detektor akzeptiert nun vorzeichenlose Dezimal- und Hexadezimalliterale bis zu Number.MAX_SAFE_INTEGER von JavaScript und reduziert jedes Token deterministisch auf seine `ToUint16`-Codeeinheit, unabhängig von der Ganzzahlgröße der Plattform. Die Tokenlänge ist während der Konvertierung begrenzt, sodass ein zu großes Literal keine unbegrenzte Berechnung pro Ziffer bei einer öffentlichen Anfrage auslösen kann. Dadurch wird eine potenzielle DoS-Schwachstelle geschlossen.
Keine Unterdrückung durch ein einzelnes fehlerhaftes Token. Bisher führte ein ungültiges oder mehrdeutiges Token dazu, dass der gesamte dekodierte Aufruf verworfen wurde. Ein Angreifer konnte also einen einzelnen nicht unterstützten Wert an eine ansonsten erkennbare Nutzlast anhängen und so die Erkennung verhindern. Ein strukturell gültiges, aber nicht unterstütztes Token wird nun einem Sentinel-Zeichen zugeordnet, und der Rest des Aufrufs wird weiterhin dekodiert. Der gesamte Aufruf wird nur dann übersprungen, wenn die Argumentliste fehlerhaft oder nicht numerisch ist.
Durch Kommentare getrennte Nutzdaten stellen nun keine Schwachstelle mehr dar. Die Eingabekomprimierung des Detektors entfernte lediglich generische Leerzeichen, wodurch JavaScript-Kommentare erhalten blieben und durch Kommentare getrennte numerische Argumente wie ` String.fromCharCode(101,/*x*/118,97,108,40,49,41,59) die Erkennung umgehen konnten. Der Detektor entfernt nun JS-Blockkommentare, Zeilenkommentare und lexikalische Leerzeichen außerhalb von Zeichenketten in Anführungszeichen, bevor er seine Heuristiken ausführt, und verarbeitet Argumentlisten, die sich über mehrere Zeilen erstrecken.
Für einen WordPress-Website-Besitzer ist das praktische Ergebnis eindeutig: Mehrere realistische Techniken, mit denen ein Angreifer verschleierten JavaScript-Code am Traffic Inspector vorbeischmuggeln könnte, funktionieren nicht mehr, und der Detektor bleibt konservativ genug, um legitimen Datenverkehr nicht zu melden.
Zuverlässigkeitsverbesserungen
Kompatibilität mit älteren Datenbanktreibern
WP Cerber funktioniert nun auch in Hosting-Umgebungen korrekt, in denen PHP nicht den modernen mysqlnd-Datenbanktreiber bereitstellt. Die Datenbankschicht prüft die Verfügbarkeit von mysqli_fetch_all() bevor sie den schnellen mysqlnd-Pfad nutzt. Ist dieser nicht verfügbar, werden die Ergebnismengen zeilenweise über eine kompatible Methode abgerufen, wobei die Zeilenreihenfolge, die Ergebnisstruktur und die bestehende Fehlerbehandlung erhalten bleiben. Anstelle eines schwerwiegenden Fehlers erhalten Sie eine langsamere, aber voll funktionsfähige Ausweichlösung sowie den oben beschriebenen Hinweis.
Fehlerbehebungen
Schwerwiegender Fehler auf Websites mit beschädigten Einstellungen (PHP 8)
Ein beschädigter, nicht deserialisierbarer Konfigurationswert in der Datenbank verursachte beim Laden des Plugins unter PHP 8 einen schwerwiegenden TypeError in der array_merge() , wodurch die gesamte Website ausfiel. Beim Laden der Einstellungen wird nun der gespeicherte Wert validiert und bei einem Fehler auf die Standardeinstellungen zurückgegriffen. Der Fehler wird als persistentes kritisches Problem registriert und automatisch behoben, sobald der Administrator die Einstellungen erneut speichert. Das Problem tritt nur dann auf, wenn ein nicht leerer gespeicherter Wert tatsächlich nicht deserialisiert werden kann. Ein leerer Wert, der lediglich bedeutet, dass die Einstellungen noch nicht existieren, löst daher niemals einen Fehlalarm aus. In Kombination mit der neuen Backup- und Wiederherstellungsfunktion wird so ein Website-Absturz in ein selbstheilendes Problem verwandelt.
Schwerwiegender Fehler auf Hosts ohne mysqlnd
Die Datenbankschicht ruft mysqli_result::fetch_all() auf, die den `mysqlnd`-Treiber benötigt und auf Hosts, die `mysqli` mit `libmysqlclient` ausführen, nicht existiert. Dies führt zu einem schwerwiegenden Fehler. Der schnelle Pfad ist nun geschützt und greift auf das zeilenweise Abrufen zurück, wie im Abschnitt zur Zuverlässigkeit beschrieben.
Regression bei der Erkennung von hexadezimal maskiertem JavaScript
Ein Fehler im Detektor für verschleiertes JavaScript verhinderte die Dekodierung von Zeichenketten, die ausschließlich aus \xNN -Sequenzen bestanden. Der Normalisierungsschritt verwendete trim() mit einer Zeichenmaske, die den führenden Backslash des ersten Escape-Zeichens sowie das öffnende Anführungszeichen entfernte. Dadurch entstand eine Zeichenkette ungerader Länge, die vom Dekodierungsschutz übersprungen wurde. Infolgedessen wurden hexadezimal maskierte primitive Zeichenketten wie eval , script und XMLHttpRequest im standardmäßig aktivierten Anfragefeldpfad des Traffic Inspectors nicht erkannt. Die Dekodierung funktioniert nun korrekt und stellt die Erkennung dieser verschleierten primitiven Zeichenketten wieder her.
Umgehung durch durch Kommentare getrennte Argumente von CharCode
Gültige, durch Kommentare getrennte numerische Argumente in fromCharCode() `-Aufrufen wurden nicht erkannt, da JavaScript-Kommentare bei der Eingabekomprimierung erhalten blieben. Dies wurde, wie im obigen Abschnitt zur Sicherheit beschrieben, behoben.
Zusammenfassung
Version 9.9 ist ein Update, das Sie hoffentlich nie bemerken werden – und genau das ist der Sinn. Ihre Einstellungen bleiben jetzt auch bei Datenbankbeschädigung erhalten, anstatt verloren zu gehen. Ein Fehler in der Hosting-Umgebung, der zuvor zum Absturz des Plugins führte, wird nun elegant behoben und zeigt Ihnen genau an, was Sie von Ihrem Hoster beheben lassen müssen. Für den Administrator bleibt die gewohnte Benutzeroberfläche mit dem gewohnten Dashboard erhalten, das auf einer stabilen Basis basiert, die sich selbstständig von Fehlern erholt und schädlichen Datenverkehr mit weniger Schwachstellen analysiert.