ثغرة أمنية في مكتبات الشبكة الخاصة بلغات Rust and Go والتي تسمح لك بتجاوز التحقق من عنوان IP

تم تحديد الثغرات الأمنية المتعلقة بالمعالجة غير الصحيحة لعناوين IP ذات الأرقام الثمانية في وظائف تحليل العناوين في المكتبات القياسية للغات Rust وGo. تتيح نقاط الضعف إمكانية تجاوز عمليات التحقق من العناوين الصالحة في التطبيقات، على سبيل المثال، لتنظيم الوصول إلى عناوين واجهة الاسترجاع (127.xxx) أو شبكات الإنترانت الفرعية عند تنفيذ هجمات SSRF (تزوير الطلب من جانب الخادم). تستمر الثغرات الأمنية في دورة المشكلات التي تم تحديدها مسبقًا في قناع الشبكة للمكتبات (JavaScript، CVE-2021-28918، CVE-2021-29418)، IP الخاص (JavaScript، CVE-2020-28360)، ipaddress (Python، CVE- 2021-29921 )، Data::Validate::IP (Perl, CVE-2021-29662) وNet::Netmask (Perl, CVE-2021-29424).

وفقًا للمواصفات، يجب تفسير قيم سلسلة عنوان IP التي تبدأ بالصفر على أنها أرقام ثماني، لكن العديد من المكتبات لا تأخذ ذلك في الاعتبار وتتجاهل الصفر ببساطة، وتتعامل مع القيمة كرقم عشري. على سبيل المثال، الرقم 0177 بالنظام الثماني يساوي 127 بالنظام العشري. يمكن للمهاجم أن يطلب موردًا عن طريق تحديد القيمة "0177.0.0.1"، والتي تتوافق بالتدوين العشري مع "127.0.0.1". إذا تم استخدام المكتبة التي بها مشكلات، فلن يكتشف التطبيق أن العنوان 0177.0.0.1 موجود في الشبكة الفرعية 127.0.0.1/8، ولكن في الواقع، عند إرسال طلب، يمكنه الوصول إلى العنوان "0177.0.0.1"، الذي ستتم معالجة وظائف الشبكة كـ 127.0.0.1. بطريقة مماثلة، يمكنك الغش في التحقق من الوصول إلى عناوين الإنترانت عن طريق تحديد قيم مثل "012.0.0.1" (أي ما يعادل "10.0.0.1").

في Rust، تأثرت المكتبة القياسية "std::net" بمشكلة (CVE-2021-29922). قام محلل عنوان IP لهذه المكتبة بتجاهل الصفر قبل القيم الموجودة في العنوان، ولكن فقط إذا تم تحديد ما لا يزيد عن ثلاثة أرقام، على سبيل المثال، سيتم اعتبار "0177.0.0.1" قيمة غير صالحة، ونتيجة غير صحيحة سيتم إرجاعها استجابةً لـ 010.8.8.8 و 127.0.026.1 . من المحتمل أن تكون التطبيقات التي تستخدم std::net::IpAddr عند تحليل العناوين المحددة من قبل المستخدم عرضة لهجمات SSRF (تزوير الطلب من جانب الخادم)، وRFI (تضمين الملفات البعيدة)، وLFI (تضمين الملفات المحلية). تم إصلاح الثغرة الأمنية في فرع Rust 1.53.0.

ثغرة أمنية في مكتبات الشبكة الخاصة بلغات Rust and Go والتي تسمح لك بتجاوز التحقق من عنوان IP

في Go، تتأثر المكتبة القياسية "net" (CVE-2021-29923). تتخطى الدالة net.ParseCIDR المضمنة الأصفار البادئة قبل الأرقام الثمانية بدلاً من معالجتها. على سبيل المثال، يمكن للمهاجم تمرير القيمة 00000177.0.0.1، والتي، عند تحديدها في الدالة net.ParseCIDR(00000177.0.0.1/24)، سيتم تحليلها على أنها 177.0.0.1/24، وليس 127.0.0.1/24. تتجلى المشكلة أيضًا في منصة Kubernetes. تم إصلاح الثغرة الأمنية في إصدار Go 1.16.3 والإصدار التجريبي 1.17.

ثغرة أمنية في مكتبات الشبكة الخاصة بلغات Rust and Go والتي تسمح لك بتجاوز التحقق من عنوان IP


المصدر: opennet.ru

إضافة تعليق