Etherpad-lite: محاولات حقن SQL تقتل Etherpad lite

تم إنشاؤها على ٢٣ أكتوبر ٢٠١٨  ·  13تعليقات  ·  مصدر: ether/etherpad-lite

أهلا،

على الخادم الخاص بنا كنا نتعرض لبعض الانقطاع في Etherpad. لقد اعتمدنا عليه في استعلام سيء:

https://pad.bling.org/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&vLtF%3D6904%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert%28%22XSS%22%29%3C%2Fscript%3E%27%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%2F%2A%2A%2F%3B%20EXEC%20xp_cmdshell%28%27cat%20..%2F..%2F..%2Fetc%2Fpasswd%27%29%23

مثال على طلب بحث "بسيط":

https://pad.bling.org/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&vLtF%3D6904%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert(%22XSS%22)%3C%2Fscript%3E%27

هذا يثير الانهيار الفوري:

oct. 23 18:17:19 pad.bling.org run.sh[8976]: [2018-10-23 18:17:19.994] [ERROR] console - Error: ENAMETOOLONG: name too long, open '/var/www/etherpad-lite/var/minified_L2phdmFzY3JpcHRzL2xpYi9lcF9ldGhlcn
oct. 23 18:17:19 pad.bling.org run.sh[8976]:     at Error (native)
oct. 23 18:17:19 pad.bling.org run.sh[8976]: [2018-10-23 18:17:19.995] [INFO] console - graceful shutdown...
oct. 23 18:17:20 pad.bling.org run.sh[8976]: [2018-10-23 18:17:20.091] [INFO] console - db sucessfully closed.

نقوم بتشغيل النكهة 1.7.0 على Debian Stretch مع العقدة v6.14.4 وبدون تخصيص محدد.
أعدنا إنتاج السلوك على تثبيتين منفصلين لـ Etherpad.

Serious Bug security

ال 13 كومينتر

هذا صحيح بالفعل.
شكرا على المعلومات الثمينة ، @ fpoulain ، أقدر كثيرا!

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

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

همهمة ... في الواقع تم الكشف عنها بالفعل لأنها تستخدم من قبل بعض الرجال السيئين.

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

Afaik لدينا سياسة إفشاء مسؤولة. اعتقدت أنه كان على etherpad.org و github readme.


من: François Poulain [email protected]
تاريخ الإرسال: الاثنين ، 21 يناير 2019 الساعة 11:16 صباحًا
إلى: etherpad-lite
نسخة إلى: جون ماكلير ؛ تعليق
الموضوع: رد: [ether / etherpad-lite] محاولات حقن SQL تقتل Etherpad lite (# 3502)

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

همهمة ... في الواقع تم الكشف عنها بالفعل لأنها تستخدم من قبل بعض الرجال السيئين.

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

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/ether/etherpad-lite/issues/3502#issuecomment-456039980 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe-auth/ AANewII6dbcPV2hlcP4uA5c4OHESwQJuks5vFaK4gaJpZM4X1_tz .

قد يكون من الجيد إضافة دعوة "وجدت مشكلة أمنية؟ أخبرنا عنها عبر ...". قبل فتح هذه المشكلة ، قضيت بضع دقائق في الملف التمهيدي لـ github وعلى موقع etherpad.org دون العثور على مثل هذه الدعوة. أيضًا ، كقارئ غير أصلي للغة الإنجليزية ، كان من الممكن أن أفتقد المصطلحات الجيدة التي يجب البحث عنها.

وأشار. تينكس


من: François Poulain [email protected]
تاريخ الإرسال: الاثنين ، 21 يناير 2019 الساعة 2:35 مساءً
إلى: etherpad-lite
نسخة إلى: جون ماكلير ؛ تعليق
الموضوع: رد: [ether / etherpad-lite] محاولات حقن SQL تقتل Etherpad lite (# 3502)

قد يكون من الجيد إضافة دعوة "وجدت مشكلة أمنية؟ أخبرنا عنها عبر ...". قبل فتح هذه المشكلة ، قضيت بضع دقائق على github وعلى etherpad.org دون العثور على مثل هذه الدعوة. أيضًا ، كقارئ غير أصلي للغة الإنجليزية ، كان من الممكن أن أفتقد المصطلحات الجيدة التي يجب البحث عنها.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/ether/etherpad-lite/issues/3502#issuecomment-456096384 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe-auth/ AANewFZlv6xtuszRP2CCBwWoDHGgTrFwks5vFdGEgaJpZM4X1_tz .

لم أتمكن من العثور على أحد أيضًا ، لكنني وجدت أنك تطلب علاقات عامة لإضافة واحد https://github.com/ether/etherpad-lite/issues/2499.

ربما تفكر في إنشاء https://securitytxt.org/ كحل سريع؟

الرمز المخالف موجود في مكان ما هنا: https://github.com/ether/yajsml/blob/master/server.js#L98

إخلاء المسؤولية: لست ذكيًا بما يكفي لحل هذه المشكلة. أحتاج إلى شخص لديه خبرة للمساعدة!

مهلا! القيام ببعض البحث في هذا الآن.

أولاً: لدرء أي مخاوف بشأن SQLi: هذا ليس له علاقة بحقن SQL ، كما يتضح من هذه الحمولة البديلة التي تسبب أيضًا نفس الانهيار:

/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&footlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootle

هذه مشكلة تتعلق بطول اسم الملف في البرامج الوسيطة للتخزين المؤقت.

يتم حاليًا إنشاء مفتاح ذاكرة التخزين المؤقت على النحو التالي:

var cacheKey = Buffer.from(path).toString('base64').replace(/[/+=]/g, '');

يؤدي هذا إلى التحكم في طول مفتاح ذاكرة التخزين المؤقت بطول المسار.

هذه مشكلة عند استخدام مفتاح ذاكرة التخزين المؤقت كاسم ملف على القرص ، حيث أن العديد من أنظمة الملفات تحدد طول اسم الملف إلى 255 حرفًا. هذا هو سبب وجود خطأ ENAMETOOLONG في السجل.

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

سأرسل بيانًا عامًا يقوم بذلك قريبًا.

مرحبًا ، tomnomnom ، هذا ذكي. من المنطقي تمامًا أن تكون مفاتيح ذاكرة التخزين المؤقت ذات طول ثابت. وبهذه الطريقة يظلون معتمدين على المحتوى ، مع عدم وجود مخاطر تصادمات عمليا.

سآخذ نظرة الليلة.
أحسنت!

دمج العلاقات العامة ، شكرا جزيلا!

ملاحظة أخرى حول هذا الأمر: من مستندات nodejs ، قد نضطر إلى النظر في إمكانية عدم توفر الوحدة النمطية crypto :

من الممكن إنشاء Node.js دون تضمين دعم وحدة التشفير. في مثل هذه الحالات ، يؤدي الاتصال يتطلب ("تشفير") إلى حدوث خطأ

ربما لا تحتوي الأنظمة الأساسية المضمنة عليها (على سبيل المثال: ARM و MIPS و Raspberry PIs وما شابه ذلك)؟ لا اعرف. يمكن العثور على وصف لهذه السيناريوهات هنا :

  • تشغيل عقدة غير قياسية في بيئة مقيدة بالمورد أو الأمان (انظر
  • تعمل في بيئة مقلدة (browserify ، حزمة الويب وما إلى ذلك)
  • بناء عقدة من المصدر وحذف opensl / crypto لسبب عشوائي (انظر سؤال StackOverflow أو منشور nodejs آخر )

على أي حال ، تعامل رجال TypeScript مع هذه المشكلة نفسها في https://github.com/microsoft/TypeScript/issues/19100 ، وقاموا بحلها بطريقة أنيقة في https://github.com/microsoft/TypeScript/commit/ 9677b0641cc5ba7d8b701b4f892ed7e54ceaee9a.

إذا فشل استيراد التشفير في وقت التشغيل ، فسيتم استبدال خوارزمية التجزئة خوارزمية

قد يكون أحد الأمثلة التي تم تكييفها لحالتنا:

function djb2Hash(data) {
    const chars = data.split("").map(str => str.charCodeAt(0));
    return `${chars.reduce((prev, curr) => ((prev << 5) + prev) + curr, 5381)}`;
}

console.log(Buffer.from(djb2Hash('This is a 😎 test of the djb2 hash function')).toString('hex'));
// prints 36373536373437333033

أنا لا أطلب منك القيام بذلك ، لكن قصة djb2 ممتعة: انظر هنا ، والقائمة البريدية الأصلية لدانيال برنشتاين منذ عام 1991. كان عمره 20 عامًا في ذلك الوقت .

المتابعة التي تستخدم djb2 عندما لا يكون هناك دعم تشفير: # 3797.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات