Umsetzungsstand und Härtungsverlauf
Wartungsaufzeichnung. Sie hält fest, welcher Stand umgesetzt ist, was die Sicherheits-Härtung ausgelöst hat und welche Angaben früher hier standen und nicht mehr zutreffen. Für eine Aufgabe brauchen Sie diese Seite nicht — dafür gibt es Identity.
Status
Angenommen. Beschreibt den Stand des Pakets und den Verlauf, der zu ihm geführt hat.
Kontext und Verlauf
enforce_login) und Email-Methode (allow_email_method) sind beide standardmäßig
deaktiviert (Kill-Switch-Prinzip, siehe Technische Referenz: Konfiguration).
Seit dem 4. August 2026 heißt die Einlöse-Adresse do=wkidentity_otp. Sie hieß bis dahin
do=wvdsotp und trug damit als einzige lebende Stelle dieses Pakets noch das Präfix von vor der
Umbenennung — beide Umbenennungs-Durchgänge hatten sie übersprungen, weil sie in der Schutzliste
des Werkzeugs fälschlich als Name eines nicht installierten Fremdpakets geführt war. Die
Adresse steht in den Links, die mit jedem Code verschickt werden; umbenannt wurde sie zu einem
Zeitpunkt, an dem kein Vorgang offen war und deshalb kein gültiger Link existierte, den das
hätte brechen können.
Das Paket heißt seit dem 3. August 2026 Identity und nicht mehr TOTP. Der Grund steht im Namen: es führt nicht nur den zweiten Faktor, sondern Anmeldung, Wiederherstellungswege und deren Erreichbarkeit. Ein Name, der das Verfahren nennt, hätte einen Gegenstand benannt, den das Paket nur noch als einen von mehreren führt.
Bis zum 4. August 2026 stand hier zusätzlich, das Plugin sei in conf/plugins.local.php
deaktiviert und das betreffe „praktisch alle wvds*-Plugins gleichzeitig„. Beides trifft nicht
mehr zu: die Datei enthält genau zwei Abschaltungen (authad und authldap), ein Präfix
wvds gibt es seit der Umbenennung nicht mehr, und dieses Plugin ist aktiv.
Seit dem 7. August 2026 bietet das Paket zusätzlich den Identity Plugin Contract v1: eine
öffentliche Fassade (helper_plugin_wkidentity_contract) plus Step-up-mit-Rücksprung
(StepUp.php), über die ein anderes Plugin eine Sitzungs-Absicherung abfragen oder anfordern
kann, ohne selbst TOTP oder Email-Einmalcodes zu bauen. Siehe Technische Referenz: Identity Plugin Contract v1.
Sicherheits-Härtung am 8. August 2026: Der Vertrag vom Vortag hatte ein eigenes
Assurance-Vokabular eingeführt, ohne zu prüfen, ob die bestehende Namespace-Durchsetzung es
tatsächlich benutzt — sie tat es nicht. enforceNamespacePolicy() prüfte weiterhin nur
isEnrolled() (eine dauerhafte Kontoeigenschaft) statt echter Sitzungs-Absicherung; bei
deaktiviertem enforce_login (Vorgabe) erreichte ein enrollter Nutzer einen pflichtigen
Namespace allein mit Kennwort, ohne in dieser Sitzung je einen Faktor bewiesen zu haben. Diese
Verwechslung ist jetzt behoben (Einzelheiten in den Konzepten), zusammen mit zwei bereits dokumentierten, jetzt geschlossenen Befunden aus
docs/threat-model.md: ein TOTP-Code ließ sich innerhalb seines Toleranzfensters mehrfach
verwenden (bis zu 90 Sekunden lang), und der gemailte Bestätigungscode lag als bloßer,
ungesalzener SHA-256-Hash ab. Zusätzlich: ein Konto kann jetzt TOTP und Email gleichzeitig
führen, und die Richtlinien-Engine berücksichtigt neben Namespace auch Gruppe und Benutzer, mit
einer dokumentierten Konfliktauflösung.
Nachträge am Admin-Bildschirm
Zwei Änderungen am Bildschirm für den zweiten Faktor, die als behobene Fehler zur Wartungsaufzeichnung gehören und nicht in die Beschreibung des Bildschirms:
Button-Farbsemantik (seit 2026-07-11): Reset (pro Zeile) und das „ד
zum Entfernen aus der „TOTP verlangt„-Liste sind rot (wt-btn–danger, destruktive
Aktionen); „Speichern“ (Namespaces-Tab) ist neutral/weiß statt wie zuvor blau hervorgehoben —
kein Button auf diesem Panel ist mehr automatisch der hervorgehobene Haupt-CTA. Der frühere
lokale –wt-*-Token-Alias-Block in admin.css wurde entfernt; jede Regel referenziert
den zentralen –wk-*-Kontrakt jetzt direkt (Details:
Contract v3).
Cache-Busting für admin.css (seit 2026-07-12):
action.php::injectAssets() verlinkte admin.css bislang ohne jeden Cache-Buster
(kein ?t=…-Query-String wie beim sitweiten tseed-Mechanismus) — ein Browser, der
diese URL bereits einmal geladen hatte, zeigte nach einer CSS-Änderung weiterhin die alte,
zwischengespeicherte Fassung, bis ein Hard-Refresh erzwungen wurde. Das war die tatsächliche
Ursache eines gemeldeten „wieder blauer Button statt weiß“ — die Farbkorrektur selbst war
bereits korrekt, nur nicht bei jedem Browser sichtbar angekommen. Fix: admin.css-Link
trägt jetzt einen mtime-basierten ?t=…-Query-String, gleiches Prinzip wie der
sitweite tseed.
Nachweis
Geprüft in Isolation gegen Attrappen und live gegen die echte Installation (angemeldete und anonyme Sitzung, getrennte Prozessläufe), nach demselben Muster wie beim Workbench-Vertrag.
Konsequenzen
enforceNamespacePolicy()darf nie wieder aufisEnrolled()allein prüfen. Eine Kontoeigenschaft beantwortet die Frage nicht, ob diese Sitzung einen Faktor bewiesen hat; genau diese Verwechslung war der Auslöser der Härtung.- Die Einlöse-Adresse
do=wkidentity_otpnicht erneut umbenennen. Sie steht in jedem verschickten Verweis; eine Umbenennung bricht jeden offenen Vorgang und ist nur dann gefahrlos, wenn keiner offen ist. - Kein Einmalcode und kein Bestätigungscode wandert zurück in eine ungesalzene Ablage. Beide liegen gesalzen gehasht; die frühere SHA-256-Ablage war ein benannter Befund.
Verwandte Themen
- wvdsentra — das Auth-Backend, von dem das Admin-Panel-Muster (Reiter, JSON-Ablage) unverändert übernommen ist. Auf dieser Installation nicht eingerichtet; die Seite beschreibt die Herkunft, kein laufendes Paket.
- Technische Referenz — der Stand, den diese Seite begründet
- Konzepte — Assurance und Richtlinien-Engine, die aus der Härtung hervorgingen