Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-38297 — سيناريو إثبات المفهوم لاستغلال CVE2021-38297 تجاوز سعة المخزن المؤقت في GO WASM | Kitploit
أدوات/GitHubGitHub/gkrishnan724/cve-2021-38297
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبCTFالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHubgkrishnan724/cve-2021-38297

CVE-2021-38297

سيناريو إثبات المفهوم لاستغلال CVE2021-38297 تجاوز سعة المخزن المؤقت في GO WASM

عرض المستودع
8145منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

استغلال CVE-2021-38297: ثغرة في تجاوز سعة المخزن المؤقت لـ GO Wasm

نظرة عامة على الثغرة

تعمل WebAssembly (WASM) كتنسيق تعليمات ثنائي قابل للتنفيذ في معظم متصفحات الويب الحديثة. وهي بمثابة هدف ترجمة للعديد من اللغات عالية المستوى مثل C و C++ و Rust و GO، مما يسمح بكتابة الكود بهذه اللغات وترجمته إلى WASM.

يسلط CVE-2021-38297 الضوء على خطأ خطير داخل عملية ترجمة GO وتحميل ثنائيات WASM المترجمة بواسطة GO. توجد الثغرة في محمل JS wasm (wasm_exec.js) المقدم من GO، والذي يتيح تحميل ثنائيات WASM مع بيانات غير مقيدة في وسيطة argv. نظرًا لأن argv مخزنة في الذاكرة الخطية لـ WASM، يمكن للجهات الخبيثة استغلال ذلك لاستبدال الذاكرة الخطية لبرنامج WASM المترجم بواسطة GO بإدخال argv كبير بشكل مفرط.

استمرت هذه الثغرة في إصدارات GO السابقة لـ 1.17.2.

التطبيق القابل للاستغلال: Vuln-Twitter

يُظهر هذا البرهان على المفهوم تطبيقًا للتواصل الاجتماعي، Vuln-Twitter، يسمح لعدة مستخدمين بنشر المحتوى والتعليقات. خادم الويب، المبني على Node.js، يستخدم SQLite لتخزين بيانات المنشورات والتعليقات.

يستخدم الواجهة الأمامية JS بسيطة إلى جانب وحدة GO WASM باسم . تعرض هذه الوحدة طرقًا مثل ، والتي تحول سلاسل الإدخال إلى "LeetSpeak" (على سبيل المثال، "Hello!" تصبح "h3ll0!").

wordprocessor.wasm
toLeetSpeak

تساعد وحدات GO WASM في عرض المنشورات والتعليقات بلغة LeetSpeak.

واجهة مستخدم Vuln twitter

استغلال تجاوز سعة المخزن المؤقت

أثناء عملية العرض في الواجهة الأمامية، عند استلام المنشورات والتعليقات من الخادم، يخضع كل تعليق للعرض إلى "LeetSpeak" باستخدام وحدة GO WASM. يتم تمرير التعليق الخاص بكل منشور كجزء من متغير argv بعد تحميل وحدة GO WASM.

علاوة على ذلك، توجد طريقة، processSharedVar()، في وحدة GO، مصممة لقراءة السلسلة الموجودة في العنوان 0x5000 وتحويلها إلى كلام مبسط (على سبيل المثال، "How are you?" تصبح "How r u?"). يتم إضافة المنشور الأصلي صراحةً إلى 0x5000 في الذاكرة الخطية ليتم الوصول إليها بواسطة هذه الطريقة، مما يغير محتوى المنشور.

راجع قسم الكود الذي يفعل نفس الشيء:

منطق العرض

رسم تخطيطي للذاكرة الخطية لـ WASM عند عرض تعليق:

ذاكرة منطق العرض

تقنية الاستغلال

باختصار:

  1. تقوم الواجهة الأمامية بعرض كل منشور وتعليقاته.
  2. أثناء العرض، يتم تحميل وحدة GO WASM، ومعالجة التعليقات عبر متغير argv والمنشورات في عنوان الذاكرة 0x5000.
  3. يتم استخدام وظائف مثل toLeetSpeak و processSharedVar لمحتوى التعليق والمنشور، على التوالي.

بالنظر إلى عدم وجود فحوصات للحجم في argv بناءً على CVE-2021-38297، يظهر تهديد محتمل. إذا قام مستخدم ضار بالتعليق بتعليق كبير الحجم على منشور لا يملكه، فسيتم تمرير هذا التعليق عبر argv أثناء العرض. نظرًا لعدم وجود حد للحجم، يصبح المحتوى الموجود في العنوان 0x5000 (الذي يمثل المنشور الأصلي) عرضة للاستبدال.

من خلال استغلال هذا العيب، يقوم المستخدم الضار بتغيير محتوى المنشور الأصلي فعليًا، على غرار هجوم Stored XSS. بعد ذلك، عندما يشاهد الآخرون الصفحة، يتم عرض المحتوى المعدل، ويستمر ذلك بواسطة منطق الواجهة الأمامية المشترك المطبق على عرض الجميع، مما يؤدي إلى ظهور المنشور المستبدل للجميع.

تدفق الاستغلال

إعادة إنتاج الاستغلال

ملاحظة: لإعادة الإنتاج، تحتاج إلى تثبيت إصدار go go1.17.1 محليًا، وهو الإصدار القابل للاستغلال المستخدم في هذا السيناريو. يمكنك الرجوع إلى وثائق go الرسمية حول كيفية تثبيت إصدارات go محددة.

الآن دعنا نحاول إعادة إنتاج السيناريو أعلاه:

  1. لإعداد التطبيق بأكمله، أولاً استنسخ المشروع: git clone [email protected]:gkrishnan724/CVE-2021-38297.git && cd vuln-twitter
  2. قم بتشغيل npm install لتثبيت جميع التبعيات
  3. قم بتشغيل npm run resetDB والذي سيهيئ قاعدة البيانات ببعض المنشورات والتعليقات.
  4. قم بتشغيل npm run dev والذي سيبدأ الخادم المحلي، وافتح localhost:3000 في متصفح وستتمكن من رؤية صفحة تسجيل الدخول.

الآن، دعنا نسجل الدخول بحساب ضار باستخدام بيانات الاعتماد اسم المستخدم: I_CANT_HACK، كلمة المرور: hacker، بمجرد تسجيل الدخول، يجب أن تتمكن من رؤية الخلاصة مع بعض المنشورات.

هذا المنشور يبدو مثيرًا للاهتمام:

Amazon: ready 4 black friday? https://www.amazon.com/blackfriday

ماذا لو، باستخدام التقنية أعلاه، تمكنا من استبدال المنشور من Amazon.com، للإشارة إلى رابط ضار؟.

راجع ملف exploit.txt، يحتوي هذا على التعليق المليء بحشو من حروف "A" بحيث نستبدل كل شيء حتى العنوان 0x5000، في النهاية يمكنك رؤية النص ready for black friday? https://evil.com/blackfriday إذا قمنا بنسخ هذا النص والتعليق على المنشور أعلاه. يجب أن نتمكن من استبدال المنشور الأصلي بالنص أعلاه.

جربها بنفسك وانظر :)

الاستغلال

التصحيح

في هذا التطبيق، قمت أيضًا بتوفير سكربت تصحيح. والذي يستخدم إصدارًا أحدث من go:

  1. قم بتشغيل الهدف npm run patchServer

يجب أن يعيد هذا ترجمة ملف go بالإصدار الجديد ويبدأ الخادم بالإصدار المصحح

يجب أن تلاحظ الآن أن المنشور لا يتم استبداله، وإذا لاحظت وحدة التحكم، نرى خطأ بدلاً من ذلك Argument length too long.

التصحيح

الخاتمة

لقد أظهرنا سيناريو حيث استخدام تجاوز سعة المخزن المؤقت لـ WASM على الذاكرة الخطية سمح لنا بتنفيذ هجوم Stored XSS. ومع ذلك، من الضروري ملاحظة خصوصية هذا الاستغلال: فهو يتطلب منا التلاعب بنص في عنوان محدد مسبقًا في الذاكرة الخطية. في تطبيقات الويب العملية، قد يكون اكتشاف مثل هذه الثغرات صعبًا للغاية بسبب هذا المستوى من الخصوصية. علاوة على ذلك، فإن استبدال البيانات العشوائية في الذاكرة الخطية دون التسبب في تعطل النظام أمر معقد، خاصة عند التعامل مع الوحدات والبيانات الداخلية لـ GO، ويرجع ذلك إلى حد كبير إلى نقص التوثيق الشامل لتخطيط ذاكرة GO.

بناءً على فهمنا، نعتقد أن تخطيط الذاكرة الخطية لـ GO موضح أدناه:

تخطيط ذاكرة GO

بينما يقدم هذا الاستغلال نواقل هجوم مثيرة للاهتمام في تطوير الويب، خاصة داخل WASM، فإنه يقدم أيضًا مخاطر أمنية متأصلة مرتبطة بلغات البرمجة. على سبيل المثال، ضع في اعتبارك سيناريو حيث يتم ترجمة برنامج C إلى WASM. إذا كان برنامج C الأصلي يحتوي على تجاوزات أو ثغرات، فإن هذه المخاطر تنتقل إلى بيئة WASM، مما يعرضها لثغرات وتهديدات مماثلة.

شرائح العرض التقديمي

نحن طلاب من جامعة كارنيجي ميلون وقد قدمنا هذا البرهان على المفهوم لـ CVE في إحدى فصولنا (18-739D Hacking101). يمكنك الرجوع إلى مجموعة الشرائح الخاصة بنا هنا: GOWasm.pptx

الإسناد والمساهمات

  • Gopala Krishnan (@gkrishnan724)
  • Zhejia Yang (@zildjianpoi)
  • Shubham Kulkarni (@shubhamkulkarni97)
  • Paras Saxena
  • Anisha Nilakantan

المصادر

  • https://www.ibm.com/support/pages/security-bulletin-ibm-event-streams-affected-potential-buffer-overflow-golang-cve-2021-38297-0
  • https://vulmon.com/vulnerabilitydetails?qid=CVE-2021-38297&scoretype=cvssv3
  • https://pedromarquez.dev/blog/2023/2/node_golang_wasm
  • https://nvd.nist.gov/vuln/detail/CVE-2021-38297
  • https://github.com/golang/go/issues/48797
  • https://github.com/golang/go/commit/f63250238be548b7c6c24ae840541102a5cfef99
  • https://jfrog.com/blog/cve-2021-38297-analysis-of-a-go-web-assembly-vulnerability/
  • https://stackoverflow.com/questions/64763007/why-is-webassembly-safe-and-what-is-linear-memory-model
  • https://webassembly.org/
  • https://hacks.mozilla.org/2019/08/webassembly-interface-types/
  • https://blog.protekkt.com/blog/basic-webassembly-buffer-overflow-exploitation-example
  • https://www.usenix.org/system/files/sec20_slides_lehmann.pdf
  • https://xeiaso.net/talks/wasm-abi/
تنزيل الأداة