اس ہفتے ایک جعلی کلائنٹ نے میرے ان باکس میں ایک نقصان دہ GitHub ریپوزٹری بھیجی، اور محض اسٹارٹر اسکرپٹ چلانے سے دو دن کا کام ضائع ہو گیا اور میرے براؤزر میں محفوظ تمام پاس ورڈز ظاہر ہو گئے۔
اس "کلائنٹ" نے ایک زیادہ تنخواہ والی سینئر انجینئر کی نوکری کا اشتہار دیا، تیزی سے پیغام بھیجا، اور ایک بہترین نظر آنے والی ریپوزٹری بھیجی۔ درخواست سادہ تھی: کلون کریں، npm run dev چلائیں، اور یہ ثابت کرنے کے لیے اسکرین شاٹ بھیجیں کہ ڈیمو کام کر رہا ہے—نہ کوئی معاہدہ، نہ ہی کوئی بیک گراؤنڈ چیک۔ جیسے ہی ڈویلپمنٹ سرور شروع ہوا، ایک کنفیگریشن فائل میں موجود چھپے ہوئے کوڈ نے کمانڈ اینڈ کنٹرول (C2) سرور سے رابطہ کیا، دوسرے مرحلے کا پی لوڈ (payload) حاصل کیا اور مقامی مشین سے کریڈنشلز (credentials) چوری کرنا شروع کر دیے۔
حملہ کس طرح ہوا
نقصان دہ پی لوڈ postcss.config.js میں موجود تھا، یہ ایک ایسی فائل ہے جسے زیادہ تر ڈویلپرز محض ایک نظر دیکھ کر چھوڑ دیتے ہیں کیونکہ اس میں عام طور پر چند سادہ CSS پروسیسنگ رولز ہوتے ہیں۔ اس معاملے میں، حملہ آور نے ایک جائز سٹیٹمنٹ کے بالکل دائیں جانب ایک مبہم (obfuscated) JavaScript لائن شامل کر دی تھی، جسے سپیسز (spaces) کے ذریعے چھپایا گیا تھا تاکہ وہ عام کوڈ کا حصہ لگے۔ جب npm run dev کمانڈ نے PostCSS پائپ لائن چلائی، تو وہ چھپی ہوئی لائن بغیر کسی کی توجہ کے چل پڑی۔
میلویئر نے تیزی سے تین اقدامات کیے:
- C2 رابطہ – اس نے حملہ آور کے زیرِ کنٹرول سرور کے ساتھ نیٹ ورک کنکشن کھولا اور متاثرہ ہوسٹ (host) کی اطلاع دی۔
- دوسرے مرحلے کا ڈاؤن لوڈ – اس نے اضافی کوڈ حاصل کیا جس میں اصل ڈیٹا چوری کرنے (data-exfiltration) کا لاجک موجود تھا۔
- براؤزر کریڈنشلز کی چوری – macOS پر اس نے سسٹم کی keychain میں محفوظ Chrome Safe Storage کی (key) کے بارے میں معلومات حاصل کیں۔ اگر صارف نے keychain کے پرامپٹ کی اجازت دے دی، تو حملہ آور نے Chrome میں محفوظ تمام پاس ورڈز حاصل کر لیے۔
فوری چوری کے علاوہ، اس پی لوڈ نے خود کو کئی عام ڈویلپر ٹولز—VS Code، npm، Discord—میں لکھ دیا، تاکہ ان ایپلی کیشنز کے مستقبل میں کسی بھی آغاز پر وہ نقصان دہ کوڈ دوبارہ فعال ہو جائے۔ محض ری بوٹ کرنے سے انفیکشن ختم نہیں ہوا؛ اگلی بار npm install کرنے یا ایڈیٹر کھولنے پر بیک ڈور (backdoor) دوبارہ زندہ ہو گیا۔
وہ خطرے کی نشانیاں جن پر اکثر توجہ نہیں دی جاتی
- کسی بھی معاہدے پر دستخط کرنے سے پہلے کوڈ چلانے کی درخواست۔ جائز بھرتی کے عمل میں عام طور پر کوئی بھی ملکیتی کام شیئر کرنے سے پہلے ایک رسمی معاہدہ شامل ہوتا ہے۔
- "پروجیکٹ بریف" کے نام پر بھیجی گئی کمپریسڈ فائلیں۔ Zip یا RAR آرکائیوز میں ایگزیکیوٹیبل اسکرپٹس یا نقصان دہ بائنریز چھپی ہو سکتی ہیں۔
- "پلیٹ فارم فلٹرز سے بچنے کے لیے" ذاتی ای میل ایڈریس مانگنا۔ یہ چال گفتگو کو اس محفوظ پلیٹ فارم سے ہٹانے کے لیے ہوتی ہے جہاں بدسلوکی کی رپورٹ کی جا سکتی ہے۔
- ایسی جاب ڈسکرپشنز جن میں امیدوار سے کرپٹو والٹ میں رقم ڈالنے یا ٹیسٹ ٹوکنز خریدنے کا کہا جائے۔ ایسی مطالبات حقیقی ڈویلپمنٹ کے کام کے لیے غیر معمولی ہیں۔
محفوظ رہنے کے لیے عملی اقدامات
- بغیر معائنے کے کبھی بھی کسی اجنبی کا کوڈ نہ چلائیں۔ ریپوزٹری کو ریڈ اونلی (read-only) ویو میں کھولیں (مثلاً GitHub پر raw file view کے ذریعے) اور ہر اسکرپٹ، خاص طور پر کنفیگریشن فائلوں اور
package.jsonکےscriptsاندراجات کا باریک بینی سے جائزہ لیں۔ - تمام اٹیچمنٹس کو سادہ ٹیکسٹ کے طور پر سمجھیں۔ اگر کوئی zip فائل بھیجی جائے، تو اسے ایک سینڈ باکسڈ (sandboxed) ماحول میں ایکسٹریکٹ کریں اور کچھ بھی کھولنے سے پہلے اس کے مواد کا معائنہ کریں۔
- براؤزر اسٹوریج کے بجائے ایک مخصوص پاس ورڈ منیجر استعمال کریں۔ اگر براؤزر کی keychain سے ڈیٹا چوری بھی ہو جائے، تب بھی منیجر کا والٹ (vault) الگ اور محفوظ رہتا ہے۔
- غیر قابلِ اعتماد کوڈ کو نیٹ ورک تک رسائی کے بغیر ایک الگ ورچوئل مشین یا کنٹینر میں چلائیں۔ یہ حملہ آور کی C2 سرور تک پہنچنے کی صلاحیت کو روک دیتا ہے۔
- تمام اکاؤنٹس پر ٹو فیکٹر آتھنٹیکیشن (2FA) فعال کریں۔ اگر پاس ورڈ چوری ہو جائے، تو دوسرا مرحلہ غیر مجاز لاگ ان کو روک دیتا ہے۔
- ڈویلپر ٹولز کو اپ ٹو ڈیٹ رکھیں اور جہاں ممکن ہو خودکار انٹیگریٹی چیکس (integrity checks) کو فعال کریں۔ کچھ ایڈیٹرز اب اس وقت وارننگ دیتے ہیں جب بنیادی فائلیں غیر متوقع طور پر تبدیل کی جاتی ہیں۔
اگر آپ کو شک ہو کہ آپ نے کوئی نقصان دہ کوڈ چلایا ہے، تو فرض کر لیں کہ سسٹم متاثر ہو چکا ہے۔ ضروری ڈیٹا کا بیک اپ لیں، ڈرائیو کو صاف کریں، اور آپریٹنگ سسٹم دوبارہ انسٹال کریں۔ محض ری بوٹ کرنے سے وہ پرسٹنس میکانزم (persistence mechanism) ختم نہیں ہوگا جو عام ایپس میں فائلوں کو دوبارہ لکھ دیتا ہے۔
خلاصہ: جی ایس کرپٹ کی ایک چھپی ہوئی لائن ایک عام ڈیمو کو مکمل طور پر کریڈنشلز چوری کرنے کے آپریشن میں بدل سکتی ہے۔ جب تک آپ کسی ریپوزٹری کی تصدیق نہ کر لیں، اسے ناقابلِ اعتبار سمجھیں، اور علیحدگی (isolation) کو اپنے ورک فلو کا لازمی حصہ بنائیں۔ ایک لمحے کی جلد بازی کی قیمت فائل کو دوبارہ چیک کرنے کی کوشش سے کہیں زیادہ ہو سکتی ہے۔
