أباتشي HTTPd ديفس تعتبر ضارة

[مُسَوَّدَة] آخر تحديث بواسطة Joe Schaefer في Wed, 13 May 2026    مصدر
 

القطران والريش

الخلفية

على مدى السنوات ال 25 الماضية، كنت المطور الرئيسي ل apreq المشروع الفرعي داخل خادم Apache HTTPd المشروع الرئيسي. الفكرة الأصلية من libapreq، كآمنة / أداء تقديم نموذج HTML و ملف تعريف الارتباط خرجت مكتبة التحليل من تعاون بين لينكولن شتاين ودوغ MacEachern في أواخر 90s.

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

مع ظهور httpd-2.X، جديد تمامًا I/O Filter العمارة خرجت من httpd الأساسية، فضلا عن الفصل الكامل من APR من الأساس نفسه كوقت تشغيل قابلية نقل أشبه بـ POSIX للأغراض العامة C مشاريع مثل Subversion. في الواقع، libapreq2 أكثر انسجاما مع Apache APR المشروع بهذه الروح، وتعكس واجهة برمجة تطبيقات بيرل ذلك كجزء من APR::Request البناء. يحتوي على وضع CGI مدمج للتشغيل المستقل، خارج httpd وقت التشغيل، مما يجعل وحدة اختبار نسيم.

ومع ذلك، فإن العنصر الرئيسي في apreq2 كان دائما mod_apreq2 وحدة أباتشي، والتي تم تصميمها لأول مرة من قبل Bill Wrowe في وقت مبكر 2000s. ما صممه، خلال جلسة العصف الذهني معي (شخصيًا)، كان مكتبة محلل لغوي واحدة داخلية لـ httpd، أن مشاركة الطلب المقدم الجسم مع كل وحدة من وحدات أصحاب المصلحة الرئيسيين في وقت التشغيل. وهذا يعني توفير البيانات المحللة للوحدات التي تم ربطها بمحرك معالجة الطلب قبل وأثناء وبعد تشغيل معالج المحتوى. كما احتاجت إلى العمل على الطلبات الفرعية أيضًا، بغض النظر عما إذا كان معالج المحتوى يستهلك البيانات المحللة أم لا، أو يستهلك جسم الطلب الخام نفسه ويعيد تحليله.

لقد شرحت أهداف التصميم عدة مرات على مر السنين، حتى في عام 2012 على تطوير @httpd. لكن الأمر كان يشبه دائمًا التحدث إلى الرياح مع هؤلاء الرجال ؛ لم يهتموا أبدًا.

غيوم العاصفة تجمع

في حين أن هذه الرؤية كانت ناجحة للغاية، مع توفر روابط لغوية لعدة لغات مثل Perl, PHP, TCL, R، وما إلى ذلك، من أي وقت مضى منذ حوالي عام 2010 وقد أثبتت مأساوية ل مجتمع المستخدمين الحاليين تتكون من كل منهموليس فقط أعضاء Perl المجتمع.

ماذا حدث؟ فيليب غولوتشي، وهو زميل بيرل/FreeBSD لي في ذلك الوقت، بدأ التحريض على أننا نروج للمشروع الذي سيتم إصداره من داخل خادم HTTPd نفسه. ماذا لم يكن فيليب يعرف جيدا في ذلك الوقت كيف كان تماما حاجب، سريع، وإقليمي هذا الفريق أصبحالذي كان يعني الحاجة إلى التعاون معهم مباشرة على القرارات الموجهة للمستخدم حول قاعدة التعليمات البرمجية.

في عام 2012، حصل فيليب على ما يريده وتوقفت عن المقاومة، لذلك مذراة المشروع الحالي ونسخ C مكونات المكتبة في نواة HTTPd.

سقوط

في 2018 استقالت من المؤسسة بشكل جماعي1. يمكنك تخمين الأسباب.

في عام 2020 أو نحو ذلك، استفاد فريق الأمن في جوجل من إصدار ألفا من httpd 2.5 من خلال تغريب نسخته البالغة من العمر 8 سنوات من apreq2. وجدوا بعض النقاط الساخنة التي تحتاج إلى إصلاح.

بدلاً من أن يكون لديك مجاملة للتواصل مع فيليب، إسحاق غولدستاند, ماكس كيلرمان (@MaxKellermann)، أنا (@joesuf4)، أو أي شخص آخر يشارك في تطوير libapreq2، مهندس صغير في فريق HTTPd ذهب حول الأعمال التجارية من “إصلاح الأخطاء” نقاط الضعف التي وجدتها جوجل. يمكنك أن ترى سجلا من تجربته وعمل الخطأ في كل إصدار منذ ذلك الحين.

بالطبع تم كتابة تقرير CVE من قبل الهواة:

  1. من المستحيل التسبب في تجاوز المخزن المؤقت (بالتصميم المعماري)، لذلك كانت هذه الادعاءات دائمًا بالوني ؛ كما يتضح من حقيقة أنه لم يتم نشر أي رمز استغلال.

  2. على الرغم من بذل قصارى جهدي، كانت مراجع مؤشر NULL ممكنة ؛ حيث قام المطور الصغير بتنظيف شامل منذ سنوات.

  3. كان لدي دماغ منذ عشرين عامًا حول ترميزات charset لرؤوس MIME، والتي تكون دائمًا 7 بت ASCII نظيفة عند تشكيلها بشكل جيد. والخطأ في ذلك منطق المحلل اللغوي كان الشاغل الأمني الهادف الوحيد في تاريخ قاعدة التعليمات البرمجية بالكامل — ومثل NPE، كان كل ما يمكن أن يفعله المهاجم هو تحطيم خادم الويب. بالطبع، في إعداد مسبق، هذا يطلق النار على نفسك في القدم كمتسلل ؛ ولكن مع @joesuf4/mod_perl، يمكن الآن تشغيله داخل HTTP/2 باستخدام mpm_event بسهولة. لذلك كان القضاء على جميع أشكال تعطل الخادم أمرًا حيويًا وضروريًا. يستحق المطور الصغير الكثير من الفضل في هذا الإنجاز في نهاية المطاف في صندوق @apache/apreq. كودوس.

لكن الانقلاب كان إطلاق سراح عام 2022 2.17، حيث المطور روكي إدخال خطأ فادح عن قصد في قاعدة التعليمات البرمجية، كسر اختبار انحدار عمره تسعة عشر عاما.

ما بعد الوفاة

إذا كنت تتساءل كيف شيء مع اختبار الانحدار المكسور / CVE المعلقة ينتهي وحدة المعالجة المركزية كما لاعبا اساسيا دائما، سيكون لديك للنظر في كيفية ريلينغ يتم ذلك في مشروع الخادم.

قصة طويلة قصيرة، وعلقوا على الاختبار وشحنها على أي حال، ووصفها بأنها إصدار أمني إصلاح ثغرة أمنية كان كل إصدار سابق عرضة.

شعار سوبرمان

لماذا أهتم الآن؟ لأنني المصاصة يتواصل المستخدمون للحصول على إجابات كخبير موضوعي معروف.

هذا تمتص2، لكنني آسف لأخبرك أن أيامي التي أرتدي قبعة سوبرمان في أباتشي انتهت قبل حوالي عقد من الزمان.

على أي حال، أفضل ما يمكنني القيام به في هذه المرحلة هو إظهار شجرة مصدر الإنتاج الخاصة بي لـ libapreq2 — @joesuf4/apreq@joesuf4/mod_perl).

الحواشي السفلية

  1. واحد لا ببساطة “استقال من ASF”. لإجراء استراحة نظيفة، يجب على المرء الاستقالة ليس فقط من عضوية ASF، ولكن من كل مشروع / لجنة عضو فيها. وإلا ينتهي أحد الغرق في الجحيم أبدا أباتشي البريد الإلكتروني البريد المزعج.

  2. قام الذكور بيتا بتجميع مشروع @apache/apreq، وينتقلون إلى @apache/mod_perl، لأن الذكور بيتا ليس لديهم علاقة أفضل بوقتهم. يان يلافيتش “مطور روكي” أعلاه الذين عملوا بالفعل على apreq بينما فشله زملاؤه في الفريق، لم يدليوا بتصويت على تقاعد المشروع. غير مفاجئ، لأنه حل مشكلة، وليس رجل بيتا.