package.json - package-lock.json - typosquatting

خطأ مطبعي في package.json يسمح لحزمة مشابهة بالتأثير على Pipeline

خطأ من حرف واحد أدى إلى إرسال برامج ضارة

بدأ الأمر بخطأ مطبعي. في خضمّ الاندفاع الهائل لدفع الميزات ودمج العلاقات العامة، كتب أحدهم @utils_core بدلا من @utils-core في package.jsonلم يُحدث هذا الخطأ المُقتصر على حرف واحد خطأً، بل أدى إلى حدوث خطأ بهدوء. حزمة شبيهة بالبرامج الخبيثة خلال الفترة القادمة CI/CD تشغيل، والاستفادة من الثقة في الإصدارات المثبتة والأتمتة. مرحباً بكم في عالم التطفل على النصوص في المصادر المفتوحة.

التطفل على الأخطاء: ناقل الهجوم الذي يزدهر على الأخطاء البشرية

التلاعب بالأخطاء البرمجية هو بالضبط ما يوحي به اسمه: جهات خبيثة تسجل حزمًا بأسماء مطابقة تقريبًا للحزم الأصلية. في البيئات سريعة التطور، ينجح هذا لأن المطورين يثقون بأن... package.json و حزمة lock.json تعكس توقعاتهم. هل هناك شخصية مختلفة؟ قد يكون من الأفضل أن تكون غير مرئية في مقارنة العلاقات العامة.

الآلية الوقائية الوطنية تاريخيًا، تم استغلالها من خلال التلاعب بالأحرف. حزم مثل كروسينف بدلا من بيئة متقاطعة or تيار الحدث لقد أثبتت الثغرات الأمنية فعالية هذه البرمجيات المقلدة. غالبًا ما تنجح هذه الحزم المزيفة في الاختبارات لمجرد أنها تبدو سليمة ولا تُسبب أخطاء تشغيل فورية.

تشمل الفخاخ الشائعة ما يلي:

  • الواصلة مقابل الشرطة السفلية: lأوداش-كور vs لوداش_كور
  • الجمع: طلب vs طلبات
  • الأحرف المستبدلة: صريح بدلا من التعبير

حيث يصبح package-lock.json نقطة عمياء

يُصحِّح المُطوِّر خطأه المطبعي. أو هكذا يظن. ولكن الآن، حزمة lock.json لقد تم بالفعل قفل حزمة المهاجم. وهنا يكمن الخطر الحقيقي.

الغاء الاعجاب package.json، والتي يتم تحريرها يدويًا وتخضع لمزيد من التدقيق، حزمة lock.json يتم إنشاؤه تلقائيًا بواسطة الآلية الوقائية الوطنيةونتيجة لذلك، غالبًا ما يتم التعامل معه كإجراء شكلي، أو يتم تخطيه، أو مجرد إلقاء نظرة سريعة عليه. pull request المراجعات. ليس من غير المألوف أن تُصنفه الفرق على أنه "مزعج للغاية" أو أن تثق به ضمنيًا دون دراسة متعمقة.

يعرف المهاجمون هذا الأمر، ويعتمدون عليه. حزمة خبيثة تمت الإشارة إليه، وذلك بفضل خطأ مطبعي في package.json، package-lock.json يُسجِّل الإصدار المُحَلَّل. حتى لو تم تصحيح الخطأ المطبعي لاحقًا، فقد يستمر الإدخال الخبيث ما لم يُعاد إنشاء ملف القفل صراحةً.

ومما يزيد الطين بلة، أن تثبيت الإصدار، الذي يُفترض أن يضمن الاتساق، قد يأتي بنتائج عكسية. إذ يمكن للمهاجمين نسخ حزمهم المزيفة بشكل مطابق للحزمة الأصلية. إذا CI/CD إذا كان النظام يثق في الإصدارات المثبتة بشكل أعمى، فلن يكتشف أنه يقوم بتثبيت حزمة برقم إصدار معروف أنه جيد ولكن من مصدر مختلف ضار.

هذا الإصرار الصامت هو ما يجعل حزمة lock.json هذا خطير جدًا. صحيح أنه يضمن عمليات بناء حتمية، ولكنه يضمن أيضًا بقاء الحزمة التالفة ما لم يتم اكتشافها وتنظيفها يدويًا.

CI/CD:مكان إصابة البرامج الضارة – package.json

بشكل نموذجي CI/CD pipelineلا تحتاج الحزمة الخبيثة إلى الانتظار حتى وقت التشغيل. يتم حلها وتشغيلها في وقت أبكر بكثير من العملية:

قرار التبعية
استخدم pipeline يسحب إصدارات التبعية الدقيقة من pقفل الحزمة.json، والتي تشمل الآن تم حذف الحزمة بسبب الخطأ المطبعي في الحزمة.json.

مرحلة التثبيت
أثناء تثبيت npm ci، يتم تثبيت جميع التبعيات، بما فيها التبعيات الضارة. بدون تحذيرات، بدون مطالبات، فقط تثبيت صامت.

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

مثال على الكود الزائف:

				
					if (installation_phase_active) {
runHiddenPayload()
}
				
			

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

⚠️ تحذير: هذا الكود الزائف مخصص لأغراض العرض التوضيحي فقط ولا يجوز استخدامه في البيئات الحقيقية.

لم يتم تشغيل أي تنبيهات. لا شيء يفشل. البيئة مُعرّضة للخطر بالفعل، قبل... pipeline حتى يصل إلى مرحلة الاختبار.

اكتشاف الفرق قبل فوات الأوان

خطأ شائع: الافتراض package.json يروي القصة كاملة. لكنه لا يفعل. القوة الحقيقية تكمن في مزيج package.json + package-lock.json.

إليك ما يجب البحث عنه:

  • هل حزمة lock.json تشمل الحزم غير المتوقعة؟
  • هل يتم الحصول على أي تبعيات من سجلات غير معروفة أو لها نطاقات غريبة؟
  • هل أرقام الإصدارات محددة بشكل مفرط أو غير متوافقة؟

استخدم أدوات CLI مثل:

  • تدقيق npm للإشارة إلى المشكلات المعروفة
  • npm ls لعرض شجرة التبعية الكاملة
  • فرق لمقارنة الإصدارات بين package.json و حزمة lock.json

تقوية Pipeline:الدفاعات التي تعمل

للدفاع ضد التطفل على النصوص المطبعية:

  • فرض قيود النطاق في الحزمة.json.
  • إضافة الدمج المسبق hooks للتحقق من صحة التبعيات.
  • استعمل npm سي لتجنب الانحراف غير المقصود في الإصدار.
  • المسح بانتظام حزمة lock.json للتشوهات.

والأهم من ذلك: التعامل مع الإدخالات غير الموثقة في حزمة lock.json كمخاطر محتملة. كل commit ينبغي التعامل معها باعتبارها نقطة تفتيش لسلسلة التوريد.

الكشف الآلي: كيف تساعد أدوات مثل Xygeni

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

إليك كيف يساعدك Xygeni:

  • اكتشاف اسم الحزمة المشبوهة:
    يستخدم أساليب ذكية للكشف عن أنماط الكتابة المطبعية غير الصحيحة package.json، البحث عن الاختلافات البسيطة في أسماء الحزم المعروفة (مثل إضافة علامات سفلية، أو عمليات النقل، أو تبديلات الأحرف).
  • التحقق من التجزئة غير المعروف:
    يقارن تجزئة كل التبعيات في حزمة lock.json مقابل قاعدة بيانات لعناصر معروفة بجودتها من سجلات موثوقة. حتى لو بدا اسم الحزمة وإصدارها سليمين، فإن عدم تطابق التجزئة يُثير علامة تحذير.
  • الحظر قبل البناء:
    يعترض ويمنع تثبيت أي حزم غير مؤكدة أو مشبوهة قبل أن تصل إلى مراحل التثبيت أو ما بعد التثبيت في CI/CD pipeline.
  • تحليل الرسم البياني للتبعية:
    يقوم بفحص شجرة التبعيات الكاملة بشكل مستمر بحثًا عن محاولات التطفل غير المباشرة أو التبعيات الانتقالية الضارة.
  • التنبيهات والتقارير:
    توفر تنبيهات مفصلة وقابلة للتنفيذ، تُظهر ما تم وضع علامة عليه، ولماذا، ومن أين جاء في سلسلة التبعيات.

مع تزايد تعقيد أنظمة الحزم، أصبحت أدوات مثل Xygeni أساسية. لا تتناسب المراجعة اليدوية مع تزايد الاعتماديات أو التكرار السريع. تتدخل Xygeni لأتمتة عمليات الفحص الحرجة الحديثة. pipelineإن الحاجة إلى الثقة هي سد الفجوة بين الثقة والتحقق.

شخصية واحدة. عواقب حقيقية.

لم يكن هذا غريبا صفر اليومكان خطأً مطبعيًا. حرف واحد في غير موضعه package.json، معززة بصمت من قبل حزمة lock.json، وتم شحن البرامج الضارة تلقائيًا أثناء عملية روتينية CI/CD يركض.

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

  • المسح الآلي للقبض على أسماء الحزم والإصدارات المشبوهة قبل التثبيت.
  • تدقيق ملفات القفل للكشف عن الإدخالات غير المراجعة أو غير المتوقعة في حزمة lock.json.
  • أساليب التحقق من الاسم لتحديد التطابقات القريبة للحزم الموثوقة.

كان الأمر يتطلب شخصية واحدة فقط. كانت الإجراءات الصحيحة كفيلة بإيقافه قبل أن يلمس قلبك. pipelineالثقة لا تكفي. في تقنيات DevSecOps الحديثة، إما أن تتحقق من كل شيء، أو تُخاطر بكل شيء.

أدوات تحليل التركيبات البرمجية sca
إعطاء الأولوية للمخاطر التي تتعرض لها برامجك، ومعالجتها، وتأمينها
احصل على حسابك المجاني.
أي بطاقة ائتمان.

احمِ عملية تطوير وتسليم برامجك

مع مجموعة منتجات Xygeni