প্রেক্ষাপট
সাম্প্রতিক সময়ে, MistEye সিকিউরিটি মনিটরিং সিস্টেম Red Hat Cloud Services অর্গানাইজেশনের অধীনে কিছু npm প্যাকেজের অস্বাভাবিক ভার্সন সম্পর্কে তথ্য ধরেছে। এই ঘটনায় মোট 32টি npm প্যাকেজ এবং 96টি ভার্সন জড়িত। এই প্রবন্ধে আমরা এর মধ্যে 3টি স্থানীয় নমুনা নিয়ে গভীরভাবে অফলাইন বিশ্লেষণ করছি: এই নমুনাগুলি প্রতিলিপি নামস্থান বা typo-squatting প্যাকেজ নয়, বরং @redhat-cloud-services scope-এর বাস্তব প্যাকেজ ভার্সন; নমুনা সোর্স কোড থেকে নিশ্চিত হওয়া যায় যে, এদের tarball-এ ইনস্টলেশন পর্যায়ে স্বয়ংক্রিয়ভাবে ট্রিগার হওয়ার জন্য একাধিক স্তরের অবফুসকেটেড ম্যালওয়্যার লোডার ইনজেক্ট করা হয়েছে।
পুনর্স্থাপনের পর নিশ্চিত করা যায়: এই 3টি নমুনার মূল লোডে GitHub Actions Runner-এর মেমোরি পড়া, মাল্টি-ক্লাউড এবং স্থানীয় যাচাইকরণ ডেটা সংগ্রহ, GitHub API এর মাধ্যমে ডেটা বহির্গমন এবং ডেড-ড্রপ, GitHub workflow-এ ইনজেকশন, npm-এর মাধ্যমে স্বয়ংপ্রসারণ, Claude Code / VS Code / systemd / LaunchAgent-এর মাধ্যমে টিকে থাকা, Harden-Runner / StepSecurity-এর বিরুদ্ধে প্রতিরোধ, EDR / সুরক্ষা পণ্য শনাক্তকরণের কোডের ক্ষমতা রয়েছে। ক্ষমতার পরিধি অনুযায়ী, সম্ভাব্য প্রভাবিত পক্ষগুলির মধ্যে রয়েছে ডেভেলপার হোস্ট, CI/CD Runner, বিল্ড কনটেইনার, GitHub রিপোজিটরি, GitHub Actions workflow, npm প্রকাশ লিঙ্ক এবং ক্লাউড পরিবেশের যাচাইকরণ ডেটা; বাস্তবিক প্রভাবের পরিধি ইনস্টলেশন লগ, রিপোজিটরি অডিট এবং প্ল্যাটফর্ম-সদৃশ টেলিমেট্রির সাথে মিলিয়ে আরও নিশ্চিতকরণের প্রয়োজন।
কোড স্ট্রাকচার, প্রসারণ পথ এবং ক্ষমতার সংমিশ্রণ দেখে, এই ম্যালওয়্যারটি Shai-Hulud ম্যালওয়্যারের একটি ভ্যারিয়েন্ট।
মিস্টআই প্রতিক্রিয়া
MistEye হল SlowMist দ্বারা স্বাধীনভাবে উন্নয়নকৃত একটি Web3 হুমকি সংক্রান্ত তথ্য এবং ডাইনামিক সিকিউরিটি মনিটরিং সিস্টেম, যা সিকিউরিটি মনিটরিং এবং তথ্য সংগ্রহের ক্ষমতা একীভূত করে ব্যবহারকারীদের জন্য রিয়েল-টাইম ঝুঁকির সতর্কবার্তা এবং সম্পদ রক্ষার সুবিধা প্রদান করে।
Red Hat Cloud Services npm প্যাকেজ সাপ্লাই চেইন পয়জনিং ঘটনা এবং সংশ্লিষ্ট ম্যালওয়্যার নমুনাগুলি ধরা পড়ার পরে, MistEye সিস্টেম এই আক্রমণ চেইনের বিভ্রান্তিকর কাঠামো, লোড ডিক্রিপশন, ক্ষমতা পুনরুদ্ধার এবং IOC-এর জন্য একটি সিস্টেমগত বিশ্লেষণ ট্রিগার করেছে।
(https://enterprise.misteye.io/threat-intelligence/SM-2026-378450)
আক্রমণ চেইন ওভারভিউ
এই প্রবন্ধের টেকনিক্যাল অ্যানালিসিস অংশটি শুধুমাত্র 3টি npm tgz নমুনার লোকাল অফলাইন স্ট্যাটিক অ্যানালিসিসের উপর ভিত্তি করে প্যাকেজ, ডিকোড এবং ডিস্কাফুশন যাচাই করে।
এই যাচাইয়ের অধীনে পরীক্ষিত নমুনাগুলি নিম্নরূপ:
@redhat-cloud-services/frontend-components-config
সংস্করণ: 6.11.3
tgz SHA-256: 0c9c67ec40d5f23efa1ec3470d0ac88b4993ccc0e92be913fc29a337dfc4f060
@redhat-cloud-services/types
সংস্করণ: 3.6.1
tgz SHA-256: d543bb3cdf1569c2b3d38c8a4081ed746cfe78bf3236c2302704d79ab7fa9558
@redhat-cloud-services/rule-components
সংস্করণ: 4.7.2
tgz SHA-256: aaf00d06baa3c679b82452c50014e9824b8874e9ca2d150f19095f8de19ba90f
তিনটি নমুনার আক্রমণের প্রবেশদ্বার সম্পূর্ণ একই: package.json-এ scripts.preinstall = "node index.js" রয়েছে। এর অর্থ হল যদি ডেভেলপারের হোস্ট বা CI/CD পরিবেশে এই সংস্করণগুলি ইনস্টল করা হয়, তবে রুট ডিরেক্টরিতে index.js স্বয়ংক্রিয়ভাবে চালু হবে, ব্যবহারকারীকে স্পষ্টভাবে import করা বা ব্যবসায়িক কোড চালানোর প্রয়োজন হবে না।
তিনটি নমুনা একই কোর ম্যালওয়্যার পেলোড শেয়ার করে, কিন্তু বাইরের প্যাকিং প্যারামিটারগুলি ভিন্ন। অর্থাৎ, তিনটি নমুনা ভিন্ন ROT/Caesar স্থানান্তর মান এবং AES-GCM key/iv/tag ব্যবহার করে; এটি বাইরের প্যাকিং hash, ফিক্সড key বা ফিক্সড shift-এর উপর ভিত্তি করে স্ট্যাটিক ফিচারগুলিকে সরাসরি প্যাকেজের মধ্যে পুনঃব্যবহারযোগ্য করে তোলে। তবে ডিক্রিপ্ট করা Bun রানটাইম বুটস্ট্র্যাপার এবং কোর ম্যালওয়্যার পেলোডের hash সম্পূর্ণভাবে একই: একটি Bun রানটাইম পরিবেশ প্রস্তুতকরণের জন্য বুটস্ট্র্যাপিং অ্যাসিস্ট্যান্স মডিউল, অন্যটি আসলে ম্যালিশিয়াস ফাংশনগুলি ধারণকারী কোর পেলোড। এই প্রবন্ধে উভয়কে যথাক্রমে "Bun রানটাইম বুটস্ট্র্যাপার (সোর্সকোড ভেরিয়েবল _b)" এবং "কোর ম্যালওয়্যার পেলোড (সোর্সকোড ভেরিয়েবল _p)" হিসাবে উল্লেখ করা হয়েছে।
পুনর্স্থাপিত আক্রমণ শৃঙ্খলটি নিম্নরূপ:

টেকনিক্যাল অ্যানালিসিস
1. ইনপুট: npm লাইফসাইকেল স্ক্রিপ্ট হ্যাকিং
তিনটি নমুনাই package.json-এর preinstall লাইফসাইকেল হুকের মাধ্যমে আক্রমণ শৃঙ্খল ট্রিগার করে:
"স্ক্রিপ্টস": {
"preinstall": "node index.js"
}
প্রি-ইনস্টল নিপম ইনস্টলেশন পর্যায়ে স্বয়ংক্রিয়ভাবে চালু হবে। সাধারণ ফ্রন্টএন্ড কম্পোনেন্ট, টাইপ ডিফিনিশন বা রুলস কম্পোনেন্ট প্যাকেজের জন্য, ইনস্টলেশন পর্যায়ে সাধারণত রুট ডিরেক্টরিতে একটি বড় জাভাস্ক্রিপ্ট ফাইল চালানোর প্রয়োজন হয় না; এটিই সবচেয়ে সরাসরি অস্বাভাবিকতার সংকেত।
নমুনা স্তরের প্রমাণ নিম্নরূপ:
@redhat-cloud-services/frontend-components-config@6.11.3
- মূলঃ lib/index.js
- ফাইলস ক্ষেত্র: ["/lib", "/bin"]
- রুট ডিরেক্টরি index.js SHA-256: 545a1838c66e1771f58d84a17b3e1841e5eeab91a73f4ccc59c9492450a6d9c0
@redhat-cloud-services/types@3.6.1
- মূল:index.d.ts
- ফাইলস ক্ষেত্র: সেট করা হয়নি
- রুট ডিরেক্টরি index.js SHA-256: b86c5ae9e95bd841a595440faa3eb6317441e746f241ae8fd641ab59ed1d1966
@redhat-cloud-services/rule-components@4.7.2
- মূলঃ index.js
- ফাইলস ক্ষেত্র: সেট করা হয়নি
- রুট ডিরেক্টরি index.js SHA-256: 1a30a9abe20bab121aaa75ed040565af14e6cdfb745609ee0e7b94a2d814fb9c
এখানে, frontend-components-config@6.11.3-এর files ফিল্ড শুধু "/lib" এবং "/bin" ঘোষণা করে, কিন্তু tarball-এর রুট ডিরেক্টরিতে অতিরিক্ত index.js রয়েছে যা preinstall দ্বারা কল করা হয়। এই অসামঞ্জস্যতা শুধুমাত্র এই নমুনায় প্রযোজ্য; types@3.6.1 এবং rule-components@4.7.2-এ files ফিল্ড সেট করা নেই, তাই এই অসামঞ্জস্যতাকে সমস্ত নমুনার জন্য সাধারণীকরণ করা হয়নি।
২. প্রথম স্তর: সংখ্যার অ্যারে + ROT/সিজার বর্ণ প্রতিস্থাপন
তিনটি নমুনার রুট ডিরেক্টরির index.js ফাইলগুলি সবই অত্যন্ত বড় একক লাইনের JavaScript ফাইল, যাদের কাঠামো একই এবং মূল অংশটি try { eval(...) } catch (...) ওয়্যাপার:
এই ওয়াপারটি প্রথমে বিশাল সংখ্যার অ্যারেকে String.fromCharCode ব্যবহার করে স্ট্রিংয়ে পুনরুদ্ধার করে, তারপর স্ট্রিংয়ের ইংরেজি বর্ণগুলিতে ROT/Caesar সরানো প্রয়োগ করে, এবং শেষে ডিকোড করা ফলাফলটিকে eval-এর মাধ্যমে বাস্তবায়ন করে। ত্রুটি প্রক্রিয়াকরণ শুধুমাত্র "wrapper:" প্রিফিক্স প্রদর্শন করে, যাতে ইনস্টলেশন ব্যর্থ হলে ত্রুটির প্রকটতা কমে যায়।
নিম্নলিখিত তিনটি নমুনার বাহ্যিক সরণ মান এবং Stage 2 hash:
frontend-components-config@6.11.3
index.js আকার: 4,294,798 বাইট
ROT/সিজার শিফট: 10
ধাপ ২ SHA-256: b19c2fd48535c8c40aeb3e627ce92775f33ef9292611767bb1236c238e6f90cc
টাইপস@3.6.1
index.js আকার: 4,135,588 বাইট
ROT/Caesar shift: 4
ধাপ ২ SHA-256: 9c0425aa6e6d7792ac38d24f3e7245f42fcaa553ddfeb6bd97677017f10c3b75
rule-components@4.7.2
index.js আকার: 4,294,336 বাইট
ROT/Caesar shift: 11
ধাপ ২ SHA-256: d590bd375d95e4ac072b7ebc1fc4489bcaf5f20a939e92486267aa398bcf1e5d
৩. দ্বিতীয় স্তর: AES-128-GCM দিয়ে বান বুটস্ট্র্যাপার এবং কোর লোড ডিক্রিপ্ট করা
ROT/Caesar ডিকোড করা স্টেজ 2 কোডটি Node.js crypto.createDecipheriv ব্যবহার করে AES-128-GCM (অ্যাডভান্সড এনক্রিপশন স্ট্যান্ডার্ড - গ্যালোয়েস/কাউন্টার মোড) ডিক্রিপশন করে এবং setAuthTag দিয়ে অথেনটিকেশন ট্যাগ সেট করে। ডিক্রিপশনের লক্ষ্য দুটি পরবর্তী উপাদান—Bun রানটাইম বুটস্ট্র্যাপার এবং কোর ম্যালওয়্যার পেলোড।
এর মধ্যে, Bun রানটাইম বুটস্ট্র্যাপার Bun রানটাইম পরিবেশ শনাক্ত, অবস্থান বা প্রস্তুত করে, যাতে পরবর্তী কোড Bun-এর মাধ্যমে কার্যকর হতে পারে; কীভাবে ম্যালওয়্যার লোড হয় তা হল আক্রমণ শৃঙ্খলের মূল অংশ, যা পরবর্তী যাচাইকরণ সংগ্রহ, GitHub/npm প্রসারণ, স্থায়িত্ব, প্রতিরোধ প্রতিরোধ এবং এম্বেডেড সম্পদ ডিক্রিপশনের মতো প্রধান ম্যালওয়্যার ক্ষমতা অন্তর্ভুক্ত করে।
তিনটি নমুনার প্রতিটিতে এই দুটি উপাদানকে ভিন্ন ভিন্ন AES-128-GCM কী, ইনিশিয়াল ভেক্টর এবং অথেনটিকেশন ট্যাগ ব্যবহার করে এনক্রিপ্ট করা হয়েছিল, কিন্তু ডিক্রিপ্ট করার পরে তিনটি Bun রানটাইম বুটস্ট্র্যাপারের SHA-256 হ্যাশ ac2a2208e1726e008be6c73dc0872d9bba163319259dff1b62055ac933ca46b6 এবং তিনটি কোর ম্যালওয়্যার পেলোডের SHA-256 হ্যাশ 0dc06ecdaa63fe24859cfd955053c23245c536e4733480239d14bebf12688e35। এটি নির্দেশ করে যে আক্রমণকারীরা বিভিন্ন npm প্যাকেজে বাইরের প্যাকেটিং প্যারামিটারগুলি পরিবর্তন করেছিলেন, কিন্তু একই কোর ম্যালওয়্যার উপাদানগুলি পুনরায় ব্যবহার করেছিলেন।
ডিক্রিপ্ট করার পর, স্টেজ 2 কোর ম্যালওয়্যার লোড কে /tmp-এ লিখে বানের মাধ্যমে এক্সিকিউট করে এবং পরে অস্থায়ী ফাইলগুলি মুছে ফেলে। তিনটি নমুনার পুনরুদ্ধারকৃত বাস্তব লজিক নিম্নরূপ:
অতএব, তিনটি নমুনায় যাচাইযোগ্য অস্থায়ী ফাইল প্যাটার্ন হল:
/tmp/p.js
Bun রানটাইম বুটস্ট্র্যাপের আকার 898 বাইট, তিনটি নমুনার হ্যাশ সম্পূর্ণ একই:
ac2a2208e1726e008be6c73dc0872d9bba163319259dff1b62055ac933ca46b6
Bun রানটাইম বুটস্ট্র্যাপার হল child_process.execSync, fs.existsSync, fs.mkdtempSync, fs.chmodSync, os.platform(), os.arch(), getBunPath() ইত্যাদি লজিক সমন্বিত, যা Bun রানটাইম পরিবেশকে খুঁজে বা প্রস্তুত করে। অর্থাৎ, স্টেজ 2 শুধুমাত্র ধরে নেয় না যে সিস্টেমে গ্লোবাল Bun ইনস্টল করা আছে; Bun রানটাইম পথের বাইরে, এটি প্রথমে Bun রানটাইম বুটস্ট্র্যাপার লোড করে, তারপর getBunPath() কল করে Bun-এর মাধ্যমে কোর ম্যালওয়্যার লোড চালু করে।
৪. তৃতীয় স্তর: obfuscator.io স্ট্রিং টেবিল
এটি সরাসরি পড়া যায় এমন পরিষ্কার জাভাস্ক্রিপ্ট নয়, বরং obfuscator.io স্টাইলের স্ট্রিং টেবিল অবফুসকেশনের মাধ্যমে আরও প্রক্রিয়াকৃত হয়েছে। এই স্তরটি বহু স্ট্রিংকে একটি অ্যারেতে সংগ্রহ করে এবং রানটাইম ইনডেক্স এবং রোটেশন লজিকের মাধ্যমে এগুলি পুনরুদ্ধার করে, যার ফলে বিশ্লেষকদের স্ট্রিং টেবিল পুনরুদ্ধার না করা পর্যন্ত পরবর্তী গুরুত্বপূর্ণ API, পথ এবং কনফিগারেশনের নামগুলি সরাসরি খুঁজে পাওয়া যায় না।
৫. চতুর্থ স্তর: B5 কাস্টম স্ট্রিং এনক্রিপশন
obfuscator.io স্ট্রিং টেবিল পুনরুদ্ধারের পরেও, কোর ম্যালওয়্যার লোডের মধ্যে একটি B5 কাস্টম স্ট্রিং এনক্রিপশন রয়েছে। প্যারামিটারগুলি নিশ্চিত করা হয়েছে:
- KDF: PBKDF2 (পাসওয়ার্ড-ভিত্তিক কী ডেরিভেশন ফাংশন 2)
- হ্যাশ ফাংশন: SHA-256
- পুনরাবৃত্তির সংখ্যা: 200000
- কী দৈর্ঘ্য: 32 বাইট
- ডিক্রিপশন রাউন্ড: 3
- পাসওয়ার্ড: ba2c6ddb3672bdd6a611e6850b4f700b52aed3dab2f1b3d5f8c839d4a157a709
- salt: 5b26508dc0f1075a7c0b4d8aa464487e
ডিক্রিপ্ট করার পর ফলাফল নিম্নরূপ:
এর মধ্যে, B5 ডিক্রিপ্ট করার পর বিভিন্ন কী প্লেইন টেক্সট স্ট্রিং দেখা যায়। লক্ষ্য করুন, কিছু স্ট্রিং মূলত obfuscator.io স্ট্রিং টেবিলে অবস্থিত ছিল, এবং শুধুমাত্র “স্ট্রিং টেবিল প্রতিস্থাপন + B5 ডিক্রিপশন” দুটি ধাপই সম্পন্ন হলেই এগুলি সরাসরি grep-এর জন্য উপলব্ধ হয়:
6. অতিরিক্ত এম্বেডেড স্তর: AES-256-GCM + gzip
কোর ম্যালিশিয়াস লোডের ভিতরে AES-256-GCM এনক্রিপ্টেড এবং gzip কম্প্রেসড এমবেডেড রিসোর্স রয়েছে। রিস্টোর লজিক ব্যবহার করে:
কী এম্বেডেড সম্পদগুলি ফাংশন অনুযায়ী তিনটি শ্রেণিতে বিভক্ত করা হয়েছে:
ক্রস-প্ল্যাটফর্ম মেমোরি পড়া:
এই ধরনের সংস্থানগুলি চলমান প্রক্রিয়ার মেমোরি পড়তে ব্যবহার করা হয়। সাধারণ ফাইলের কী এবং টোকেন ফাইল পরীক্ষা করে খুঁজে পাওয়া যায়, কিন্তু CI/CD Runner বা ডেভেলপমেন্ট টুলগুলি চলাকালীন কিছু সংবেদনশীল মানকে মেমোরিতে অস্থায়ীভাবে সংরক্ষণ করে। আক্রমণকারীরা Linux, Windows, macOS তিনটি প্ল্যাটফর্মের জন্য মেমোরি পড়ার স্ক্রিপ্ট এমবেড করে, যাতে বিভিন্ন সিস্টেমে প্রক্রিয়ার মেমোরি থেকে এই অস্থায়ীভাবে উপস্থিত secret-গুলি ধরে ফেলা যায়।

পার্সিস্টেন্ট কনফিগারেশন:
এই ধরনের সম্পদগুলি "ব্যাকডোর ট্রিগার পয়েন্ট" রাখার জন্য ব্যবহৃত হয়। অর্থাৎ, যদিও প্রাথমিক npm ইনস্টলেশন প্রক্রিয়া শেষ হয়ে গেছে, আক্রমণকারীরা চায় যে ম্যালওয়্যার কোডটি ডেভেলপাররা পরবর্তীতে প্রকল্পটি খুলবেন, এডিটরটি শুরু করবেন, Claude Code সেশনে প্রবেশ করবেন, বা সিস্টেমে পুনরায় লগইন করার পরেও পুনরায় চলবে। তাই এই সম্পদগুলি যথাক্রমে প্রকল্প-স্তরের কনফিগারেশন এবং ইউজার-স্তরের অটো-স্টার্ট মেকানিজমকে লক্ষ্য করে: প্রকল্প-স্তরের কনফিগারেশনটি আরও লুকানো, এবং সিস্টেম-স্তরের সার্ভিসগুলি দীর্ঘমেয়াদী চলনের জন্য উপযুক্ত।

C2 এবং প্রচার:
এই এম্বেডেড সম্পদগুলি পরবর্তী কন্ট্রোল লিঙ্ক এবং রিপোজিটরি সিক্রেট স্থানান্তরের জন্য ব্যবহৃত হয়। YZ ডিক্রিপ্ট করলে এটি GitHub commit সার্চ মনিটর হয়ে যায়, যা নিয়মিত firedalazer . ফরম্যাটের commit message সার্চ করে, সাইনেচার যাচাই করে এবং রিমোট Python কন্টেন্ট ডাউনলোড ও এক্সিকিউট করে; zZ ডিক্রিপ্ট করলে এটি "Run Copilot" নামের একটি GitHub Actions workflow টেমপ্লেট হয়ে যায়, যা ${{ toJSON(secrets) }}-কে format-results.txt-এ লিখে artifact হিসেবে আপলোড করে। প্রথমটি পরবর্তী টাস্কগুলির জন্য গ্রহণ/এক্সিকিউশন লিঙ্ক প্রদান করে, দ্বিতীয়টি GitHub Actions artifact-এর মাধ্যমে repository secrets স্থানান্তরের জন্য টেমপ্লেট প্রদান করে; বাস্তব workflow ইনজেকশন, রানিংয়ের জন্য অপেক্ষা এবং artifact ডাউনলোড মূল লোডের সঙ্গে সংযুক্ত GitHub API লজিক দ্বারা সম্পন্ন হয়।

মূল ক্ষতিকারক লোড ক্ষমতা বিশ্লেষণ
বহুস্তরীয় ডিকনফিউশন সম্পন্ন হওয়ার পরে, নমুনাটি চূড়ান্তভাবে মূল ম্যালওয়্যার লোড মুক্ত করে এবং এটি বাস্তবায়িত হয়। নিম্নলিখিত সমস্ত বিশ্লেষণ মূল ম্যালওয়্যার লোড মডিউলের উপর কেন্দ্রীভূত, যা ডেটা সংগ্রহ, বাইরে পাঠানো, প্রসারণ, স্থায়িত্ব এবং প্রতিরোধ—এই পাঁচটি ধাপে বিভক্ত।
1. গিটহাব অ্যাকশনস রানার মেমোরি পড়া:
লিনাক্স, উইন্ডোজ, ম্যাকওএস তিনটি প্ল্যাটফর্মের মেমোরি পড়ার স্ক্রিপ্ট সহ নমুনা এমবেড করা হয়েছে, যা ক্রস-প্ল্যাটফর্ম ডাম্প ক্ষমতা প্রদান করে। লিনাক্স বাস্তবায়নটি লক্ষ্য প্রক্রিয়ার /proc//maps এবং /proc//mem পড়ে মেমোরি এক্সট্র্যাকশন সম্পন্ন করে:
গিটহাব একশনস লিনাক্স রানারের জন্য কোর ম্যালিশিয়াস লোডের সক্রিয় ট্রিগার লজিক: যখন GITHUB_ACTIONS === "true" এবং RUNNER_OS === "Linux", কোডটি Runner.Worker প্রক্রিয়াটি খুঁজে বের করে এবং মেমোরি ডাম্প করে, তারপর ডাম্প থেকে "":{"value":"","isSecret":true} ফরম্যাটের masked secrets এক্সট্র্যাক্ট করে। তিনটি নমুনায় সক্রিয়ভাবে সংগৃহীত পথগুলি লিনাক্স রানারের উপর ফোকাস করে, তবে তিনটি প্ল্যাটফর্মের স্ক্রিপ্টই এমবেড করা হয়েছে।
2. মাল্টি-ক্লাউড এবং ডেভেলপার স্থানীয় যাচাইকরণ ডেটা সংগ্রহ:
মূল ক্ষতিকারক লোড সিস্টেমগত যাচাইকরণ তথ্য সংগ্রহ মডিউল অন্তর্ভুক্ত করে, যা ক্লাউড প্রদানকারী, CI পরিবেশ, ডেভেলপারদের স্থানীয় কনফিগারেশন, GitHub CLI, পাসওয়ার্ড ম্যানেজার এবং ওয়ালেট ফাইলগুলিকে কভার করে।
ক্লাউড প্রদানকারীর যাচাইকরণ লক্ষ্যগুলি নিম্নরূপ:

AWS মডিউলে ECS / IMDS (Instance Metadata Service) / STS WebIdentity-এর সংশ্লিষ্ট লজিকও অন্তর্ভুক্ত রয়েছে।
ডেভেলপার স্থানীয় প্রমাণীকরণ নিম্নলিখিত লক্ষ্যগুলিকে কভার করে:

পাসওয়ার্ড ম্যানেজার লজিকটি সোর্স কোডে shell স্ট্রিং কনক্যাটেনেশনের পরিবর্তে runCommand(command, args) অ্যারে হিসাবে বাস্তবায়িত হয়েছে।
উপরের যোগাযোগ সংগ্রহ মডিউলটি ক্লাউড প্ল্যাটফর্ম থেকে ডেভেলপারের স্থানীয় পর্যন্ত বিস্তৃত লক্ষ্যকে কভার করে; সংগৃহীত সংবেদনশীল ডেটা নিম্নলিখিত পদ্ধতির মাধ্যমে বাইরে পাঠানো হয়।
3. গিটহাব এপিআই এক্সট্রা এবং ডেড-ড্রপ:
মূল ক্ষতিকারক লোড হিসাবে গিটহাব এপিআই ব্যবহার করা হয় ডেটা চুরির জন্য। অনুরোধের ইউজার-এজেন্ট হিসাবে python-requests/2.31.0 প্রতারণামূলকভাবে সেট করা হয়, এবং x-oauth-scopes (repo, public_repo বা workflow সহ) টোকেন যাচাইয়ের পরে ডেটা চুরির অপারেশন সম্পাদন করা হয়: রিপোজিটরি তৈরি করা (description স্থির Miasma: The Spreading Blight), চুরি করা ডেটা base64 এনকোড করে PUT /repos///contents/results/ এর মাধ্যমে লিখে ফেলা।
এছাড়াও, লোডটি GitHub কমিট অনুসন্ধানের উপর ভিত্তি করে একটি ডেড-ড্রপ মেকানিজম বাস্তবায়িত করে, যা "thebeautifulmarchoftime" (বা "thebeautifulsnadsoftime") মার্কারটি অনুসন্ধান করে C2 নির্দেশাবলী পায়:
let result = await X9("thebeautifulmarchoftime ", xZ);
YZ.bin একটি স্বাধীন GitHub কমিট মনিটর, যা 3600 সেকেন্ড ব্যবধানে firedalazer . ফরম্যাটের কমিট মেসেজ পুনরাবৃত্তি করে, সাইনেট যাচাইয়ের পরে দূরবর্তী Python কন্টেন্ট ডাউনলোড এবং এক্সিকিউট করে। এটি মূল এক্সট্রা চ্যানেল থেকে স্বাধীন একটি পরবর্তী নিয়ন্ত্রণ লিঙ্ক গঠন করে।
সোর্স কোডে একটি HTTP POST সেন্ডার কনফিগারেশন রয়েছে যা api.anthropic.com এবং v1/api এন্ডপয়েন্টগুলিকে লক্ষ্য করে। এই কনফিগারেশনের noop ফিল্ডটি true হিসাবে সেট করা আছে, যার অর্থ বাহ্যিকভাবে পরিবর্তন না করা পর্যন্ত এই সেন্ডারটি কোনো বাস্তব নেটওয়ার্ক রিকোয়েস্ট পাঠাবে না। তাই স্ট্যাটিক বিশ্লেষণ শুধুমাত্র এই কোড স্ট্রাকচারটির উপস্থিতি নিশ্চিত করতে পারে, এটি Anthropic API-এর সক্রিয় বাইরের প্রেরণের প্রমাণ দিতে পারে না।
4. গিটহাব রিপোজিটরি এবং ওয়ার্কফ্লো সংক্রমণ:
মূল ক্ষতিকারক লোডটি GitHub REST / GraphQL API ব্যবহার করে রিপোজিটরির git অবজেক্টগুলি পরিচালনা করতে পারে:

একটি ক্ষতিকারক ওয়ার্কফ্লোকে রিলিজ নামে প্রকাশ করে id-token: write অনুমতি চাওয়া হয়, যা OIDC (OpenID Connect) পথের মাধ্যমে npm প্রকাশ টোকেনের জন্য ব্যবহার করা হয়। OIDC পথের পরিবেশ চলক এবং ইন্টারফেস হল ACTIONS_ID_TOKEN_REQUEST_TOKEN এবং ACTIONS_ID_TOKEN_REQUEST_URL, যেখানে audience হিসাবে npm:registry.npmjs.org সেট করা হয়। সোর্স কোডের মাধ্যমে নিশ্চিত করা যায় যে payload-এ GitHub রিপোজিটরিতে workflow ইনজেক্ট করার এবং OIDC / npm trusted publishing ব্যবহার করে প্রকাশের অনুমতি পাওয়ার ক্ষমতা রয়েছে।
git refs এর মাধ্যমে ওয়ার্কফ্লো ইনজেক্ট করার পাশাপাশি, লোডে একটি আরও অদৃশ্য গোপনীয়তা স্থানান্তর পদ্ধতি অন্তর্ভুক্ত রয়েছে: একটি মিথ্যা GitHub Actions ওয়ার্কফ্লো, যা Run Copilot হিসাবে প্রতিকৃতি করে, ${{ toJSON(secrets) }} কে format-results.txt-এ লিখে artifact হিসাবে আপলোড করে। সরাসরি secrets কে রিপোজিটরির কন্টেন্টে লিখার তুলনায়, এই পদ্ধতিটি ওয়ার্কফ্লো রানের আউটপুটের মাধ্যমে ডেটা স্থানান্তরের দিকে বেশি ঝুঁকে, এবং সাধারণ কোড diff রিভিউতে চূড়ান্ত এক্সপোর্ট করা secrets-এর বিষয়বস্তু সরাসরি দেখা যায়না।
5. আর্টিফ্যাক্টের মাধ্যমে সিক্রেটস স্থানান্তর করে কোপিলট ওয়ার্কফ্লো চালান:
zZ.bin একটি গিটহাব অ্যাকশন ওয়ার্কফ্লো যা কোপিলটের মতো দেখায়, যা ${{ toJSON(secrets) }} কে format-results.txt-এ লিখে আর্টিফ্যাক্ট হিসেবে আপলোড করে।
সংশ্লিষ্ট GitHub API আচরণ হল: অস্থায়ী branch তৈরি/আপডেট করা → workflow blob লিখা → workflow run এর জন্য অপেক্ষা করা → artifact zip ডাউনলোড করা → format-results.txt পড়া → workflow run এবং অস্থায়ী branch মুছে ফেলা। সংশ্লিষ্ট হান্টিং কীওয়ার্ডগুলি হল: Run Copilot, VARIABLE_STORE, format-results, chore/add-codeql-static-analysis, .github/workflows/codeql.yml।
6. npm স্বয়ংপ্রচার:
মূল ক্ষতিকারক লোড দুটি স্বতন্ত্র npm প্রকাশ / প্রচার পথ ধারণ করে।
npm টোকেন পাথ: GET /-/npm/v1/tokens এর মাধ্যমে বর্তমান ব্যবহারকারীর npm টোকেনগুলি তালিকাভুক্ত করুন, যেসব টোকেনের bypass_2fa === true এবং প্যাকেজ লেখার অনুমতি রয়েছে সেগুলি ছাঁটাই করুন, এবং এই টোকেনগুলি ব্যবহার করে অটোমেশন প্রকাশ করুন। bypass_2fa হল টোকেন মেটাডেটা ফিল্ড, প্রকাশ বডি প্যারামিটার নয়।
গিটহাব অ্যাকশনস OIDC পথ: লোড পড়ে ACTIONS_ID_TOKEN_REQUEST_TOKEN এবং ACTIONS_ID_TOKEN_REQUEST_URL পরিবেশ চলকগুলি, npm:registry.npmjs.org এর জন্য OIDC টোকেন অনুরোধ করে, npm OIDC টোকেন এক্সচেঞ্জ ইন্টারফেসের মাধ্যমে প্রকাশের অনুমতি পায়।
দূষিত টারবলের অপারেশন প্রক্রিয়াটি হল: আনপ্যাক → ম্যালিশিয়াস index.js লিখুন → package.json পরিবর্তন করুন:
এখানে দুটি প্রবেশদ্বার রয়েছে: তিনটি স্থানীয় আপলোড নমুনার নিজস্ব ব্যবহারের জন্য preinstall: "node index.js" — এই ক্ষেত্রে পরিবেশ ইনস্টল করার জন্য Bun-এর পূর্বাবস্থা প্রয়োজন হয় না, কারণ Node.js কে প্রাথমিক প্রবেশদ্বার হিসাবে ব্যবহার করা আরও অদৃশ্য; অন্যান্য প্যাকেজগুলিকে স্বয়ংক্রিয়ভাবে দূষিত করার সময় preinstall: "bun run index.js" লেখা হয় এবং bun ডিপেনডেন্সি যোগ করা হয় — কারণ মূল ম্যালওয়্যার লোডের পরবর্তী লজিক Bun-এর রানটাইমের API-এর (যেমন Bun.gunzipSync এবং Bun.file) উপর নির্ভরশীল, এবং স্বয়ংক্রিয়ভাবে ছড়িয়েপড়ার পরিস্থিতিতে লক্ষ্য পরিবেশে Bun-এর উপস্থিতি নিশ্চিত করা প্রয়োজন।
7. পারসিস্টেন্স মেকানিজম:
মূল ক্ষতিকারক লোড চারটি স্থায়ী পদ্ধতি অন্তর্ভুক্ত করে, যা প্রকল্প ডিরেক্টরি এবং সিস্টেম-লেভেল অটো-স্টার্টকে কভার করে।
Claude Code সেশন শুরু হুক: সেশন শুরু হুকটি .claude/settings.json-এ এমবেড করা S8.bin দিয়ে লিখুন, যাতে প্রতিবার Claude Code সেশন শুরু হলে স্বয়ংক্রিয়ভাবে node .claude/setup.mjs চালানো হয়। ক্ষতিকারক বোঝা .claude/setup.mjs এবং .claude/index.js-এও লিখে ফেলা হয় (পথ ".claude/" + M0 দ্বারা যোগ করা হয়, M0 = "index.js")।
VS Code ফোল্ডারওপেন টাস্ক: এমবেডেড রিসোর্স EZ.bin কে .vscode/tasks.json-এ ফোল্ডারওপেন টাস্ক হিসেবে লিখুন, যাতে সংক্রান্ত প্রকল্প ফোল্ডার খোলার সময় একই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে চালু হয়। একইসাথে .vscode/setup.mjs-এও লিখুন।
কিটি-মনিটর (systemd / LaunchAgent): এম্বেডেড রিসোর্স RZ.bin ব্যবহার করে পার্মানেন্ট সার্ভিস ইনস্টল করা হয়, ফাইলগুলি বিতরণ করা হয় /.local/share/kitty/cat.py, /.config/systemd/user/kitty-monitor.service (Linux) এবং ~/Library/LaunchAgents/com.user.kitty-monitor.plist (macOS)। ম্যালওয়্যার লোড তৈরি করে /tmp/kitty- ডিরেক্টরি, YZ.bin (GitHub commit monitor) cat.py-এ লিখে RZ.bin দ্বারা ইনস্টল করে।
gh-token-monitor (systemd / LaunchAgent): jZ.bin সংস্থান এমবেড করে GitHub টোকেন মনিটরিং সার্ভিস ইনস্টল করা হয়েছে, ফাইলগুলি অবস্থিত /.local/bin/gh-token-monitor.sh, /.config/gh-token-monitor/ ডিরেক্টরি এবং সংশ্লিষ্ট systemd / LaunchAgent পথে। এই মনিটরটি পরীক্ষা করে যে GitHub টোকেন 40x স্ট্যাটাস কোড ফেরত দেয় কিনা এবং npm প্যাকেজ @cap-js/openapi@1.4.1-এর মেটাডেটা অস্বাভাবিক কিনা, এবং ট্রিগার হলে handler কার্যকর করে:
এর অর্থ হল যখন monitor গিটহাব API থেকে 40x স্ট্যাটাস কোড পর্যবেক্ষণ করে, যেমন token বাতিল, অকার্যকর বা অনুমতি অবস্থা অস্বাভাবিক, তখন ম্যালিশিয়াস স্ক্রিপ্টটি প্রবেশিত handler কে কার্যকর করে। এই প্রবন্ধের তিনটি নমুনায় পুনরুদ্ধারকৃত handler হল rm -rf ~/; rm -rf ~/Documents। প্রক্রিয়াকরণের সময়, সম্ভাব্যভাবে payload চলমান হোস্টের উপর সরাসরি token বাতিল করা উচিত নয়—প্রথমে হোস্টটি আলাদা করুন, ধারাবাহিকতা এবং চলমান প্রক্রিয়াগুলি পরিষ্কার করুন, তারপর একটি পরিষ্কার পরিবেশে যাচাইকরণের যোগ্যতা পরিবর্তন করুন।
8. হার্ডেন-রানার / স্টেপসিকিউরিটি প্রতিদ্বন্দ্বিতা:
কোর ম্যালিশিয়াস লোড অন্তর্ভুক্ত করে StepSecurity Harden-Runner-এর জন্য ডিটেকশন এবং ধ্বংসের লজিক, যা নিম্নলিখিত ধাপগুলির মাধ্যমে CI/CD প্রোটেকশন বাইপাস করে:
- ডকার সকেট /var/run/docker.sock উপলব্ধ কিনা পরীক্ষা করুন;
- ডকার কন্টেইনারগুলি তালিকাভুক্ত করুন, যেগুলিতে নাম বা ইমেজে harden-runner / stepsecurity কীওয়ার্ড মিলে যায়;
- POST /containers//kill এর মাধ্যমে মেলা কন্টেইনারটি বন্ধ করুন;
- একটি প্রিভিলেজড অ্যালপাইন কন্টেইনার তৈরি করুন, যেখানে sudoers কে runner ALL=(ALL) NOPASSWD:ALL হিসাবে পুনর্লিখন করুন;
- /etc/hosts-এ স্টেপসিকিউরিটি সম্পর্কিত ডোমেইনগুলির অবৈধ রেজোলিউশন লিখুন;
- /etc/resolv.conf কে 8.8.8.8 এবং 1.1.1.1 দিয়ে ওভাররাইট করুন।
এই প্রতিদ্বন্দ্বী যুক্তি বোঝায় যে নমুনাটি বিশেষভাবে StepSecurity দ্বারা সুরক্ষিত CI/CD পরিবেশের জন্য অ্যাডাপ্ট করা হয়েছে।
9. ইডিআর / সুরক্ষিত পণ্য শনাক্তকরণ, পরিবেশ বিচার এবং এড়ানো:
কোর ম্যালিশিয়াস লোড বিভিন্ন EDR (এন্ডপয়েন্ট ডিটেকশন অ্যান্ড রিসপন্স) / সিকিউরিটি পণ্যের প্রসেস নাম এবং ইনস্টলেশন পাথ শনাক্ত করে:

লোডে একটি এলাকা এড়ানোর যুক্তি অন্তর্ভুক্ত রয়েছে: LC_ALL, LC_MESSAGES, LANGUAGE, LANG পরিবেশ চলকগুলি শনাক্ত করা হয়, ছোট হাতের অক্ষরে রূপান্তরিত হলে যদি এগুলি ru দিয়ে শুরু হয়, তবে কার্যক্রম বাতিল করা হয়। CI পরিবেশ চিহ্নিতকরণ GitHub Actions, GitLab CI, Travis CI, CircleCI, Jenkins, AWS CodeBuild, Buildkite, AppVeyor, Bitbucket, Drone, TeamCity, Cirrus CI ইত্যাদির জন্য সমর্থিত। রানটাইমে ব্যবহৃত স্ট্যাটাস ট্যাগগুলি হল tmp.0987654321.lock, __IS_DAEMON (বিচ্ছিন্ন daemon উপপ্রক্রিয়াকে চিহ্নিত করে), SKIP_DOMAIN (domain sender পথটি এড়ানোর জন্য), /tmp/kitty-*, cat.py এবং /var/tmp/.gh_update_state।
প্রভাব বিশ্লেষণ
সোর্স কোড ক্ষমতা থেকে দেখলে, এই তিনটি নমুনার প্রভাব শুধুমাত্র npm ইনস্টলেশনের একবারের বিশেষ কার্যক্রমের সীমানা পার হয়েছে। এর প্রকৃত ঝুঁকি চারটি স্তরে বিভক্ত:
ডেভেলপার হোস্ট লেভেল। নমুনাগুলি পরিবেশ চলক, .npmrc, .pypirc, SSH কী, Docker কনফিগারেশন, .env, GitHub CLI টোকেন, পাসওয়ার্ড ম্যানেজার ডেটা এবং ওয়ালেট ফাইল সংগ্রহ করবে এবং Claude Code, VS Code, systemd ইউজার সার্ভিস বা macOS LaunchAgent এর মাধ্যমে পরবর্তী ট্রিগারিং ক্ষমতা বজায় রাখবে।
CI/CD রানার লেয়ার। নমুনাটি GitHub Actions Linux রানার শনাক্ত করে, Runner.Worker প্রক্রিয়ার মেমোরি পড়ে মাস্কড সিক্রেট বের করে; একইসাথে StepSecurity Harden-Runner-এর বিরুদ্ধে লড়াইয়ের যুক্তি রাখে, যা CI/CD প্রোটেকশন কম্পোনেন্টগুলিকে বিনষ্ট বা বাইপাস করার চেষ্টা করে।
গিটহাব সংগঠন এবং রিপোজিটরি স্তরে। নমুনা গিটহাব API ব্যবহার করে রিপোজিটরি তৈরি করতে পারে, contents/results/ এ লিখতে পারে, git refs/blobs/trees/commits অপারেশন করতে পারে, ম্যালিশিয়াস workflow ইনজেক্ট করতে পারে এবং Run Copilot workflow + artifact এর মাধ্যমে secrets স্থানান্তর করতে পারে।
npm ইকোসিস্টেমের প্রচার স্তর। নমুনা হিসাবে package write অনুমতি এবং bypass_2fa === true সহ npm টোকেন বাছাই করা যেতে পারে, অথবা GitHub Actions OIDC / npm বিশ্বস্ত প্রকাশনা পথ ব্যবহার করে প্রকাশনা ক্ষমতা অর্জন করা যেতে পারে; তারপর লক্ষ্য tarball ডাউনলোড করুন, ম্যালিশিয়াস loader যোগ করুন, preinstall পরিবর্তন করুন, Bun ডিপেনডেন্সি যোগ করুন, patch সংস্করণ আপগ্রেড করুন এবং প্রকাশ করুন, যার ফলে npm-এর মধ্যে স্ব-প্রচারের শৃঙ্খলা গঠিত হয়।
সারাংশ
তিনটি নমুনার সোর্স কোড প্রমাণ দেখায় যে এই ম্যালওয়্যার প্যাকেজটি শুধুমাত্র ইনস্টলেশন সময়ের জন্য ডেটা চুরি করার স্ক্রিপ্ট নয়, বরং একটি মাল্টি-স্টেজ লোডার এবং পূর্ণাঙ্গ ইমপ্ল্যান্টের সংমিশ্রণ: বাহ্যিক স্তরটি প্যাকেজের উপর ভিত্তি করে র্যান্ডমাইজড, Bun রানটাইম এনভায়রনমেন্ট গাইডার এবং কোর ম্যালিশিয়াস লোড একই রকম; মূল ইমপ্ল্যান্টটি পাসওয়ার্ড সংগ্রহ, CI secret এক্সট্র্যাকশন, GitHub / npm প্রচার, ধারাবাহিকতা এবং প্রতিরোধের বিরুদ্ধে লড়াইয়ের মতো অনেকগুলি ধাপকে কভার করে।
উচ্চ গোপনীয়তা সহ ইনপুট ডিজাইন। আক্রমণকারীরা ব্যবসায়িক কোডে ম্যালিশিয়াস লজিক ইনজেক্ট করে না, বরং npm লাইফসাইকেল স্ক্রিপ্টে কনফিউজড লোডার মাউন্ট করে। এই লোডারটি মূলত এমবেডেড পেলোড ডিক্রিপ্ট এবং এক্সিকিউট করার জন্য দায়ী, যার ফলে শুধুমাত্র ব্যবসায়িক সোর্স কোড রিভিউ দিয়ে প্রকৃত ক্ষমতা খুঁজে পাওয়া কঠিন।
একাধিক স্তরের নেস্টেড ডিকনফিউশন চেইন। ম্যালিশিয়াস পেলোডটি ডিজিটাল অ্যারে + ROT বর্ণ প্রতিস্থাপন, AES-128-GCM এনক্রিপশন, obfuscator.io অবফুসকেশন, B5 স্ব-বিকশিত স্ট্রিং এনক্রিপশন এবং AES-256-GCM + gzip এম্বেডেড লেয়ার—এই পাঁচটি স্তরে প্যাক করা হয়েছে। প্রতিটি স্তরের কী বা প্যারামিটারগুলি ভিন্ন প্যাকেজে স্বাধীনভাবে পরিবর্তনযোগ্য, যা স্ট্যাটিক ফিচারের উপর ভিত্তি করে ব্যাচ-লেভেল ডিটেকশনকে আরও কঠিন করে তোলে।
সম্পূর্ণ সংগঠনগত আক্রমণ ক্ষমতা। এই ইমপ্ল্যান্টটি GitHub Actions Runner মেমোরি পড়া, মাল্টি-ক্লাউড এবং লোকাল ক্রেডেনশিয়াল সংগ্রহ, GitHub API এর মাধ্যমে ডেটা বহন এবং ডেড-ড্রপ, GitHub রিপোজিটরি এবং ওয়ার্কফ্লো সংক্রমণ, npm-এর মাধ্যমে স্বয়ংক্রিয় প্রসারণ, টেকসই থাকা এবং প্রতিরোধের বিরুদ্ধে লড়াইয়ের ক্ষমতা রাখে। সোর্স কোডের গঠন থেকে দেখা যায় যে, এটি একটি একক ইনস্টলেশন থেকে শুরু করে রিপোজিটরি, CI/CD এবং npm প্রকাশের লিঙ্কগুলিতে আরও প্রসারিত হওয়ার জন্য কোডের পথগুলি ধারণ করে; প্রকৃতপক্ষে প্রসারণের পরিসরটি ইনস্টলেশন লগ, রিপোজিটরি অডিট এবং প্ল্যাটফর্ম-স্তরীয় টেলিমেট্রির সাথে মিলিয়েই নির্ণয় করা যাবে।
সোর্স কোডের প্রমাণ থেকে নিশ্চিত হওয়া যায়: তিনটি নমুনা সমস্তই preinstall এর মাধ্যমে স্বয়ংক্রিয়ভাবে ট্রিগার হয়েছে এবং একই মূল implant ডিক্রিপ্ট ও এক্সিকিউট করেছে। তবে, প্রকৃত ঘটনায় প্রাথমিক অ্যাক্সেস কীভাবে অর্জন করা হয়েছিল, শুধুমাত্র এই তিনটি tgz নমুনার উপর ভিত্তি করে প্রমাণ করা যায় না।
প্রস্তাবিত ব্যবস্থা
- প্রকল্প নির্ভরশীলতা, লকফাইল, ব্যক্তিগত রেজিস্ট্রি ক্যাশ এবং বিল্ড ক্যাশেতে ক্ষতিকারক সংস্করণ খুঁজে বার করুন এবং সরিয়ে ফেলুন।
- ইনস্টলেশন লগে প্রিইনস্টল, নোড ইনডেক্স.জেএস, বান রান, /tmp/p*.js, tmp.0987654321.lock উপস্থিত কিনা চেক করুন।
- যে হোস্টে এখনও পেলোড চলছে তাতে সরাসরি টোকেন বাতিল করবেন না। প্রথমে হোস্টটি আইসোলেট করুন, চলমান প্রক্রিয়া এবং পারসিস্টেন্স এলিমেন্টগুলি পরিষ্কার করুন, তারপর পরিষ্কার পরিবেশ থেকে GitHub, npm, ক্লাউড ক্রেডেনশিয়াল, Kubernetes, Vault, SSH, Docker registry, এবং পাসওয়ার্ড ম্যানেজার-সংশ্লিষ্ট টোকেনগুলি রোটেট করুন।
- গিটহাব রিপোজিটরির সাম্প্রতিক ব্রাঞ্চ, কমিট, ওয়ার্কফ্লো, আর্টিফ্যাক্ট এবং নতুন রিপোজিটরি পরীক্ষা করুন, বিশেষ করে Run Copilot, format-results, chore/add-codeql-static-analysis, .github/workflows/codeql.yml, OIDC_PACKAGES ইত্যাদি কীওয়ার্ডগুলির উপর মনোনিবেশ করুন।
- প্রোজেক্ট ডিরেক্টরির মধ্যে .claude/settings.json, .claude/setup.mjs, .vscode/tasks.json, এবং .vscode/setup.mjs ফাইলগুলি যোগ করা বা পরিবর্তন করা হয়েছে কিনা পরীক্ষা করুন।
- ব্যবহারকারী-স্তরের স্থায়ীত্ব পরীক্ষা করুন: /.local/share/kitty/cat.py, /.config/systemd/user/kitty-monitor.service, ~/Library/LaunchAgents/com.user.kitty-monitor.plist, gh-token-monitor সংশ্লিষ্ট ফাইল।
- npm প্রকাশ ইতিহাস পরীক্ষা করুন এবং অননুমোদিত প্যাচ সংস্করণ প্রকাশ থাকা কিনা নিশ্চিত করুন; এছাড়াও npm টোকেন মেটাডেটা অডিট করুন, যেখানে 2FA (দুই স্তরের যাচাইকরণ) বাইপাস করতে পারে এবং প্যাকেজ লেখার অনুমতি রয়েছে এমন টোকেনগুলির উপর মনোযোগ দিন।
- প্রদূষিত পরিবেশে তৈরি ডাউনস্ট্রিম আউটপুটের সম্পূর্ণতা অডিট করুন।
IOC
দুষ্টু ফাইল
ফাইলনাম: redhat-cloud-services-frontend-components-config-6.11.3.tgz MD5: 633ad8849a59e2bfb7a0fe589e816a07 SHA1: 675294612f455fe6a9acb195f0cbe3687d8e2e34 SHA256: 0c9c67ec40d5f23efa1ec3470d0ac88b4993ccc0e92be913fc29a337dfc4f060
ফাইলনাম: redhat-cloud-services-types-3.6.1.tgz MD5: 9e6c5af01438b52c9a411686c1f1b8ff SHA1: 88d098c8d96e9ae17550e9798c3b62c420464b8c SHA256: d543bb3cdf1569c2b3d38c8a4081ed746cfe78bf3236c2302704d79ab7fa9558
ফাইলনাম: redhat-cloud-services-rule-components-4.7.2.tgz MD5: f1ffdbf5e639899f26a6ebab2eec408d SHA1: f3c5c21274045ae02fef11e931de6dcf8462a067 SHA256: aaf00d06baa3c679b82452c50014e9824b8874e9ca2d150f19095f8de19ba90f
SHA256
ac2a2208e1726e008be6c73dc0872d9bba163319259dff1b62055ac933ca46b6
0dc06ecdaa63fe24859cfd955053c23245c536e4733480239d14bebf12688e35
দুর্নীতিপূর্ণ নির্ভরশীলতা
npm:@redhat-cloud-services/topological-inventory-client@3.0.10
npm:@redhat-cloud-services/topological-inventory-client@3.0.11
npm:@redhat-cloud-services/topological-inventory-client@3.0.13
npm:@redhat-cloud-services/compliance-client@4.0.3
npm:@redhat-cloud-services/compliance-client@4.0.4
npm:@redhat-cloud-services/compliance-client@4.0.6
npm:@redhat-cloud-services/rbac-client@9.0.3
npm:@redhat-cloud-services/rbac-client@9.0.4
npm:@redhat-cloud-services/rbac-client@9.0.6
npm:@redhat-cloud-services/insights-client@4.0.4
npm:@redhat-cloud-services/insights-client@4.0.5
npm:@redhat-cloud-services/insights-client@4.0.7
npm:@redhat-cloud-services/frontend-components@7.7.2
npm:@redhat-cloud-services/frontend-components@7.7.3
npm:@redhat-cloud-services/frontend-components@7.7.5
npm:@redhat-cloud-services/frontend-components-utilities@7.4.1
npm:@redhat-cloud-services/frontend-components-utilities@7.4.2
npm:@redhat-cloud-services/frontend-components-utilities@7.4.4
npm:@redhat-cloud-services/remediations-client@4.0.4
npm:@redhat-cloud-services/remediations-client@4.0.5
npm:@redhat-cloud-services/remediations-client@4.0.7
npm:@redhat-cloud-services/frontend-components-notifications@6.9.2
npm:@redhat-cloud-services/frontend-components-notifications@6.9.3
npm:@redhat-cloud-services/frontend-components-notifications@6.9.5
npm:@redhat-cloud-services/patch-client@4.0.4
npm:@redhat-cloud-services/patch-client@4.0.5
npm:@redhat-cloud-services/patch-client@4.0.7
npm:@redhat-cloud-services/host-inventory-client@5.0.3
npm:@redhat-cloud-services/host-inventory-client@5.0.4
npm:@redhat-cloud-services/host-inventory-client@5.0.6
npm:@redhat-cloud-services/rule-components@4.7.2
npm:@redhat-cloud-services/rule-components@4.7.3
npm:@redhat-cloud-services/rule-components@4.7.5
npm:@redhat-cloud-services/frontend-components-advisor-components@3.8.2
npm:@redhat-cloud-services/frontend-components-advisor-components@3.8.4
npm:@redhat-cloud-services/frontend-components-advisor-components@3.8.6
npm:@redhat-cloud-services/notifications-client@6.1.4
npm:@redhat-cloud-services/notifications-client@6.1.5
npm:@redhat-cloud-services/notifications-client@6.1.7
npm:@redhat-cloud-services/sources-client@3.0.10
npm:@redhat-cloud-services/sources-client@3.0.11
npm:@redhat-cloud-services/sources-client@3.0.13
npm:@redhat-cloud-services/integrations-client@6.0.4
npm:@redhat-cloud-services/integrations-client@6.0.5
npm:@redhat-cloud-services/integrations-client@6.0.7
npm:@redhat-cloud-services/frontend-components-config@6.11.3
npm:@redhat-cloud-services/frontend-components-config@6.11.4
npm:@redhat-cloud-services/frontend-components-config@6.11.6
npm:@redhat-cloud-services/frontend-components-config-utilities@4.11.2
npm:@redhat-cloud-services/frontend-components-config-utilities@4.11.3
npm:@redhat-cloud-services/frontend-components-config-utilities@4.11.5
npm:@redhat-cloud-services/hcc-pf-mcp@0.6.1
npm:@redhat-cloud-services/hcc-pf-mcp@0.6.2
npm:@redhat-cloud-services/hcc-pf-mcp@0.6.4
npm:@redhat-cloud-services/frontend-components-remediations@4.9.2
npm:@redhat-cloud-services/frontend-components-remediations@4.9.3
npm:@redhat-cloud-services/frontend-components-remediations@4.9.5
npm:@redhat-cloud-services/eslint-config-redhat-cloud-services@3.2.1
npm:@redhat-cloud-services/eslint-config-redhat-cloud-services@3.2.2
npm:@redhat-cloud-services/eslint-config-redhat-cloud-services@3.2.4
npm:@redhat-cloud-services/javascript-clients-shared@2.0.8
npm:@redhat-cloud-services/javascript-clients-shared@2.0.9
npm:@redhat-cloud-services/javascript-clients-shared@2.0.11
npm:@redhat-cloud-services/quickstarts-client@4.0.11
npm:@redhat-cloud-services/quickstarts-client@4.0.12
npm:@redhat-cloud-services/quickstarts-client@4.0.14
npm:@redhat-cloud-services/config-manager-client@5.0.4
npm:@redhat-cloud-services/config-manager-client@5.0.5
npm:@redhat-cloud-services/config-manager-client@5.0.7
npm:@redhat-cloud-services/hcc-feo-mcp@0.3.1
npm:@redhat-cloud-services/hcc-feo-mcp@0.3.2
npm:@redhat-cloud-services/hcc-feo-mcp@0.3.4
npm:@redhat-cloud-services/entitlements-client@4.0.11
npm:@redhat-cloud-services/entitlements-client@4.0.12
npm:@redhat-cloud-services/entitlements-client@4.0.14
npm:@redhat-cloud-services/tsc-transform-imports@1.2.2
npm:@redhat-cloud-services/tsc-transform-imports@1.2.4
npm:@redhat-cloud-services/tsc-transform-imports@1.2.6
npm:@redhat-cloud-services/hcc-kessel-mcp@0.3.1
npm:@redhat-cloud-services/hcc-kessel-mcp@0.3.2
npm:@redhat-cloud-services/hcc-kessel-mcp@0.3.4
npm:@redhat-cloud-services/frontend-components-testing@1.2.1
npm:@redhat-cloud-services/frontend-components-testing@1.2.2
npm:@redhat-cloud-services/frontend-components-testing@1.2.4
npm:@redhat-cloud-services/types@3.6.1
npm:@redhat-cloud-services/types@3.6.2
npm:@redhat-cloud-services/types@3.6.4
npm:@redhat-cloud-services/chrome@2.3.1
npm:@redhat-cloud-services/chrome@2.3.2
npm:@redhat-cloud-services/chrome@2.3.4
npm:@redhat-cloud-services/frontend-components-translations@4.4.1
npm:@redhat-cloud-services/frontend-components-translations@4.4.2
npm:@redhat-cloud-services/frontend-components-translations@4.4.4
npm:@redhat-cloud-services/vulnerabilities-client@2.1.8
npm:@redhat-cloud-services/vulnerabilities-client@2.1.9
npm:@redhat-cloud-services/vulnerabilities-client@2.1.11
