Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/0xmrma/cve-2026-34828
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsAuthentifizierung
GitHub0xmrma/cve-2026-34828

CVE-2026-34828

listmonks Sitzungspersistenz nach Passwort-Reset und Passwortänderung

Repository anzeigen
1vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-34828

listmonks Sitzungspersistenz nach Passwort-Reset und Passwortänderung

Einleitung

Ich habe dieses Problem bei der Überprüfung von listmonk, einem quelloffenen Newsletter- und Mailinglisten-Manager, mit einer einfachen Sicherheitsfrage im Hinterkopf gefunden:

Wenn ein Benutzer ein Passwort ändert oder zurücksetzt, beendet die Anwendung tatsächlich bereits ausgestellte Sitzungen?

In diesem Fall lautete die Antwort nein.

Zuvor ausgestellte authentifizierte Sitzungen blieben sowohl nach:

  • Passwort-Reset
  • Passwortänderung

gültig.

Das bedeutete, dass ein gestohlenes Sitzungscookie genau die Sicherheitsereignisse überleben konnte, auf die sich Benutzer verlassen, um ihr Konto wiederherzustellen.

Das Problem wurde akzeptiert und als CVE-2026-34828 zugewiesen.

Projekt: listmonk auf GitHub
CVE: CVE-2026-34828

Dies betraf listmonk, ein weit verbreitetes Projekt mit 5M+ Docker-Pulls.

photo0

Angriffskette

gestohlene authentifizierte Sitzung → Opfer setzt Passwort zurück oder ändert es → alte Sitzung bleibt gültig → Angreifer behält Kontozugriff nach der Wiederherstellung der Anmeldedaten


Was listmonk tut

listmonk ist ein selbst gehosteter Mailinglisten- und Newsletter-Manager.

Es bietet:

  • Admin-Authentifizierung
  • Benutzerverwaltung
  • Kampagnenerstellung
  • Abonnentenverwaltung
  • SMTP- und Betriebseinstellungen
  • browserbasierte Verwaltung

Das bedeutet, dass sein Sitzungsmodell eine echte Sicherheitsgrenze darstellt.

Die wichtige Frage hier war nicht, ob listmonk das Zurücksetzen von Passwörtern unterstützt.

Die eigentliche Frage war:

Setzt ein Passwort-Reset oder eine Passwortänderung tatsächlich die Persistenz des Angreifers außer Kraft, wenn eine Sitzung bereits gestohlen wurde?

In diesem Fall tat es das nicht.


Warum dieser Fehler einen Blick wert war

Viele Sicherheitsüberprüfungen konzentrieren sich zu eng auf Login-Bypasses und offensichtliche Privilegieneskalation.

Dadurch wird eine wichtige Klasse von Schwachstellen übersehen:

Fehler bei der Wiederherstellung

Wenn ein Benutzer ein Passwort ändert oder zurücksetzt, soll diese Aktion eine Bedeutung haben.
Sie soll das Vertrauen in ältere Anmeldedaten und alten Authentifizierungsstatus verringern.

Wenn ein Angreifer bereits eine gültige Sitzung hat und diese Sitzung das Wiederherstellungsereignis überlebt, dann hat das Opfer das Konto nicht wirklich vollständig wiederhergestellt.

Genau das war hier das Problem.

Dies war kein Login-Validierungsfehler. Es war kein Krypto-Problem. Es war kein Fehler beim Passwort-Hashing.

Es war ein Fehler im Sitzungslebenszyklus:

  • Passwortstatus geändert,
  • Kontowiederherstellung erfolgt,
  • aber alte Sitzungen wurden weiterhin vertraut.

Das reicht aus, um eine echte Schwachstelle zu erzeugen.


Die Grenze, auf die ich mich konzentriert habe

Ich bin nicht an listmonk herangegangen, indem ich zufällig Endpunkte angegriffen habe und hoffte, dass einer umkippt.

Der stärkere Weg bestand darin, zuerst die Vertrauensgrenze mit dem höchsten Wert zu identifizieren.

Bei stark authentifizierungsintensiver Software ist eine der besten Grenzen, die man testen kann, diese:

Widerrufen sicherheitsrelevante Kontenänderungen zuvor vertraute Sitzungen?

Diese Frage wird normalerweise interessant bei:

  • Passwort-Reset
  • Passwortänderung
  • 2FA-Änderungen
  • Kontowiederherstellungsabläufen

Bei listmonk kam das stärkste Signal von den ersten beiden.

Dort wurde das Problem deutlich.


Grundursache

Der Fehler bestand nicht darin, dass Passwortänderungen fehlschlugen.

Der Fehler bestand darin, dass Sitzungen sie überlebten.

Aus der Quellcode-Überprüfung ergab sich folgender Ablauf für den Passwort-Reset:

  • ein einmaliges Reset-Token wurde generiert und validiert,
  • das Passwort wurde aktualisiert,
  • eine neue Sitzung wurde erstellt,

aber es gab keine sichtbare Sperrung älterer Sitzungen.

Dasselbe Muster trat beim authentifizierten Passwortänderungsablauf auf:

  • das Passwort wurde aktualisiert,
  • aber ältere, bereits ausgestellte Sitzungen wurden nicht ungültig gemacht.

Dieses Verhalten stimmte genau mit den Live-Ergebnissen überein.

Relevante Codebereiche, die ich überprüft habe, waren:

  • cmd/auth.go für das Verhalten bei „Passwort vergessen“/Reset
  • cmd/users.go für authentifizierte Profilaktualisierungen
  • internal/core/users.go für die Verarbeitung von Passwortaktualisierungen

Warum dies ausnutzbar ist

Weil Sitzungsdiebstahl eine reale Angriffsbedingung ist.

Sobald ein Angreifer auf irgendeine Weise ein gültiges authentifiziertes Sitzungscookie erlangt, etwa durch:

  • Kompromittierung des Browsers
  • Malware
  • Zugriff auf gemeinsam genutzte Workstations
  • XSS in einer anderen Komponente
  • Proxy- oder Debugging-Leaks
  • versehentliche Offenlegung von Cookies

sollte das Opfer in der Lage sein, diese Persistenz des Angreifers durch Ändern oder Zurücksetzen des Passworts zu beenden.

Hier konnten sie es nicht.

Die Angriffskette war unkompliziert:

  • Angreifer hat ein gültiges Sitzungscookie
  • Opfer führt einen Passwort-Reset oder eine Passwortänderung durch
  • altes Passwort wird ungültig
  • neues Passwort funktioniert
  • die alte Sitzung des Angreifers authentifiziert weiterhin erfolgreich

Das ist die gesamte Schwachstelle.


Warum dies ein Sicherheitsproblem ist und nicht nur Anwendungsverhalten

Der wichtige Unterschied ist die Persistenz nach der Wiederherstellung.

Viele Anwendungen behandeln die Passwortänderung als reines Ereignis auf Anmeldedatenebene. Das ist nicht genug.

Die eigentliche Frage ist nicht:

„Hat sich der Passwortwert im Speicher geändert?“

Die eigentliche Frage ist:

„Wurde die Vertrauensbeziehung, die an ältere Sitzungen gebunden ist, widerrufen?“

In listmonk wurde sie nicht widerrufen.

Das verwandelt das, was eine gewöhnliche Kontowartung hätte sein können, in eine unvollständige Sicherheitswiederherstellung.

Das ist der Unterschied zwischen:

  • gewöhnlicher Sitzungskontinuität
  • und einer echten Sicherheitsschwäche

PoC

Ich habe das Problem in zwei separaten Abläufen validiert.

Fall 1: Passwort-Reset widerruft bestehende Sitzungen nicht

Zuerst erstellte ich einen normalen Testbenutzer und meldete mich an, wobei ich das authentifizierte Sitzungscookie speicherte.

Dann löste ich den „Passwort vergessen“-Ablauf aus, erfasste den Reset-Link und setzte das Passwort zurück.

Nach dem Reset:

  • das alte Passwort funktionierte nicht mehr
  • das neue Passwort funktionierte
  • aber das alte Sitzungscookie von vor dem Reset authentifizierte weiterhin erfolgreich

Eine repräsentative Validierungsanfrage sah so aus:

root@kitploit:~
GET /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<old_pre_reset_session>

Und der Server gab weiterhin zurück:

root@kitploit:~
HTTP/1.1 200 OK
Content-Type: application/json

mit dem authentifizierten Profil.

Das untermauerte die Kernaussage:

  • Wiederherstellung abgeschlossen,
  • Anmeldedaten geändert,
  • aber das bestehende Sitzungsvertrauen blieb intakt.

Fall 2: Passwortänderung widerruft parallele aktive Sitzungen nicht

Anschließend validierte ich dieselbe Fehlerklasse im authentifizierten Passwortänderungsablauf.

Ich meldete mich zweimal als derselbe Benutzer an und speicherte zwei gültige authentifizierte Sitzungen:

  • Sitzung A
  • Sitzung B

Mit Sitzung A änderte ich das Passwort über den Profilaktualisierungs-Endpunkt.

Beispielanfrage:

root@kitploit:~
PUT /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<session_A>
Content-Type: application/json

{
  "name":"victim1",
  "email":"[email protected]",
  "password":"VictimChanged123"
}

Danach:

  • das alte Passwort funktionierte nicht mehr
  • das neue Passwort funktionierte
  • aber Sitzung B blieb gültig

Eine Folgeanfrage mit Sitzung B gab weiterhin authentifizierte Daten von /api/profile zurück.

Das bewies, dass das Problem nicht auf den „Passwort vergessen“/Reset-Pfad beschränkt war.
Es betraf auch normale authentifizierte Passwortänderungen.


Warum die beiden Reproduktionen wichtig sind

Eine Reproduktion hätte bereits ausgereicht, um ein Problem zu zeigen.

Aber die Validierung beider Abläufe war aus zwei Gründen wichtig.

Erstens

Es zeigte, dass der Fehler nicht auf einen einzelnen Randfall-Wiederherstellungspfad isoliert war.

Dieselbe Sicherheitseigenschaft versagte bei:

  • nicht authentifiziertem, wiederherstellungsgesteuertem Passwort-Reset
  • authentifizierter Passwortänderung während der Sitzung

Zweitens

Es machte es schwerer, das Problem als versehentliche Geschäftslogik abzutun.

Dies war eindeutig eine breitere Schwäche im Sitzungsmanagement:

  • Passwortstatus geändert,
  • aber bestehende Sitzungen blieben vertrauenswürdig.

Das verlieh dem Problem ein viel stärkeres sicherheitstechnisches Gewicht.


TOTP-Validierung

Ich habe den Reset-Ablauf auch mit einem TOTP-aktivierten Konto getestet, weil ich wissen wollte, ob ein Passwort-Reset die 2FA-Erwartungen stillschweigend schwächt oder umgeht.

Was ich bestätigt habe:

  • Passwort-Reset war weiterhin erfolgreich
  • TOTP blieb aktiviert
  • eine neue Anmeldung mit dem neuen Passwort leitete weiterhin zum 2FA-Schritt weiter
  • dies war also kein direkter 2FA-Bypass

Das war eine nützliche Grenzüberprüfung.

Sie grenzte das Problem korrekt ein.

Die Schwachstelle war nicht:

  • „Passwort-Reset deaktiviert TOTP“
  • oder „Passwort-Reset umgeht TOTP“

Das eigentliche Problem blieb:

  • bereits ausgestellte Sitzungen überlebten weiterhin sensible Kontosicherheitsänderungen

Das ist ein saubererer und besser verteidigbarer Befund.


Schweregrad und Klassifizierung

Dieses Problem wurde angemessen als Hoch eingestuft.

Die Hauptauswirkung hier ist dauerhafter unbefugter Zugriff nach Maßnahmen zur Wiederherstellung der Kontosicherheit.

Die Advisory-Klassifizierung war:

  • CWE-613: Unzureichender Sitzungsablauf (Insufficient Session Expiration)
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N

Das ergibt Sinn.

Die Behauptung ist nicht, dass ein Angreifer sich ohne Anmeldedaten von Grund auf anmelden kann. Die Behauptung ist, dass ein Opfer, sobald ein Angreifer eine gültige authentifizierte Sitzung erlangt hat, diesen Zugriff nicht vollständig beenden kann, indem es genau die Sicherheitsmaßnahmen durchführt, die das Konto wiederherstellen sollen, nämlich Passwort-Reset und Passwortänderung.

Das ist eine echte und verteidigbare Schwachstelle im Sitzungsmanagement.


Warum es sich dennoch lohnte, dies zu melden

Manche Leute unterschätzen Sitzungspersistenzfehler, weil sie annehmen, dass Sitzungsdiebstahl bereits „Game Over“ ist.

Das ist zu vereinfachend.

Die eigentliche Frage ist, was nach dem Moment passiert, in dem das Opfer merkt, dass etwas nicht stimmt, und handelt.

Wenn:

  • das Opfer das Passwort zurücksetzt,
  • oder es manuell ändert,
  • und der Angreifer seine gestohlene Sitzung trotzdem behält,

dann ist die Kontowiederherstellung unvollständig.

Das ist nicht nur unbequemes Verhalten. Das ist ein Sicherheitsfehler im Wiederherstellungsmodell.

Besonders auf einer administrativ ausgerichteten Plattform ist das ein bedeutendes Problem mit starker Vertraulichkeitswirkung.


Analyse der Behebung

Der Maintainer hat das Problem in folgendem Commit behoben:

root@kitploit:~
db82035

Die Kernrichtung der Behebung ist genau das, was dieser Fehler brauchte:

  • ältere Sitzungen nach einem Passwort-Reset ungültig machen
  • ältere Sitzungen nach einer Passwortänderung ungültig machen

Das ist die korrekte Abhilfe, weil sie auf die eigentliche Sicherheitseigenschaft abzielt, die versagt hat:

älteres Vertrauen sollte sterben, wenn sich Anmeldedaten ändern

Eine gute Behebung für diese Fehlerklasse dreht sich nicht um die Änderung der Passwortvalidierung. Es geht darum, zuvor aktiven Sitzungszustand zu widerrufen, der mit dem Konto verbunden ist.

Das ist der Teil, der die tatsächliche Wiederherstellung wiederherstellt.


Offenlegung

Dieses Problem wurde privat über den Sicherheitsmeldeablauf von GitHub gemeldet.

Der Maintainer:

  • prüfte den Bericht
  • akzeptierte ihn als Sicherheitsproblem
  • patchte das Verhalten
  • und das Problem wurde zugewiesen:

CVE-2026-34828

Eine Sache, die während der Bearbeitung des Advisories aufkam, war der Umfang.

Der ursprüngliche Bericht umfasste beides:

  • Sitzungspersistenz beim Passwort-Reset
  • Sitzungspersistenz bei der Passwortänderung

GitHub behandelte diese zunächst als unabhängig voneinander behebbare Probleme für die CVE-Zuweisung. Das ist eine nützliche Erinnerung daran, dass der Advisory-Umfang wichtig ist, selbst wenn die zugrunde liegende Schwäche konzeptionell ähnlich ist.

Das Endergebnis war CVE-2026-34828.


Was dieser Fehler tatsächlich lehrt

Die wichtigste Lektion hier ist einfach:

Das Ändern von Anmeldedaten reicht nicht aus, wenn altes authentifiziertes Vertrauen noch lebendig ist.

Viele Entwickler denken in Begriffen von:

  • Passwortkorrektheit
  • Token-Korrektheit
  • Login-Erfolg
  • Reset-Token-Gültigkeit

Diese Dinge sind wichtig.

Aber die eigentliche Sicherheitsgrenze ist breiter:

Wenn ein Hochrisiko-Kontoereignis eintritt, welcher zuvor vertraute Zustand muss aufhören, vertrauenswürdig zu sein?

In diesem Fall hätte die Antwort lauten sollen:

  • alte Sitzungen

Und listmonk tat das nicht.

Das ist die eigentliche Erkenntnis.


Kernpunkte

  • der Sitzungswiderruf ist Teil der Sicherheit der Kontowiederherstellung
  • ein Passwort-Reset sollte zuvor ausgestellte Sitzungen nicht am Leben lassen
  • eine Passwortänderung sollte parallele aktive Sitzungen nicht am Leben lassen
  • Sitzungsdiebstahl bleibt bedeutsam, wenn Wiederherstellungsereignisse Vertrauen nicht widerrufen
  • das Testen mehrerer verwandter Abläufe macht einen Bericht stärker
  • das Eingrenzen weg von falschen Spuren wie 2FA-Bypass hilft, den Befund sauber zu halten

Schlusswort

Bei dieser Schwachstelle ging es nicht um ausgefallene Payloads oder clevere Parser-Tricks.

Es ging darum, die richtige Vertrauensgrenzen-Frage zu stellen.

In listmonk änderte sich das Passwort.
Die Wiederherstellungsaktion wurde abgeschlossen.
Aber die alte Sitzung des Angreifers lebte weiter.

Deshalb wurde daraus CVE-2026-34828.

photo0
Tool herunterladen