
إثبات مفهوم مُتحقَّق منه على CVE-2022-24086
تم رصد CVE-2022-24086 من قبل Adobe على أنه "استُغل في البرية في هجمات محدودة للغاية" وقد حصل على درجة خطورة 9.8 من 10، ويمكن للخصوم الذين يستغلونه تحقيق تنفيذ تعليمات برمجية عن بُعد على الأنظمة المتأثرة دون الحاجة إلى المصادقة. المشكلة التي تُتبع الآن باسم CVE-2022-24087 لها نفس درجة الخطورة ويمكن أن تؤدي إلى نفس النتيجة عند استخدامها في الهجمات. كلاهما يمثلان ثغرات في التحقق غير السليم من المدخلات، وقد أصدرت الشركة تصحيحات لـ Adobe Commerce وMagento Open Source لمعالجة المشكلتين الأمنيتين.
سنركز فقط على 2022-24086، لأنه إذا كان نظام إدارة المحتوى CMS مُصَحَّحًا، فعادةً ما يكون قد طُبِّق عليه التصحيحان معًا، لذلك لا فائدة من الغوص في 2022-24087.
Magento Open Source / Adobe Commerce - 2.3.3-p1 - 2.3.7-p2
Magento Open Source / Adobe Commerce - 2.4.0 - 2.4.3-p1
تم التحقق من هذا الـ PoC على الإصدارات 2.3.4 و2.4.0 و2.4.2-p2 و2.4.3 و2.4.3-p1 باستخدام وحدة قوالب البريد الإلكتروني الافتراضية والبيانات التجريبية الافتراضية.
لنغوص في التصحيحات الرسمية، MDVA-43443 وMDVA-43395. جميع تصحيحات Composer لجميع الإصدارات تشترك في أجزاء مشتركة، وأهمها:
+ private function sanitizeValue($value)
+ {
+ return is_bool($value) ? $value : str_replace(['{', '}'], '', (string) $value);
+ }
+ $pattern = '/{{.*?}}/';
+ do {
+ $result = preg_replace($pattern, '', (string)$result);
+ } while (preg_match($pattern, $result));
كما نرى، يحاولون التخلص من {{ و}}. هذه الأقواس المزدوجة المتعرجة تُستخدم في قوالب البريد الإلكتروني المدمجة.
الآن حان الوقت للغوص في قوالب البريد الإلكتروني!
الدليل الرسمي لقوالب البريد الإلكتروني تم تحريره في 15 مارس، ما الذي تغيّر ولماذا؟ سيعرض لنا web.archive.org نسخة قديمة من تلك الصفحة، ويمكننا أن نرى أنهم أزالوا الإشارات إلى متغيرات النظام. كما تم مسح المعلومات حول طريقتي getTemplateFilter وaddAfterFilterCallback من الدليل.
public function getTemplateFilter()
{
if (empty($this->templateFilter)) {
$this->templateFilter = $this->getFilterFactory()->create();
$this->templateFilter->setUseAbsoluteLinks($this->getUseAbsoluteLinks())
->setStoreId($this->getDesignConfig()->getStore())
->setUrlModel($this->urlModel);
}
return $this->templateFilter;
}
public function addAfterFilterCallback(callable $afterFilterCallback)
{
// Only add callback if it doesn't already exist
if (in_array($afterFilterCallback, $this->afterFilterCallbacks)) {
return $this;
}
$this->afterFilterCallbacks[] = $afterFilterCallback;
return $this;
}

معظم مستخدمي Magento الرئيسيين قاموا بالفعل بتطبيق التصحيحات، ولم تعد هذه الأداة بنفس الخطورة التي كانت عليها قبل بضعة أشهر. ولكن نظرًا للضرر المحتمل الذي يمكن أن تسببه هذه الأداة، لا ينبغي أن يكون هذا الـ PoC في وصول محدود.
السعر الحالي - 0.5 BTC. ويشمل تعليمات كاملة حول الاختراق، وحمولات نموذجية، ودعمًا.
جهة الاتصال عبر XMPP للاستشارة والطلب هي [email protected].
من الواضح أن هذا الـ PoC ليس بحالة تسمح بإحداث أي ضرر. إنه نقطة انطلاق صلبة لبناء شيء أكبر.
مؤلفو هذا المشروع غير مسؤولين عن أي ضرر محتمل ناتج عن المواد.
CC0