
CVE-2024-29296 - Benutzerenumeration in Portainer CE - 2.19.4
Eine Schwachstelle zur Benutzer-Enumeration wurde in Portainer CE 2.19.4 gefunden. Dieses Problem tritt während des Benutzerauthentifizierungsprozesses auf, wobei ein Unterschied in der Antwortzeit es einem entfernten, nicht authentifizierten Benutzer ermöglichen könnte, festzustellen, ob ein Benutzername gültig ist oder nicht.
Diese Schwachstelle wurde mit dem Issue #11736 von Portainer behoben, das mit den Versionen 2.19.5 und 2.20.2 von Portainer CE ausgeliefert wurde.
Ich entdeckte diese Schwachstelle, als ich versuchte, einen Password-Spray-Angriff auf der Anmeldeseite einer Portainer-Instanz durchzuführen. Ich übermittelte mehrere Anfragen mit verschiedenen Benutzernamen und Passwörtern an das Anmeldeformular der Portainer-Anwendung.
Unabhängig von der Existenz des Benutzers antwortet das Backend der Portainer-Anwendung mit demselben HTTP-Statuscode, wenn die Kombination aus Benutzername und Passwort nicht korrekt ist. Dies entspricht dem besten Ansatz, um Versuche, gültige Benutzer zu enumerieren, zu verhindern – oder zu erschweren.
Bei der Betrachtung der Ergebnisse meines Password-Sprays fiel mir jedoch auf, dass die Anmeldeversuche für einige Benutzernamen durchschnittlich eine bestimmte Zeit in Anspruch nehmen, während Anmeldeversuche für andere Benutzernamen durchschnittlich deutlich länger dauern.
Das System muss die Gültigkeit des Passworts für vorhandene Benutzer überprüfen, muss dies aber nicht, wenn der Benutzername von vornherein ungültig ist. Daher nahm ich an, dass die auffällige Veränderung der durchschnittlichen Anmeldezeit damit zusammenhängt. Ich installierte daraufhin eine lokale Kopie von Portainer CE 2.19.4 und versuchte, das Verhalten zu reproduzieren – mit demselben Ergebnis.
Dies ist das von mir gesendete Anfrageformat. Die Felder für Benutzername und Passwort wurden ausgewählt, um die Payloads einzufügen.

Dies waren die Benutzer, die ich in das Benutzernamenfeld eingetragen habe. Für diesen Test waren nur die Benutzer 'admin' und 'felipe' gültig. Alle anderen Benutzernamen auf der Liste entsprachen keinen vorhandenen Benutzern.

Und dies waren die Passwörter, die ich in das Passwortfeld eingetragen habe.

Für jedes eindeutige Benutzername-Passwort-Paar wurde eine Anfrage an den Server gesendet. Die Ergebnisse sind unten dargestellt.

Wenn ein Benutzername einem vorhandenen Benutzer entspricht, dauern die Anmeldeversuche durchweg und auffällig länger als Anmeldeversuche für nicht vorhandene Benutzer.
Das bedeutet, dass das System von Portainer in dieser Version anfällig für die Enumeration gültiger Benutzer ist – indem ein Angreifer die Zeit betrachtet, die das Backend für die Beantwortung von Anmeldeversuchen benötigt, kann er die Benutzer der Anwendung enumerieren.