cdnjs میں کمزوری جس نے Cloudflare سرورز پر کوڈ پر عمل درآمد کی اجازت دی۔

Cloudflare کے cdnjs مواد کی ترسیل کے نیٹ ورک میں ایک اہم خطرے کی نشاندہی کی گئی ہے، جو JavaScript لائبریریوں کی ترسیل کو تیز کرنے کے لیے ڈیزائن کیا گیا ہے، جس سے CDN سرورز پر صوابدیدی کوڈ کے نفاذ کی اجازت دی گئی ہے۔ مسئلہ کا خطرہ اس حقیقت سے بڑھ جاتا ہے کہ انٹرنیٹ پر موجود تمام سائٹس میں سے تقریباً 12.7% جاوا اسکرپٹ لائبریریوں کو ڈاؤن لوڈ کرنے کے لیے اس سروس کا استعمال کرتی ہیں، اور انفراسٹرکچر سے سمجھوتہ ان میں سے کسی بھی سائٹ کے ذریعے فراہم کردہ لائبریریوں کو تبدیل کرنا ممکن بناتا ہے۔

cdnjs سروس Git یا NPM ریپوزٹری سے پیکجز ڈاؤن لوڈ کرتی ہے، جس کے بعد یہ کسی بھی سائٹ کو جاوا اسکرپٹ لائبریریوں کی لوڈنگ کو تیز کرنے کے لیے Cloudflare مواد کی ترسیل کے نیٹ ورک کو مفت استعمال کرنے کی اجازت دیتی ہے۔ جب گٹ ہب پر شائع ہونے والے cdnjs اجزاء کے کوڈ کا مطالعہ کیا گیا تو یہ بات سامنے آئی کہ tgz آرکائیوز میں NPM پیکجوں کو کھولنے کے لیے گو زبان میں معیاری آرکائیو/ٹار ماڈیول استعمال کیا جاتا ہے، جو راستوں کو نارمل کیے بغیر فائلوں کی فہرست تیار کرتا ہے۔ . اس صورت میں جب اسکرپٹ دی گئی فہرست کی بنیاد پر مواد کو کھولتا ہے، فائلوں کی آرکائیو میں موجودگی جیسے "../../../../../../../tmp/test" جہاں تک رسائی کے حقوق اجازت دیتے ہیں، سسٹم میں صوابدیدی فائلوں کو اوور رائٹ کرنے کا باعث بنتے ہیں۔

یہ تجویز کیا گیا تھا کہ حملہ آور اپنی لائبریری کو cdnjs میں شامل کرنے کے لیے درخواست دے سکتا ہے اور NPM ریپوزٹری کے راستے میں "../" حروف کے ساتھ فائلوں پر مشتمل خصوصی طور پر ڈیزائن کردہ آرکائیو اپ لوڈ کر سکتا ہے۔ cdnjs سرورز پر، ایک "آٹو اپ ڈیٹ" آپریشن وقفے وقفے سے انجام دیا جاتا ہے، جس کے دوران ہینڈلر مجوزہ لائبریری کے نئے ورژن ڈاؤن لوڈ کرتا ہے اور مواد کو کھولتا ہے۔ "../" راستوں والی فائلوں کا استعمال کرتے ہوئے، ایک حملہ آور سروس اسکرپٹس کے ساتھ فائلوں کو اوور رائٹ کر سکتا ہے اور اپنے کوڈ کو اس سرور پر لاگو کر سکتا ہے جس پر پیک کھولا گیا تھا۔

Git سے اپ ڈیٹس ڈاؤن لوڈ کرنے کے معاملے میں، یہ پتہ چلا کہ اپ ڈیٹس کو ڈاؤن لوڈ کرنے والے ہینڈلر نے Git سے فائلوں کی کاپی کرتے وقت علامتی لنکس کو مدنظر نہیں رکھا۔ اس خصوصیت نے گٹ میں علامتی لنکس شامل کرکے سرور سے کسی بھی فائل کی پڑھنے کو منظم کرنا ممکن بنایا۔

فائل ریڈنگ کے حوالے سے مفروضے کی جانچ کرکے HackerOne میں انعام حاصل کرنے کے لیے cdnjs کو ہیک کرنے کے مظاہرے کے ساتھ تجربات شروع کرنے کا فیصلہ کیا گیا۔ /proc/self/maps فائل کی طرف اشارہ کرتے ہوئے، CDN کے ذریعے پیش کی جانے والی JavaScript لائبریری کے Git ریپوزٹری میں ایک علامتی لنک test.js شامل کر دیا گیا ہے۔ لائبریری کا نیا ورژن شائع کرنے کے بعد، اپ ڈیٹ ہینڈلر نے اس ذخیرہ پر کارروائی کی اور مخصوص فائل کو cdnjs میں شائع کیا (test.js کو ایک علامتی لنک کے طور پر بنایا گیا تھا اور جب اس فائل کی درخواست کی گئی تھی، تو /proc/self/maps کے مواد کو واپس کر دیا گیا تھا۔ )۔

فائل /proc/self/environ سے علامتی لنک کو تبدیل کرتے ہوئے، مطالعہ کے مصنف نے دیکھا کہ دیئے گئے ڈیٹا میں ماحولیاتی متغیرات GITHUB_REPO_API_KEY اور WORKERS_KV_API_TOKEN کی قدریں شامل ہیں۔ پہلے متغیر نے GitHub پر robocdnjs ریپوزٹری تک تحریری رسائی کے لیے API کلید کو محفوظ کیا۔ دوسرے متغیر نے ٹوکن کو KV اسٹوریج میں cdnjs میں محفوظ کیا۔ موصول ہونے والی معلومات کا استعمال کرتے ہوئے، حملہ آور cdnjs میں تبدیلیاں کر سکتا ہے اور بنیادی ڈھانچے کو مکمل طور پر سمجھوتہ کر سکتا ہے۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں