- npm-এ থাকা @7nohe/openapi-react-query-codegen-এর একাধিক সংস্করণ হ্যাক হয়েছে।একটি অত্যাধুনিক ম্যালওয়্যার পেলোড সংযুক্ত করে, যা TanStack Query-ভিত্তিক ওয়ার্কফ্লোর অপব্যবহার করে।
- এই আক্রমণে binding.gyp স্যান্ডবক্স এস্কেপ এবং প্রি-ইনস্টল স্ক্রিপ্ট ব্যবহার করা হয়েছিল। সুস্পষ্ট লাইফসাইকেল হুক ছাড়াই, npm install চলাকালীন একটি বহুস্তরীয় জাভাস্ক্রিপ্ট স্টিলার কার্যকর করা।
- পেলোডটি বিপুল সংখ্যক ডেভেলপার এবং ক্লাউড ক্রেডেনশিয়াল সংগ্রহ করেছে। (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes এবং আরও অনেক কিছু) এবং সেগুলোকে পাবলিক GitHub রিপোজিটরিগুলোতে পাচার করা হয়েছে।
- এই ওয়ার্মটি চুরি করা টোকেন ব্যবহার করে আরও npm, PyPI, RubyGems প্যাকেজ এবং GitHub রিপোজিটরিকে সংক্রমিত করেছিল।যা TanStack Query npm-এর জনপ্রিয় ব্যবহারকে ঘিরে বৃহত্তর সরবরাহ-শৃঙ্খল ঝুঁকিকে তুলে ধরে।
২০২৬ সালের আগস্ট মাসের শেষের দিকে, নিরাপত্তা গবেষকরা একটি বিষয় উন্মোচন করেছেন। TanStack Query npm ইকোসিস্টেমের সাথে যুক্ত লক্ষ্যবস্তুভিত্তিক সাপ্লাই-চেইন আক্রমণ একটি জনপ্রিয় ওপেনএপিআই কোড জেনারেটরের মাধ্যমে। ঘটনাটি প্যাকেজটিকে কেন্দ্র করে। @7nohe/openapi-react-query-codegenএকটি টুল, যা সরাসরি ওপেনএপিআই স্কিমা থেকে ট্যানস্ট্যাক কোয়েরির জন্য স্বয়ংক্রিয়ভাবে টাইপ-সেফ হুক তৈরি করে এবং যা এনপিএম-এ প্রতি সপ্তাহে দেড় লক্ষেরও বেশি ডাউনলোড হচ্ছে।
আক্রমণকারীরা সরাসরি TanStack Query কোর লাইব্রেরিগুলোকে লক্ষ্য না করে, এর সাথে সম্পর্কিত টুলিংগুলোকে হ্যাক করেছে, যেগুলোর ওপর অনেক টিম TanStack Query হুক তৈরি করার জন্য নির্ভর করে । তারা জেনারেটরটির একাধিক রিলিজে একটি জটিল ম্যালওয়্যার পেলোড ঢুকিয়ে দিয়েছে। যেহেতু এই হুকগুলো সরাসরি প্রোডাকশন React এবং TypeScript কোডবেসের সাথে যুক্ত হয়, তাই এর প্রভাব একটি প্যাকেজের মধ্যেই সীমাবদ্ধ থাকে না, বরং এটি সেইসব CI পাইপলাইন বা ডেভেলপার মেশিনকেও প্রভাবিত করে যেগুলো এই দূষিত সংস্করণগুলো ইনস্টল করেছে।
আক্রমণটি কীভাবে npm-এ একটি TanStack Query কোড জেনারেটরের অপব্যবহার করেছিল
ক্ষতিগ্রস্ত গ্রন্থাগার, @7nohe/openapi-react-query-codegenTanStack Query হুক লেয়ারগুলোকে স্ক্যাফোল্ড করতে এটি ব্যাপকভাবে ব্যবহৃত হয়। ওপেনএপিআই কন্ট্রাক্ট থেকে, যা টিমগুলোকে পুনরাবৃত্তিমূলক ফেচ লজিক হাতে লেখার ঝামেলা থেকে বাঁচায়। প্রায় ২০ মিনিটের ব্যবধানে, একজন আক্রমণকারী এই প্যাকেজটির দশটি ক্ষতিকারক সংস্করণ এনপিএম রেজিস্ট্রি-তে পুশ করে, যেগুলোর সবকটিতেই গিটহাব অ্যাকশনস-এর মাধ্যমে তৈরি বৈধ প্রোভেনেন্স অ্যাটেস্টেশন ছিল।
সেই প্রত্যয়নগুলো, যা সাধারণত সততার একটি শক্তিশালী সংকেত, অর্থহীন হয়ে পড়েছিল কারণ প্রজেক্টটির গিটহাব অ্যাকশনস ওয়ার্কফ্লো নিজেই হ্যাক হয়েছিল । সেই ওয়ার্কফ্লোর একটি দুর্বলতার সুযোগ নিয়ে, আক্রমণকারী ট্রোজানযুক্ত বিল্ড সরবরাহ করার ক্ষমতা অর্জন করে এবং একই সাথে এমন ক্রিপ্টোগ্রাফিক প্রমাণ তৈরি করতে সক্ষম হয় যা প্রমাণ করে যে সেগুলো “অফিশিয়াল” পাইপলাইন থেকেই এসেছে। একই পদক্ষেপে সংশ্লিষ্ট গিটহাব রিপোজিটরিটিও দখল করা হয়েছে বলে মনে হচ্ছে, যা আক্রমণকারীকে রিলিজ প্রক্রিয়ার উপর সম্পূর্ণ নিয়ন্ত্রণ দিয়েছে।
এই অভিযানটি এনপিএম-এর সাথে যুক্ত পূর্ববর্তী সাপ্লাই-চেইন ঘটনাগুলোরই প্রতিচ্ছবি, তবে এতে একটি নতুন মোড় রয়েছে: এটি বিশেষভাবে লক্ষ্যবস্তু করে OpenAPI টুলিং এবং TanStack কোয়েরি ব্যবহারের সংযোগস্থলযেহেতু জেনারেটরটি এমন React কোড নির্গত করে যা নির্ভর করে @tanstack/react-queryযে কোনো সংস্থা যদি তাদের স্বয়ংক্রিয় এপিআই ক্লায়েন্ট জেনারেশনে এটিকে সংযুক্ত করে, তাহলে তাদের বিল্ড এজেন্ট, সিআই রানার বা ডেভেলপারদের ল্যাপটপে ম্যালওয়্যারটি চলে আসার ঝুঁকি থাকে।
তদন্তকারীরা আরও উল্লেখ করেছেন যে, ম্যালওয়্যারটির ব্র্যান্ডিং—যা নিজেকে “ ট্রিনিটাইট: স্পনসরড বাই প্রিভিউ ২ এফেক্টস ” বলে পরিচয় দিচ্ছে—তা পূর্ববর্তী টিমপিসিপি-সংশ্লিষ্ট অভিযানগুলোর নাট্যধর্মী শৈলীর প্রতিধ্বনি করে। তবে, এটি নকলকারীদের কাজ, কোনো বিচ্ছিন্ন গোষ্ঠীর কাজ, নাকি এই নান্দনিকতা ধার করা কোনো সম্পর্কহীন ব্যক্তির কাজ, তা এখনও স্পষ্ট নয়।
Binding.gyp স্যান্ডবক্স থেকে বেরিয়ে যাওয়া: npm install চলাকালীন ম্যালওয়্যার চালু হওয়া
এই TanStack Query–adjacent অ্যাটাকের অন্যতম একটি অস্বাভাবিক প্রযুক্তিগত পছন্দ হলো অপব্যবহার binding.gyp npm install চলাকালীন একটি এক্সিকিউশন ভেক্টর হিসাবেসাধারণ পরিস্থিতিতে, binding.gyp নেটিভ Node.js অ্যাডঅনগুলি কীভাবে কম্পাইল করতে হয় তা বর্ণনা করে। যখন npm এই ধরনের একটি ফাইলের সম্মুখীন হয়, তখন এটি আহ্বান করে। node-gypযা ফলস্বরূপ মূল্যায়ন করে conditions পাইথন ব্যবহার করে ফিল্ড
ক্ষতিকারক সংস্করণগুলি @7nohe/openapi-react-query-codegen একটি এম্বেড করে এই আচরণটি কাজে লাগান পাইথন স্যান্ডবক্স এস্কেপ ইন দ্য conditions বাধাক্ষতিকর নয় এমন বিল্ড কনফিগারেশন ধারণ করার পরিবর্তে, ফাইলটি পাইথনের অভ্যন্তরীণ ক্লাস হায়ারার্কি ধরে অগ্রসর হয়ে পৌঁছায় catch_warnings শ্রেণী, ঘুরে যায় __builtins__আমদানি osএবং অবশেষে ফোন করে os.system নোড ব্যবহার করে জাভাস্ক্রিপ্ট পেলোড কার্যকর করা।
একবার অস্পষ্টতা দূর হয়ে গেলে, শর্তটি একটিমাত্র নির্দেশে এসে দাঁড়ায়: node 3FWCvzduYZg.js ইনস্টলেশনের সময় স্বয়ংক্রিয়ভাবে সম্পাদিত হয়বাকিটা binding.gyp বিষয়বস্তুটি আসলে একটি ধোঁয়াশা: ঘোষিত টার্গেটের নামটি অর্থহীন, টাইপটি হেক্স-এনকোডেড। noneএবং কোনো প্রকৃত নেটিভ কম্পাইলেশন ঘটে না।
সব ত্রুটিপূর্ণ প্রকাশনাই শুধু এই কৌশলের ওপর নির্ভর করত না। দুটি প্রি-রিলিজ ট্যাগ প্রচলিতভাবে ব্যবহৃত হয়েছিল preinstall স্ক্রিপ্টের পরিবর্তে, একটি স্থানীয় ফাইল আহ্বান করা হচ্ছে nu.js এবং অন্যটি এর মাধ্যমে বান রানটাইম ডাউনলোড করছে wget পাইপ দিয়ে সংযুক্ত bash নির্লজ্জভাবে নাম দেওয়া একটি স্ক্রিপ্ট শুরু করার আগে is_it_this_simple.jsপরবর্তী সংস্করণগুলিতে দ্বিগুণ করা হয়েছিল, একত্রিত করে binding.gyp একটি সুস্পষ্ট শোষণের মাধ্যমে "preinstall": "node 3FWCvzduYZg.js" প্রবেশ package.json পেলোডটি কার্যকর হওয়ার সম্ভাবনা সর্বাধিক করার জন্য।
স্যান্ডবক্স এড়ানোর জন্য নির্মিত একটি বহুস্তরীয় জাভাস্ক্রিপ্ট পেলোড
ক্ষতিগ্রস্ত TanStack কোয়েরি জেনারেটরের কেন্দ্রে রয়েছে 3FWCvzduYZg.jsএকটি এক-লাইনের ফাইল, যার আকার প্রায় ৫.৪ মেগাবাইট।npm প্যাকেজের রুটে রাখা হয়েছে। এই স্ক্রিপ্টটি অত্যন্ত দুর্বোধ্য, যা একাধিক এনক্রিপশন স্তর ব্যবহার করে পরিদর্শনকে ধীর করে দেয় এবং স্ট্যাটিক অ্যানালাইসিস টুলগুলোকে হতাশ করে।
সবচেয়ে বাইরের স্তরটি হল একটি একটি নির্দিষ্ট কী দিয়ে XOR ব্যবহার করে ডিক্রিপ্ট করা বিশাল পূর্ণসংখ্যার অ্যারেযা এমন কোড প্রকাশ করে, যা নীরবে Bun রানটাইমকে একটি অস্থায়ী ডিরেক্টরিতে ডাউনলোড করে (যেমন বিভিন্ন নামে, trinnyyyy-XXXXX সিস্টেম টেম্প ফোল্ডারে)। এরপর Bun ব্যবহার করে পরবর্তী এনক্রিপ্টেড সেগমেন্টটি এক্সিকিউট করা হয়, যা স্ক্রিপ্টের ভিতরে এমবেড করা AES-128-GCM-সুরক্ষিত ডেটা হিসেবে সংরক্ষিত থাকে।
সম্পূর্ণরূপে ডিক্রিপ্ট এবং ডিওবফাসকেট করার পর, বিশ্লেষকরা এর ভেতরে প্রায় ৮০০ কিলোবাইটের একটি জাভাস্ক্রিপ্ট পেলোড খুঁজে পান, যা ক্রেডেনশিয়াল স্টিলার, স্ব-বিস্তারকারী ওয়ার্ম এবং ধ্বংসাত্মক ইউটিলিটি হিসেবে কাজ করে । এই অভ্যন্তরীণ স্ক্রিপ্টটি সুপরিচিত obfuscator.io ট্রান্সফর্মের উপরে একটি কাস্টম শাফেলড-টেবিল সাইফার প্রয়োগ করে, যা আবারও ইঙ্গিত দেয় যে এর নির্মাতারা স্বয়ংক্রিয় রিভার্স ইঞ্জিনিয়ারিং প্রতিরোধ করার জন্যই বিশেষভাবে লক্ষ্য রেখেছিল।
কোনো বড় ধরনের ক্ষতি করার আগে, ম্যালওয়্যারটি একটি কার্য সম্পাদন করে। নিরাপত্তা গবেষক এবং স্বয়ংক্রিয় স্ক্যানারদের ফাঁকি দেওয়ার জন্য পরিকল্পিত পরিবেশগত যাচাইয়ের একটি সিরিজএটি রাশিয়ান সিস্টেম লোকেল, ক্রাউডস্ট্রাইক, সেন্টিনেলওয়ান বা কার্বন ব্ল্যাকের মতো সাধারণ ইডিআর টুল, সাপ্লাই-চেইন স্ক্যানিং পণ্য দ্বারা ব্যবহৃত পরিচিত স্যান্ডবক্স ডিরেক্টরি, বা নকল গোপন প্রিফিক্স (যেমন AKIAFAKE অথবা ডিকয় এনপিএম টোকেন), অথবা নিরাপত্তা গবেষণা ডেমোর সাথে যুক্ত গিটহাব অর্গানাইজেশনের নাম। এটি স্টেপসিকিউরিটি হার্ডেন-রানার টুলের উপস্থিতিও খুঁজে দেখে এবং সেই হার্ডেনড সিআই কনফিগারেশনটি দেখতে পেলে প্রক্রিয়াটি বন্ধ করে দেয়।
ম্যালওয়্যারটি TanStack Query ব্যবহারকারী এবং এর বাইরের আরও অনেকের কাছ থেকে যা চুরি করার চেষ্টা করে
একবার এক্সিকিউশনের শর্তগুলো পূরণ হলে, পেলোডটি পদ্ধতিগতভাবে বিভিন্ন ধরনের ক্রেডেনশিয়াল সংগ্রহ করতে শুরু করে, যেগুলো সাধারণত আধুনিক জাভাস্ক্রিপ্ট এবং ট্যানস্ট্যাক কোয়েরি-ভিত্তিক ওয়ার্কফ্লোতে উপস্থিত থাকে । এর মূল লক্ষ্য ফ্রন্ট-এন্ড ফ্রেমওয়ার্কটি নিজে নয়, বরং সেই ক্লাউড এবং ডেভেলপার ইনফ্রাস্ট্রাকচার, যার সাথে ট্যানস্ট্যাক কোয়েরি ক্লায়েন্টরা সাধারণত যোগাযোগ করে।
গিটহাব অ্যাক্সেস একটি প্রধান লক্ষ্য। ম্যালওয়্যারটি ক্লাসিক ব্যক্তিগত অ্যাক্সেস টোকেন এবং নতুন ফাইন-গ্রেইনড টোকেন উভয়ের জন্য অনুসন্ধান করে এনভায়রনমেন্ট ভেরিয়েবল এবং ফাইলসিস্টেমের অবস্থানগুলিতে। গিটহাব অ্যাকশনস রানারগুলিতে, এটি স্ট্যান্ডার্ড পদ্ধতি ব্যবহার করে একটি OIDC টোকেন পাওয়ার চেষ্টা করে। ACTIONS_ID_TOKEN_REQUEST_TOKEN এবং সংশ্লিষ্ট ইউআরএল, যা স্বল্পস্থায়ী ক্লাউড ক্রেডেনশিয়ালের জন্য বৈধ ওয়ার্কফ্লো দ্বারা ব্যবহৃত একই কৌশলকে কাজে লাগায়।
প্যাকেজ রেজিস্ট্রিগুলো হলো আরেকটি গুরুত্বপূর্ণ ডেটা উৎস। স্ক্রিপ্টটি পড়ে এনপিএম কনফিগারেশন ফাইল যেমন ~/.npmrcবেয়ারার টোকেন স্ক্যান করা এবং এনপিএম রেজিস্ট্রির সাথে সেগুলোর বৈধতা যাচাই করা whoami শেষবিন্দুএটি পাইথনের PyPI-এর ক্ষেত্রেও একই যুক্তি প্রয়োগ করে (যেসব টোকেন দিয়ে শুরু হয় সেগুলোর জন্য অনুসন্ধান করে)। pypi-AgEIcHlwaS5vcmcCJ) এবং রুবিজেমস (খুঁজছি) rubygems_ টোকেনগুলো আক্রমণকারীদেরকে বিভিন্ন বাস্তুতন্ত্র জুড়ে বিস্তৃত পরিসরে প্রবেশের সম্ভাব্য সুযোগ করে দেয়।
ক্লাউড ক্রেডেনশিয়াল সংগ্রহ আরও ব্যাপক। ম্যালওয়্যার অনুসন্ধানগুলো AWS-সম্পর্কিত এনভায়রনমেন্ট ভেরিয়েবল ও কনফিগারেশন ফাইল, EC2 ইনস্ট্যান্স মেটাডেটা সার্ভিস, এবং ECS মেটাডেটা এন্ডপয়েন্ট, ব্যবহার sts:GetCallerIdentity পাচার করার আগে আবিষ্কৃত যেকোনো ক্রেডেনশিয়াল বৈধ কিনা তা যাচাই করার জন্য কল করা হয়। এটি এই প্যাটার্নটির পুনরাবৃত্তি করে। অ্যাজুর (ক্লায়েন্ট আইডি, সিক্রেট, ম্যানেজড আইডেন্টিটি, এবং এমনকি অ্যাজুর কী ভল্ট) এবং জন্য গুগল ক্লাউড, সার্ভিস অ্যাকাউন্ট JSON, মেটাডেটা সার্ভার এবং সিক্রেট ম্যানেজার পরীক্ষা করা হচ্ছে। একবার এটির একটি ব্যবহারযোগ্য টোকেন থাকলে।
ক্লাউড এবং প্যাকেজ রেজিস্ট্রি ছাড়াও, স্ক্রিপ্টটি স্থানীয় ডিস্কগুলোতে অনুসন্ধান চালায়। ১৫০টিরও বেশি বিভিন্ন গ্লোব প্যাটার্নSSH প্রাইভেট কী, ডকার কনফিগারেশন সহ, .env ফাইল, গিট ক্রেডেনশিয়াল স্টোর, ক্রিপ্টো ওয়ালেট ডিরেক্টরি, সিগন্যাল বা টেলিগ্রাম ডেস্কটপের মতো মেসেজিং ক্লায়েন্ট, ভিপিএন কনফিগারেশন, এবং এমনকি ক্লডের মতো এআই টুলের সাথে যুক্ত কনফিগারেশন ফাইলও এর অন্তর্ভুক্ত। এই ব্যাপকতা থেকে বোঝা যায় যে, ট্যানস্ট্যাক কোয়েরি-সমর্থিত অ্যাপগুলো সাধারণত কীভাবে তৈরি ও স্থাপন করা হয়: প্রায়শই এমন পরিবেশে যেখানে একটিমাত্র মেশিন বা সিআই জবের রিপোজিটরি, রেজিস্ট্রি এবং ক্লাউড প্রোভাইডারদের জন্য বিস্তৃত ক্রেডেনশিয়াল থাকে।
গিটহাব রিপোজিটরিগুলির মাধ্যমে তথ্য পাচার এবং ওয়ার্মের মতো বিস্তার
ডেটা সংগ্রহ হয়ে গেলে, ম্যালওয়্যারটি তা পাচার করার জন্য একটি অস্বাভাবিক পদ্ধতি অবলম্বন করে। এটি কোনো প্রচলিত কমান্ড-অ্যান্ড-কন্ট্রোল সার্ভারে পোস্ট করার পরিবর্তে, গিটহাব রিপোজিটরিগুলোকে পাবলিক ও এনক্রিপ্টেড ড্রপবক্স হিসেবে ব্যবহার করে । এই পদ্ধতিটি শুধু সাধারণ ডেভেলপার ট্র্যাফিকের সাথে মিশে যায় তাই নয়, বিশেষ করে ট্যানস্ট্যাক কোয়েরি-নির্ভর সংস্থাগুলোতে, যারা আগে থেকেই প্রতিনিয়ত গিটহাবের সাথে যুক্ত থাকে, বরং এটি ম্যালওয়্যারটিকে নিষ্ক্রিয় করাও আরও জটিল করে তোলে।
স্ক্রিপ্টটি প্রথমে গিটহাবের পাবলিক কমিট হিস্ট্রিতে একটি অত্যন্ত নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন মেসেজ খোঁজে, যে প্যাটার্নটি কমিট মেসেজ টেক্সটের ভেতরে একটি এনক্রিপ্টেড টোকেন এনকোড করে রাখে। এরপর এটি সেই টোকেনটি ডিক্রিপ্ট করে একটি গিটহাব ক্রেডেনশিয়াল উদ্ধার করে, যা ব্যবহার করে এটি প্রতিটি ভুক্তভোগীর জন্য একটি নতুন রিপোজিটরি তৈরি করে। এর মানে হলো, একটি মেশিন থেকে চুরি হওয়া ডেটা সম্পূর্ণ ভিন্ন, ইতিমধ্যেই হ্যাক হওয়া একটি অ্যাকাউন্টের অধীনে জমা হয়, যা অপরাধীর পরিচয় শনাক্ত করাকে আরও ঘোলাটে করে তোলে।
প্রতিটি বহির্গমন ভান্ডারের নামকরণ করা হয় Touhou Project-এর এলোমেলো চরিত্রের নামের সাথে একটি সাংখ্যিক প্রত্যয় যুক্ত করা (উদাহরণ স্বরূপ, cirno-marisa-74291), এবং এর বিবরণটি ম্যালওয়্যারটির নিজস্ব ট্যাগলাইন, “Trinitite: Sponsored by Preview 2 Effects” হিসেবে সেট করা আছে। এই রিপোগুলোর মধ্যে, স্ক্রিপ্টটি এই ধরনের নামের JSON ফাইল কমিট করে। doubletrinnys-{counter}-{timestamp}.json ভিতরে a results/ ফোল্ডার.
JSON লেআউটটি সরল কিন্তু সতর্কতার সাথে এনক্রিপ্ট করা: এটি একটি ধারণ করে envelope চুরি হওয়া পরিচয়পত্রের বেশিরভাগ অংশ এবং একটি ধারণকারী key আক্রমণকারীর পাবলিক RSA কী ব্যবহার করে সেশন কী সহ ফিল্ডটি এনক্রিপ্ট করা হয়। এটি নিশ্চিত করে যে ফাইলগুলি প্রযুক্তিগতভাবে পাবলিক হওয়া সত্ত্বেও, শুধুমাত্র সংশ্লিষ্ট প্রাইভেট কী-এর অধিকারী ব্যক্তিই এর বিষয়বস্তু পড়তে পারবেন।ফলে সাধারণ পর্যবেক্ষক এবং বেশিরভাগ স্বয়ংক্রিয় ক্রলার কী চুরি হয়েছে তা দেখতে অক্ষম ছিল।
এর পাশাপাশি, ম্যালওয়্যারটি একটি ওয়ার্ম হিসেবেও কাজ করে। হাতে বৈধ npm, PyPI, বা RubyGems টোকেন থাকলে, এটি হ্যাক হওয়া রক্ষণাবেক্ষণকারীর মালিকানাধীন প্রতিটি প্যাকেজকে তালিকাভুক্ত করে এবং নতুন, সংক্রামিত সংস্করণ প্রকাশ করে।সংক্রমণের ধরণটি মূল TanStack Query কোড জেনারেটর হ্যাক হওয়ার ঘটনায় ব্যবহৃত একই কৌশল অনুসরণ করে: একটি ক্ষতিকারক ভাইরাস প্রবেশ করানো। binding.gyp, নেমে এসে 3FWCvzduYZg.jsএবং চুরি করা পাবলিশ টোকেন ব্যবহার করে প্যাকেজটি পুশ করে। এটি চুরি করা গিটহাব টোকেনের অপব্যবহার করে অ্যাক্সেসযোগ্য রিপোজিটরিগুলোতে প্রবেশ করে এবং ব্যাকডোরযুক্ত কনফিগারেশন ফাইল যুক্ত করে। .vscode, .claude, .github/workflowsএবং অনুরূপ ডিরেক্টরিগুলো, সবই নিরীহ কমিট মেসেজের অধীনে, যেমন "chore: update dependencies".
এই ওয়ার্ম-সদৃশ আচরণ এর বিস্তারের পরিধিকে নাটকীয়ভাবে বাড়িয়ে দেয়। যদি কোনো সংক্রমিত ডেভেলপার বা বিল্ড এজেন্ট নতুন রিলিজ প্রকাশ করে, তবে কোনো একটি সংস্থা তার CI চেইনে TanStack Query এবং @7nohe/openapi-react-query-codegen ব্যবহার করার ফলে অনিচ্ছাকৃতভাবে কয়েক ডজন অভ্যন্তরীণ প্যাকেজ এবং রিপোজিটরিতে ম্যালওয়্যার ছড়িয়ে পড়তে পারে।
TanStack Query npm ব্যবহারকারীদের জন্য আপোসের সূচক
যেসব টিম TanStack Query এবং সংশ্লিষ্ট npm টুলিংয়ের ওপর নির্ভর করে, তাদের জন্য কিছু সুনির্দিষ্ট বিষয় হলো... ঝুঁকির মাত্রা শনাক্ত করতে সহায়তার জন্য আপোসের সূচক (IOCs) প্রকাশ করা হয়েছে।নিম্নলিখিত সংস্করণগুলি @7nohe/openapi-react-query-codegen ট্রিনিটাইট পেলোড ধারণ করার বিষয়টি নিশ্চিত করা হয়েছে এবং এগুলোকে অবিশ্বস্ত হিসেবে বিবেচনা করা উচিত:
- 0.5.4 এবং 0.5.5
- 1.6.3 এবং 1.6.4
- 2.2.1 এবং 2.2.2
- 3.0.3 এবং 3.0.4
- প্রি-রিলিজ 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be এবং 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab
যেকোনোভাবে একটি বড়, এক-লাইনের জাভাস্ক্রিপ্ট ফাইলের উপস্থিতি যার নাম 3FWCvzduYZg.js একটি npm প্যাকেজের রুট ডিরেক্টরিতে এর উপস্থিতি একটি গুরুতর বিপদ সংকেত। ওই ফাইলটির একাধিক SHA-256 হ্যাশ নথিভুক্ত করা হয়েছে।এবং প্রশাসকগণ পরিচিত ত্রুটিপূর্ণ কপিগুলো শনাক্ত করার জন্য সেগুলোকে অভ্যন্তরীণ রেজিস্ট্রিগুলোতে থাকা ইনস্টল করা প্যাকেজের আর্কাইভ বা ক্যাশ করা টারবলের সাথে তুলনা করতে পারেন।
সংক্রমিত সিস্টেমে, একটি নির্দিষ্ট নামে থাকা অস্থায়ী ডিরেক্টরিগুলো trinnyyyy- OS টেম্প ফোল্ডারে প্রিফিক্সের পরে ছয়টি র্যান্ডম আলফানিউমেরিক অক্ষর থাকলে তা পূর্ববর্তী এক্সিকিউশনও নির্দেশ করতে পারে। এই ডিরেক্টরিগুলি ব্যবহৃত হয় যখন অভ্যন্তরীণ পেলোডের জন্য প্রয়োজনীয় বান রানটাইম ডাউনলোড এবং স্টেজিং করা হচ্ছে.
নির্দিষ্ট জেনারেটর প্যাকেজ ছাড়াও, সংস্থাগুলির এনপিএম অডিট ডেটা, অভ্যন্তরীণ প্যাকেজ মিরর এবং সিআই লগ পর্যালোচনা করা উচিত। অপ্রত্যাশিত binding.gyp ফাইল বা হঠাৎ আবির্ভাব preinstall আঙ্গুলসমূহ এমন প্যাকেজগুলিতে, যেগুলি আগে নেটিভ অ্যাডঅন বা লাইফসাইকেল স্ক্রিপ্টের উপর নির্ভর করত না। TanStack Query-এর প্রেক্ষাপটে, এর অর্থ সাধারণত এমন যেকোনো কোড-জেনারেটর বা OpenAPI ইন্টিগ্রেশন টুলিংকে নিবিড়ভাবে পর্যবেক্ষণ করা, যা React, Vue বা অন্যান্য ফ্রন্টএন্ডের সাথে যুক্ত হয়।
অবশেষে, গিটহাবের কার্যকলাপ পুঙ্খানুপুঙ্খভাবে খতিয়ে দেখা প্রয়োজন। যেসব রিপোজিটরির বিবরণে “Trinitite: Sponsored by Preview 2 Effects”-এর মতো লেখা আছে, অথবা results/doubletrinnys-*.json ফাইল এবং কমিট বার্তা যেমন "meow meow meow"আপোসকৃত TanStack Query npm ব্যবহারের সাথে যুক্ত সম্ভাব্য তথ্য পাচারের উৎস হিসেবে এগুলোর তদন্ত করা উচিত।
TanStack কোয়েরি-নির্ভর টিমগুলো এই মুহূর্তে কী করতে পারে
বেশিরভাগ প্রতিষ্ঠানের জন্য প্রথম পদক্ষেপ হলো TanStack Query এবং এর সাথে সম্পর্কিত npm টুলিং কোথায় এবং কীভাবে ব্যবহৃত হয় তার একটি তালিকা তৈরি করুন।কারণ আপোসকৃত প্যাকেজটি বিশেষভাবে এর জন্য হুক তৈরি করে @tanstack/react-queryএটি সাধারণত স্ট্রং টাইপিং এবং স্বয়ংক্রিয় ওপেনএপিআই ক্লায়েন্ট জেনারেশন পাইপলাইনযুক্ত প্রজেক্টগুলিতে দেখা যায়, যা প্রায়শই সরাসরি সিআই (CI)-এর সাথে সংযুক্ত থাকে।
দলগুলোর যাচাই করে দেখা উচিত যে তালিকাভুক্ত ক্ষতিকারক সংস্করণগুলোর মধ্যে কোনোটি আছে কিনা। @7nohe/openapi-react-query-codegen সর্বদা উপস্থিত ছিল package-lock.json, pnpm-lock.yaml, বা yarn.lock ফাইলগুলো, অথবা ট্রানজিটিভ ডিপেন্ডেন্সির মাধ্যমে ডিপেন্ডেন্সি ট্রি-তে অন্তর্ভুক্ত হয়েছে। প্যাকেজটি আর ইনস্টল করা না থাকলেও, বিল্ড এজেন্টগুলিতে এর ঐতিহাসিক ব্যবহারের জন্য আরও গভীর তদন্তের প্রয়োজন হতে পারে।
যেখানে আপোসের সন্দেহ রয়েছে, সেখানে একটি সমান্তরাল প্রচেষ্টার উপর মনোযোগ দেওয়া উচিত ম্যালওয়্যার দ্বারা সংগৃহীত ঘূর্ণায়মান টোকেন এবং পরিচয়পত্র।এর মধ্যে রয়েছে গিটহাব পার্সোনাল অ্যাক্সেস টোকেন, এনপিএম পাবলিশ টোকেন, ক্লাউড অ্যাক্সেস কী, এবং সিআই রানারের এনভায়রনমেন্ট ভেরিয়েবল বা প্লেইনটেক্সট কনফিগারেশন ফাইলে সংরক্ষিত যেকোনো দীর্ঘস্থায়ী গোপনীয় তথ্য। ক্লাউড প্রোভাইডাররা সাধারণত লগ রাখে। sts:GetCallerIdentity এবং অনুরূপ কল, যা সংস্পর্শের সময়কালকে সংকুচিত করতে সাহায্য করতে পারে।
সাপ্লাই-চেইন নিরাপত্তা সরঞ্জাম, যা এনপিএম (npm) প্যাকেজের জন্য ম্যালওয়্যার স্ক্যানিংয়ে বিশেষজ্ঞ, তা এমন সব সংক্রমণ শনাক্ত করতে সাহায্য করতে পারে যা প্রচলিত দুর্বলতা স্ক্যানারগুলোর চোখ এড়িয়ে যায়। কিছু প্ল্যাটফর্ম ইতিমধ্যেই এই অভিযানটিকে একটি গুরুতর, ১০০/১০০ তীব্রতার ম্যালওয়্যার সমস্যা হিসেবে শ্রেণীবদ্ধ করেছে এবং ট্যানস্ট্যাক কোয়েরি (TanStack Query) ও এর সম্পর্কিত নির্ভরতাগুলোর ওপর নির্ভরশীল রিপোজিটরিগুলোর জন্য প্রতি রাতে পুনরায় স্ক্যান বা চাহিদা অনুযায়ী চেকের ব্যবস্থা করছে।
ভবিষ্যতে, যে সংস্থাগুলো TanStack Query-এর ওপর ব্যাপকভাবে নির্ভর করবে, @tanstack/react-query, বা @tanstack/vue-query উৎপাদনের সময় প্যাকেজ ইনস্টলেশনের চারপাশের সুরক্ষা ব্যবস্থা আরও শক্তিশালী করার প্রয়োজন হতে পারে। এর মধ্যে অন্তর্ভুক্ত থাকতে পারে... প্রক্সি রেজিস্ট্রি যা পরিচিত ক্ষতিকর সংস্করণগুলিকে ব্লক করে, এমন টুল যা কমান্ডগুলিকে বাধা দেয় যেমন npm install or pnpm add এবং হুমকি সংক্রান্ত তথ্যের সাথে প্যাকেজগুলি মিলিয়ে দেখুনএবং উৎস ও স্বাক্ষর যাচাইকরণের আরও কঠোর ব্যবহার—তবে এই সতর্কবাণীও রয়েছে যে, আপোসকৃত CI পাইপলাইনগুলোও এখনও “বৈধ” প্রত্যয়ন তৈরি করতে পারে, যেমনটি এখানে দেখা যাচ্ছে।
যেহেতু ফ্রন্টএন্ড স্ট্যাকগুলো ডেটা ফেচিং এবং ক্যাশিংয়ের জন্য TanStack Query-এর মতো লাইব্রেরিগুলোকে ক্রমবর্ধমানভাবে স্ট্যান্ডার্ডাইজ করছে, তাই আক্রমণকারীরা npm-এ প্রকাশিত জেনারেটর, CLI এবং প্লাগইনগুলোর পারিপার্শ্বিক ইকোসিস্টেম পরীক্ষা করে দেখার সম্ভাবনা রয়েছে । এই ঘটনাটি তুলে ধরে যে, কীভাবে একটি আপাতদৃষ্টিতে সীমিত ইউটিলিটি প্যাকেজ—যা কেবল একটি OpenAPI ফাইল থেকে TanStack Query হুক নির্গত করে—অরক্ষিত অবস্থায় বিল্ড সিস্টেম, মোনোরেপো এবং ক্লাউড অবকাঠামোতে প্রবেশের একটি উচ্চ-প্রভাবশালী প্রবেশপথ হয়ে উঠতে পারে।
ত্রিনিটাইট অভিযানের আবিষ্কারের বিরুদ্ধে @7nohe/openapi-react-query-codegen কিভাবে হাইলাইট TanStack Query ব্যবহারের সাথে যুক্ত জনপ্রিয় npm প্যাকেজগুলো নীরবে সাপ্লাই-চেইন আক্রমণের বাহক হয়ে উঠতে পারে। যখন তাদের রিলিজ ওয়ার্কফ্লো বিঘ্নিত হয়। অপব্যবহারের মাধ্যমে binding.gypদুর্বোধ্য জাভাস্ক্রিপ্ট লোডার এবং গিটহাব-ভিত্তিক তথ্য পাচারের মাধ্যমে, আক্রমণকারীরা এমন একটি টুলের ভেতরে একটি সুদূরপ্রসারী ক্রেডেনশিয়াল স্টিলার লুকিয়ে রাখতে সক্ষম হয়েছিল, যেটিকে অনেক টিমই একটি সাধারণ রুটিন কাজ হিসেবে ব্যবহার করত। যে সংস্থাগুলো রিয়্যাক্ট এবং অন্যান্য ফ্রন্টএন্ডে ট্যানস্ট্যাক কোয়েরির ওপর নির্ভর করে, তাদের জন্য এনপিএম হাইজিন কঠোর করা, সন্দেহজনক লাইফসাইকেল স্ক্রিপ্টের ওপর নজর রাখা এবং ওপেনএপিআই ও কোয়েরি-কোডজেন টুলিংকে কেন্দ্র করে সিআই পাইপলাইনকে আরও সুরক্ষিত করা এখন আর ঐচ্ছিক অতিরিক্ত বিষয় নয়, বরং মূল ঝুঁকি মডেলের একটি অংশ।