Files
WP-LIT-MCP/docs/superpowers/notes/2026-09-30-divi-absicherung-security-audit.md
2026-09-30 03:36:25 +02:00

2.9 KiB
Raw Permalink Blame History

Divi-Absicherung – Security-Audit

Stand 2026-09-30, Branch divi-absicherung, Version 0.6.0. Durchgeführt als abschließender Gesamt-Review des Branches (903246d..35ea47d) mit Sicherheitsschwerpunkt; Korrekturen in 43c0a78, nachgeprüft.

Geprüft

  • Schreiben trotz nicht freigegebener Divi-Version: Kein Weg gefunden. Zentral lehnt DiviToolGate jedes nicht lesende Tool der Gruppen Divi, Divi-Bibliothek und Divi Theme Builder vor execute ab (ohne readonly-Annotation gilt ein Tool als schreibend). lit-content-create mit divi lehnt vor dem Anlegen des Entwurfs ab. In den Adaptern ruft jede schreibende Methode zuerst ReleaseGate::assertWritable() auf: DiviSaver::save/saveNew, DiviLibraryStore::create, alle Schreibmethoden von DiviThemeBuilder inkl. liveId(true), DiviPages::setFlags (die letzten beiden nachgezogen in 43c0a78). Ein in WriteFailed verpacktes DiviLocked wird als Sperre gemeldet.
  • Fail-closed: Ausnahme im Resolver → incompatible (geloggt); fehlende oder unlesbare fingerprints.json bzw. Divi-Dateien → rote Prüfung, nie eine Ausnahme nach außen; Divi nicht aktiv → Version leer → untested.
  • Prüfmodus: Ausnahme gilt nur für die ID der Wegwerfseite, nur während whileProbing(), wird im finally zurückgesetzt, ist nicht von außen setzbar; Aufrufe ohne Post-ID (Bibliothek, Theme Builder) sind nie ausgenommen.
  • Freigabe: nur manage_options + Nonce (check_admin_referer), nur aus frischem grünem Bericht, serverseitig gegen Divi-Version, Plugin-Version und Zustandsschlüssel geprüft; Zurückziehen nutzt die installierte Version, keine Eingabe.
  • REST-Route der Prüfung: Permission manage_options, Cookie-Anmeldung mit wp_rest-Nonce; atomare Sperre per INSERT IGNORE bzw. bedingtem UPDATE (vorbereitete Statements, Tabellenname aus $wpdb), Freigabe im finally; Fehler im Prüflauf → Hinweis statt 500-Antwort.
  • Ausgabe im Reiter: durchgehend escaped (esc_html, esc_attr, esc_url).
  • Wegwerfseite: immer endgültig gelöscht; verwaiste Seiten nur als Entwurf mit Marker und passendem Titel, älter als 10 Minuten.
  • Deinstallation: entfernt lit_mcp_divi_releases, lit_mcp_divi_check_report, lit_mcp_divi_check_lock und den Transient lit_mcp_divi_state auf jeder Website.
  • WP-CLI: --update-reference schreibt nur in einer Entwicklungskopie (mit tests/), Referenzquellen zuerst, fingerprints.json zuletzt; ein Schreibfehler lässt die Sperre unverändert.

Bewusst nicht geändert

  • Administratoren mit Anwendungspasswort können die Prüf-Route ohne Nonce aufrufen – keine Rechteausweitung, Freigeben bleibt hinter admin-post und Nonce.
  • lit-content-create-Ablehnungen stehen nicht als „abgelehnt“ im Protokoll (Fehler geht an den Client).
  • lit-site-status liest die Fingerabdrücke ohne Zwischenspeicher (selten aufgerufen).

Ergebnis

Keine kritischen oder wichtigen offenen Befunde.