- একাধিক আপোসকৃত রিলিজ @7nohe/openapi-react-query-codegen দ্বারা TanStack Query-ভিত্তিক হুক ব্যবহার করে প্রজেক্টগুলিতে ম্যালওয়্যার প্রবেশ করানো হয়েছিল।
- আক্রমণকারী গালিগালাজ করেছিল binding.gyp স্যান্ডবক্স এস্কেপ এবং npm install চলাকালীন একটি দুর্বোধ্য জাভাস্ক্রিপ্ট পেলোড কার্যকর করার জন্য প্রি-ইনস্টল স্ক্রিপ্ট।
- পেলোড ব্যাপক ক্লাউড এবং ডেভেলপার ক্রেডেনশিয়াল সংগ্রহ করেসেগুলোকে আক্রমণকারী-নিয়ন্ত্রিত গিটহাব রিপোজিটরিগুলোতে পাচার করা হচ্ছে।
- চুরি করা টোকেনগুলো এরপর ব্যবহার করা হয় ম্যালওয়্যারটি আরও npm প্যাকেজ এবং GitHub রিপোজিটরিতে ছড়িয়ে দিন।বৃহত্তর জাভাস্ক্রিপ্ট সরবরাহ শৃঙ্খলকে বিষাক্ত করে তুলছে।
যেসব টিম React এবং অন্যান্য ফ্রন্ট-এন্ড ফ্রেমওয়ার্কে সার্ভার স্টেট ম্যানেজ করার জন্য তাদের প্রধান npm প্যাকেজ হিসেবে TanStack Query-এর ওপর নির্ভর করে , তাদের জন্য সাম্প্রতিক একটি সাপ্লাই-চেইন ঘটনা দেখিয়ে দিয়েছে যে সেই বিশ্বাস কত দ্রুত নষ্ট হয়ে যেতে পারে। OpenAPI স্কিমা থেকে টাইপ-সেফ TanStack Query হুক তৈরি করার জন্য বিশেষভাবে নির্মিত একটি জনপ্রিয় সহযোগী টুলকে গোপনে অস্ত্র হিসেবে ব্যবহার করা হয় এবং এর সাথে একটি অত্যাধুনিক ম্যালওয়্যার পেলোড সংযুক্ত করে npm রেজিস্ট্রি-তে পুশ করা হয়।
নিরাপত্তা গবেষকরা এই আক্রমণটিকে একটি TeamPCP-ধাঁচের অভিযান হিসেবে বর্ণনা করেছেন , যেখানে পূর্ববর্তী ঘটনাগুলোতে দেখা অনেক নাটকীয়তা এবং প্রযুক্তিগত প্যাটার্ন পুনরায় ব্যবহার করা হয়েছে। তবে এবার, সরাসরি লক্ষ্যবস্তু হলেন সেইসব ডেভেলপার, যারা @7nohe/openapi-react-query-codegen প্যাকেজটি ব্যবহার করে তাদের ডেটা লেয়ার তৈরি করেন। এই ইউটিলিটিটি হাতে করে গতানুগতিক কোড লেখার পরিবর্তে স্বয়ংক্রিয়ভাবে TanStack Query হুক তৈরি করে সময় বাঁচানোর প্রতিশ্রুতি দেয়।
কীভাবে একটি TanStack Query কোড জেনারেটর ম্যালওয়্যার ছড়ানোর মাধ্যমে পরিণত হলো
এই ঘটনার কেন্দ্রবিন্দুতে থাকা প্যাকেজ, @7nohe/openapi-react-query-codegen , একটি OpenAPI স্পেসিফিকেশন গ্রহণ করে TanStack Query-এর সাথে সামঞ্জস্যপূর্ণ সম্পূর্ণ টাইপড হুক তৈরি করার জন্য ডিজাইন করা হয়েছে। প্রতি সপ্তাহে দেড় লক্ষেরও বেশি ডাউনলোডের কারণে, এটি এমন অনেক দলের জন্য একটি অপরিহার্য অংশ, যারা তাদের React-ভিত্তিক ফ্রন্টএন্ডে ব্যাকএন্ড ডেটা আনা-নেওয়া, ক্যাশ করা এবং সিঙ্ক্রোনাইজ করার জন্য TanStack Query-কে স্ট্যান্ডার্ড হিসেবে ব্যবহার করে।
পোস্ট-মর্টেম অনুসারে, আক্রমণকারী এনপিএম প্যাকেজ এবং এর গিটহাব রিপোজিটরি উভয়কেই হ্যাক করতে সক্ষম হয়েছিল । প্রজেক্টটির একটি গিটহাব অ্যাকশনস ওয়ার্কফ্লো-এর দুর্বলতা কাজে লাগিয়ে এই হ্যাকিংটি করা হয়েছিল, যার ফলে ক্ষতিকারক বিল্ডগুলোকে বৈধ সিআই পাইপলাইন থেকে আসা বলে মনে হচ্ছিল এবং সেগুলো বৈধ প্রোভেনেন্স অ্যাটেস্টেশনসহ পাঠানো হচ্ছিল। এই ক্রিপ্টোগ্রাফিক অ্যাটেস্টেশনগুলো, যা সাধারণত এনপিএম ব্যবহারকারীদের জন্য একটি শক্তিশালী আস্থার সংকেত, ওয়ার্কফ্লোটি প্রতিকূল শক্তির নিয়ন্ত্রণে চলে যাওয়ার পর বিভ্রান্তিকর হয়ে ওঠে।
প্রায় বিশ মিনিটের একটি সংক্ষিপ্ত সময়ের মধ্যে, আক্রমণকারী npm-এ প্যাকেজটির দশটি ক্ষতিকর সংস্করণ প্রকাশ করে , যার প্রতিটিতে এমন কোড ছিল যা ইনস্টলেশনের সময় কার্যকর হওয়ার এবং একটি বহু-পর্যায়ের ম্যালওয়্যার পেলোড বুটস্ট্র্যাপ করার জন্য ডিজাইন করা হয়েছিল। ক্ষতিগ্রস্ত রিলিজগুলো বেশ কয়েকটি মাইনর এবং প্যাচ সংস্করণ জুড়ে বিস্তৃত, যেগুলোর সবগুলোকেই এখন অবিশ্বস্ত হিসেবে বিবেচনা করা উচিত।
- @7nohe/openapi-react-query-codegen@0.5.4
- @7nohe/openapi-react-query-codegen@0.5.5
- @7nohe/openapi-react-query-codegen@1.6.3
- @7nohe/openapi-react-query-codegen@1.6.4
- @7nohe/openapi-react-query-codegen@2.2.1
- @7nohe/openapi-react-query-codegen@2.2.2
- @7nohe/openapi-react-query-codegen@3.0.3
- @7nohe/openapi-react-query-codegen@3.0.4
- @7nohe/openapi-react-query-codegen@0.0.0-365d4eb738d3146583431948d3ba6e27a32556be
- @7nohe/openapi-react-query-codegen@0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab
এই সমস্ত প্রকারভেদের মূল উদ্দেশ্য একই: TanStack Query ব্যবহারকারীদের মধ্যে প্যাকেজটির জনপ্রিয়তাকে কাজে লাগিয়ে npm install-এর সময় কোড এক্সিকিউশন লাভ করা এবং তারপর তা বৃহত্তর জাভাস্ক্রিপ্ট সাপ্লাই চেইন জুড়ে ছড়িয়ে পড়া ।
“ট্রিনিটাইট” পেলোড এবং এর ইনস্টলেশন-সময়ের এক্সিকিউশন কৌশল
ম্যালওয়্যারটি একটি রসিকতাপূর্ণ লেবেলের মাধ্যমে নিজেকে চিহ্নিত করে। “ট্রিনিটাইট: প্রিভিউ ২ এফেক্টস-এর সৌজন্যে”পারমাণবিক পরীক্ষার ফলে সৃষ্ট কাঁচসদৃশ পদার্থের একটি উল্লেখ। আগের অভ্যন্তরীণ স্ক্রিপ্টের নামগুলো যেমন is_it_this_simple.js আক্রমণকারীর উদাসীন মনোভাবের ইঙ্গিত পাওয়া যায়, কিন্তু এর পেছনের কৌশলটি মোটেও সরল নয়।
প্রাথমিক এক্সিকিউশন হুকটি একটির উপর নির্ভর করে। binding.gyp স্যান্ডবক্স এস্কেপসাধারণ Node.js প্রোজেক্টে, node-gyp দ্বারা কম্পাইল করা নেটিভ অ্যাডঅন কনফিগার করার জন্য binding.gyp ব্যবহৃত হয়, কিন্তু এখানে এটিকে একটি বিশেষ অস্ত্র হিসেবে ব্যবহার করা হয়েছে। যখন npm একটি binding.gyp ফাইলের সম্মুখীন হয়, node-gyp সেটির মূল্যায়ন করে। conditions পাইথন ব্যবহার করে একটি ফিল্ড। আক্রমণকারী সেই ফিল্ডে সতর্কতার সাথে তৈরি করা একটি পাইথন এক্সপ্রেশন প্রবেশ করায়, যা পাইথনের ক্লাস হায়ারার্কিকে কাজে লাগিয়ে প্রত্যাশিত স্যান্ডবক্স থেকে বেরিয়ে আসে এবং যথেচ্ছ শেল কমান্ড চালায়।
আপোসকৃত প্যাকেজটিতে, শর্তাবলীর অভিব্যক্তিটি ব্যাপকভাবে অস্পষ্ট করা হয়েছে ইউনিকোড এবং হেক্স এস্কেপএকবার ডিকোড হয়ে গেলে, এটি পাইথনের অভ্যন্তরীণ পথে অগ্রসর হয়। __subclasses__ গাছটি সনাক্ত করতে catch_warnings শ্রেণী, সেটাকে কেন্দ্রবিন্দু হিসেবে ব্যবহার করে পৌঁছায় __builtins__, আমদানি করে os মডিউল এবং অবশেষে কলগুলি os.system() নোড ব্যবহার করে মূল পেলোডটি চালু করতে। type binding.gyp-এর field হেক্স-এনকোড করা হয় noneসুতরাং, কোনো প্রকৃত নেটিভ বিল্ড তৈরির চেষ্টা করা হয় না; এই কনফিগারেশনটি শুধুমাত্র একটি শেল কমান্ড গোপনে ঢুকিয়ে দেওয়ার জন্য বিদ্যমান।
এই পদ্ধতির অর্থ হল প্যাকেজটি পারে ইনস্টলেশনের সময় ক্ষতিকারক কোড কার্যকর করা এমনকি যদি কোনও সুস্পষ্ট না থাকে preinstall package.json-এ স্ক্রিপ্টটি সংজ্ঞায়িত করা আছে। তবে, সব বিষাক্ত সংস্করণই ঠিক এই কৌশলটির উপর নির্ভর করে না। দুটি প্রি-রিলিজ বিল্ড আরও সরল প্রি-ইনস্টল হুক ব্যবহার করে: একটি একটি নোড স্ক্রিপ্ট চালায় যার নাম nu.js সরাসরি, যখন অন্যটি Bun রানটাইম নিয়ে আসে এর মাধ্যমে wget পাইপ দিয়ে সংযুক্ত bash এবং তারপর উপযুক্ত নামে পরিচিতটি চলে। is_it_this_simple.jsপরবর্তী সংস্করণগুলিতে উভয় পদ্ধতিই একত্রিত করা হয়েছে এবং একটি ক্ষতিকারক binding.gyp অন্তর্ভুক্ত করা হয়েছে। এবং a preinstall পুনরাবৃত্তি রোধ করার জন্য এন্ট্রিটি একই প্রধান জাভাস্ক্রিপ্ট পেলোডকে নির্দেশ করে।
মূল জাভাস্ক্রিপ্ট পেলোডে তথ্য গোপনের স্তর এবং স্যান্ডবক্স এড়ানো
প্রাথমিক হুকটি সক্রিয় হওয়ার পর, আক্রমণটি npm প্যাকেজের রুটে রাখা 3FWCvzduYZg.js নামের একটি বড় জাভাস্ক্রিপ্ট ফাইলের দিকে মোড় নেয়। প্রায় ৫.৪ মেগাবাইট আকারের এবং মিনিফাই করে একটি মাত্র লাইনে পরিণত করা এই স্ক্রিপ্টটিকে এক নজরে যতটা সম্ভব দুর্বোধ্য রাখার জন্য ডিজাইন করা হয়েছে, এবং আরও বিশ্লেষণে দেখা যায় যে এটি একাধিক স্বতন্ত্র এনক্রিপশন ও অবফাসকেশন স্তর দ্বারা সুরক্ষিত।
সবচেয়ে বাইরের স্তরটি একটি ১.৬ মিলিয়ন উপাদান বিশিষ্ট পূর্ণসংখ্যা অ্যারেধ্রুবক ২৯-এর সাথে একটি সাধারণ XOR অপারেশনের মাধ্যমে ডিক্রিপ্ট করা হয়। সেই ডিক্রিপশনের ফলে একটি সেকেন্ডারি স্ক্রিপ্ট তৈরি হয়, যার কাজ হলো নীরবে বান রানটাইম পুনরুদ্ধার করে একটি অস্থায়ী ফাইলের নামে সংরক্ষণ করা। trinnyyyy-XXXXX সিস্টেমের টেম্প ডিরেক্টরিতে প্যাটার্নটি খুঁজুন, এবং তারপর আসল কোর পেলোডটি এক্সিকিউট করতে Bun ব্যবহার করুন। কোরটি নিজেই AES‑128‑GCM এনক্রিপশন দিয়ে মোড়ানো থাকে এবং তারপর স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট অবফাসকেশন কৌশলের উপরে কাস্টম সাইফারের মধ্য দিয়ে পাঠানো হয়, যার মধ্যে obfuscator.io-এর মতো জনপ্রিয় টুলগুলিতে ব্যবহৃত কৌশলও অন্তর্ভুক্ত।
সম্পূর্ণরূপে উন্মোচিত হলে, এই বহুস্তরবিশিষ্ট পেলোডটি বিভিন্ন ধরনের সক্ষমতার এক মিশ্রণ প্রকাশ করে: ক্লাউড ও ডেভেলপার প্ল্যাটফর্মের এক বিশাল অংশকে লক্ষ্য করে তৈরি একটি ক্রেডেনশিয়াল হারভেস্টার , নতুন টার্গেটে সংক্রমণ ছড়াতে সক্ষম একটি ওয়ার্ম কম্পোনেন্ট এবং একটি ধ্বংসাত্মক কমান্ড চ্যানেল। এর কোনোটি সক্রিয় হওয়ার আগে, স্ক্রিপ্টটি স্যান্ডবক্স ও নিরাপত্তা টুলগুলো এড়ানোর জন্য একাধিক পরিবেশগত পরীক্ষা চালায় এবং কিছু নির্দিষ্ট লক্ষণীয় শর্ত পূরণ হলে নীরবে বন্ধ হয়ে যায়।
যাচাইগুলোর মধ্যে রয়েছে অবস্থান, পরিবেশ এবং ফাইলসিস্টেম সূচক এটি সাধারণত গবেষণা পরিবেশের সাথে সম্পর্কিত। যদি সিস্টেম লোকেল রাশিয়ান হয়, যদি CrowdStrike, SentinelOne বা Carbon Black-এর মতো এন্ডপয়েন্ট সিকিউরিটি প্রোডাক্টের ডিরেক্টরি উপস্থিত থাকে, যদি বর্তমান ওয়ার্কিং ডিরেক্টরি পরিচিত সাপ্লাই-চেইন স্ক্যানিং টুল দ্বারা ব্যবহৃত পাথের সাথে মিলে যায়, অথবা যদি এনভায়রনমেন্ট ভেরিয়েবলে সিকিউরিটি স্ক্যানার দ্বারা ব্যবহৃত নকল ক্রেডেনশিয়াল থাকে, তাহলে ম্যালওয়্যারটি কাজ করা বন্ধ করে দেয়। এটি আরও দেখে... GITHUB_REPOSITORY_OWNER এবং স্টেপসিকিউরিটির মতো হার্ডেনিং টুলের উপস্থিতি harden-runnerনিরাপত্তা গবেষকদের বলে পরিচিত গিটহাব অ্যাকাউন্টগুলো এড়িয়ে চলুন।
ম্যালওয়্যারটি TanStack কোয়েরি-ভিত্তিক ডেভেলপমেন্ট এনভায়রনমেন্ট থেকে যা চুরি করে
পরিবেশগত পরীক্ষাগুলো সফলভাবে সম্পন্ন হওয়ার পর, ম্যালওয়্যারটি ব্যাপকভাবে ক্রেডেনশিয়াল সংগ্রহ করা শুরু করে। যদিও মূল প্যাকেজটিকে TanStack Query ব্যবহারকারীদের জন্য একটি সহায়ক হিসেবে উপস্থাপন করা হয়, এর প্রকৃত লক্ষ্যবস্তু একটিমাত্র লাইব্রেরির অনেক ঊর্ধ্বে বিস্তৃত এবং এটি একজন আধুনিক জাভাস্ক্রিপ্ট ডেভেলপারের টুলচেইন ও ক্লাউড স্ট্যাকের প্রায় প্রতিটি স্তরকে স্পর্শ করে।
ডেভেলপার প্রান্তে, পেলোডটি স্ক্যান করে গিটহাব ব্যক্তিগত অ্যাক্সেস টোকেন একাধিক বিন্যাসে, যার মধ্যে ক্লাসিক টোকেনগুলিও অন্তর্ভুক্ত যা দিয়ে শুরু হয় gho or ghp এবং নতুন সূক্ষ্ম টোকেন যা দিয়ে শুরু হয় github_pat_গিটহাব অ্যাকশনস রানারগুলিতে, এটি নথিভুক্ত পদ্ধতির মাধ্যমে ওপেনআইডি কানেক্ট টোকেনও অনুরোধ করে। ACTIONS_ID_TOKEN_REQUEST_TOKEN এবং ACTIONS_ID_TOKEN_REQUEST_URL এনভায়রনমেন্ট ভেরিয়েবল, যা আক্রমণকারীকে শুধু স্ট্যাটিক সিক্রেটের পরিবর্তে ওয়ার্কলোড আইডেন্টিটি ধারণ করার পথ করে দেয়।
এরপর স্ক্রিপ্টটি সাধারণ ভাষা রেজিস্ট্রিগুলোর দিকে যায়। এতে লেখা আছে npm, PyPI এবং RubyGems টোকেন কনফিগারেশন ফাইল থেকে যেমন ~/.npmrcঅতিরিক্ত প্রকল্প-স্থানীয় স্ক্যানের জন্য .npmrc ফাইলগুলি এবং আবিষ্কৃত এনপিএম বিয়ারার টোকেনগুলি যাচাই করার চেষ্টা করে কল করে /-/whoami পাবলিক রেজিস্ট্রিতে এন্ডপয়েন্ট। PyPI এবং RubyGems-এর ক্ষেত্রেও একই ধরনের প্যাটার্ন ব্যবহার করা হয়, যেখানে অথেনটিকেশন ডেটা মাইনিং করা হয় এবং পাচার করার আগে প্রতিটি টোকেন সংশ্লিষ্ট রেজিস্ট্রির সাথে সফলভাবে যোগাযোগ করতে পারছে কিনা তা নিশ্চিত করা হয়।
ক্লাউডে এর প্রভাব আরও ব্যাপক। অ্যামাজন ওয়েব সার্ভিসেস-এ, ম্যালওয়্যারটি এনভায়রনমেন্ট ভেরিয়েবলগুলো গণনা করে, যেমন— AWS_ACCESS_KEY_ID এবং AWS_SECRET_ACCESS_KEYপার্স করে ~/.aws/credentials এবং ~/.aws/configএবং EC2 ইনস্ট্যান্স মেটাডেটা সার্ভিসে কোয়েরি করে 169.254.169.254, প্রধানত IMDSv2 ব্যবহার করে কিন্তু প্রয়োজনে বিকল্পও ব্যবহার করে। কন্টেইনার ওয়ার্কলোডের জন্য, এটি ECS মেটাডেটা এন্ডপয়েন্টের সাথে যোগাযোগ করে। 169.254.170.2এটি যে কোনো পরিচয়পত্র বা অস্থায়ী টোকেন পুনরুদ্ধার করে, তা যাচাই করা হয়। sts:GetCallerIdentity বহির্গমনের জন্য সারিতে যুক্ত হওয়ার আগে বৈধতা নিশ্চিত করতে।
অন্যান্য ক্লাউড প্রদানকারীদের ক্ষেত্রেও তুলনীয় যুক্তি বিদ্যমান। স্ক্রিপ্টটি সংগ্রহ করতে পারে। অ্যাজুর ক্লায়েন্ট ক্রেডেনশিয়াল এবং পরিচালিত পরিচয়সহ AZURE_CLIENT_ID, AZURE_CLIENT_SECRET এবং AZURE_TENANT_IDএবং তারপরে প্রমাণীকৃত হলে Azure Key Vault, Azure Resource Manager এবং Microsoft Graph অ্যাক্সেস করতে পারে। Google Cloud-এর জন্য, এটি অনুসন্ধান করে GOOGLE_APPLICATION_CREDENTIALS ফাইলগুলি, GCP মেটাডেটা সার্ভারে কোয়েরি করে metadata.google.internal এবং, যখন সম্ভব, প্রাপ্ত টোকেনগুলো ব্যবহার করে গুগল সিক্রেট ম্যানেজারকে কল করে। হ্যাশিকর্প ভল্ট ডেপ্লয়মেন্টগুলোও এই তালিকায় রয়েছে: পেলোডটি এনভায়রনমেন্ট ভেরিয়েবল এবং টোকেন ফাইলের মাধ্যমে ভল্ট অ্যাড্রেস ও টোকেন খোঁজে, তারপর অ্যাক্সেসযোগ্য সিক্রেটগুলো গণনা করার জন্য ভল্টের HTTP API অনুসন্ধান করে।
ক্লাউড আইএএম-এর বাইরেও, ম্যালওয়্যারটি একটি ব্যাপক কার্যক্রম পরিচালনা করে। ১৫০টিরও বেশি গ্লোব প্যাটার্ন ব্যবহার করে ফাইলসিস্টেম সুইপএটি SSH প্রাইভেট কী, ডকার কনফিগারেশন ইত্যাদি খুঁজে বের করে। .env ফাইল, গিট ক্রেডেনশিয়াল স্টোর, .npmrc এবং .pypirc ফাইল, টেরাফর্ম ও কার্গো ক্রেডেনশিয়াল, শেল হিস্ট্রি ফাইল, ক্রিপ্টোকারেন্সি ওয়ালেট ডেটা, এবং সিগন্যাল, টেলিগ্রাম ডেস্কটপ, ডিসকর্ড, স্ল্যাক ও এলিমেন্টের মতো বহুল ব্যবহৃত মেসেজিং অ্যাপের কনফিগারেশন ডিরেক্টরি। এটি নর্ডভিপিএন, প্রোটনভিপিএন, সাইবারঘোস্ট, পিআইএ এবং অন্যান্য সার্ভিসের ভিপিএন কনফিগারেশন ফাইলের পাশাপাশি জেফ্রগ আর্টিফ্যাক্টরির মতো বাইনারি রিপোজিটরি ম্যানেজারের টোকেন ও ডোমেইনও পরীক্ষা করে।
গিটহাব রিপো এবং “মিউ মিউ মিউ” কমিটগুলির মাধ্যমে তথ্য পাচার
এই সমস্ত গোপনীয় তথ্য সংগ্রহ করার পর, ম্যালওয়্যারটির সেগুলো পাঠানোর জন্য একটি জায়গার প্রয়োজন হয়। সহজে ব্লক করা যেতে পারে এমন কোনো নির্দিষ্ট কমান্ড-অ্যান্ড-কন্ট্রোল ডোমেইন ব্যবহার করার পরিবর্তে, আক্রমণকারীরা ডেটা পাচারের মাধ্যম হিসেবে পাবলিক গিটহাব রিপোজিটরিগুলোর ওপর নির্ভর করে এবং চুরি করা ডেটাকে ডেভেলপারদের স্বাভাবিক ট্র্যাফিক প্রবাহের সাথে মিশিয়ে দেয়।
পেলোডটি প্রথমে গিটহাবের পাবলিক কমিট হিস্ট্রিতে একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন মেসেজ খোঁজে, যেখানে একটি এনক্রিপ্টেড টোকেন খোলাখুলিভাবে এমবেড করা থাকে এবং এটি বাতিল করার জন্য ব্যবহারকারীদের তিরস্কার করে এমন একটি বাক্য ব্যবহার করা হয়। এই ধরনের কোনো কমিট খুঁজে পেলে, ম্যালওয়্যারটি এমবেড করা টোকেনটি ডিক্রিপ্ট করে এবং সংশ্লিষ্ট অ্যাকাউন্টটি ব্যবহার করে একটি নতুন রিপোজিটরি তৈরি করে, যেখানে চুরি করা ডেটা সংরক্ষণ করা হবে। এই পরোক্ষ পদ্ধতির অর্থ হলো, একজন ভুক্তভোগীর কাছ থেকে নেওয়া ক্রেডেনশিয়ালগুলো প্রযুক্তিগতভাবে অন্য একজন গিটহাব ব্যবহারকারীর মালিকানাধীন রিপোজিটরিতে সংরক্ষিত হয়, যা হ্যাক হওয়া রিপোজিটরিগুলোর নেটওয়ার্ককে কোনো একক আক্রমণকারীর পরিচয়ের সাথে সংযুক্ত করা আরও কঠিন করে তোলে।
নতুন তৈরি করা রিপোজিটরিগুলোতে আছে খামখেয়ালী, স্বয়ংক্রিয়ভাবে তৈরি নাম Touhou Project সিরিজের দুটি চরিত্র এবং একটি এলোমেলো সংখ্যা দিয়ে গঠিত, যার ফলে নিম্নলিখিত সংমিশ্রণগুলো তৈরি হয়: cirno-marisa-74291 or reimu-kogasa-12048এদের বিবরণগুলোতে পেলোডে দেখা “Trinitite: Sponsored by Preview 2 Effects” বাক্যটিই ব্যবহার করা হয়েছে, যা ডিফেন্ডারদের জন্য বৃহৎ পরিসরে এই রিপোগুলো শনাক্ত করার অন্যতম স্পষ্ট নির্দেশক হিসেবে কাজ করে।
চুরি করা পরিচয়পত্রগুলি একটি এনক্রিপ্টেড JSON ফাইল হিসাবে জমা দেওয়া হয়। results/ ডিরেক্টরি, এমন ফাইলের নাম ব্যবহার করে যা দিয়ে শুরু হয় doubletrinnys- এর পরে একটি কাউন্টার এবং টাইমস্ট্যাম্প থাকে। প্রতিটি ফাইলে একটি থাকে envelope এনক্রিপ্ট করা ডেটা বান্ডেল ধারণকারী ক্ষেত্র এবং একটি key এনক্রিপশন কী-টি ধারণকারী ফিল্ড, যা আক্রমণকারীর RSA পাবলিক কী ব্যবহার করে আরও মোড়ানো থাকে। সাধারণ দৃষ্টিতে, এগুলোকে যথেচ্ছ এনক্রিপ্টেড ব্লব বলে মনে হয়। শুধুমাত্র যার কাছে মিলযুক্ত প্রাইভেট কী আছে, তিনিই এই প্রক্রিয়াটি বিপরীত করতে পারেন, তাই রিপোজিটরিগুলো খুঁজে পাওয়া গেলেও, প্রকৃত গোপনীয় বিষয় তৃতীয় পক্ষের কাছে অস্বচ্ছ থেকে যায়।কমিট মেসেজগুলো সাধারণত সংক্ষিপ্ত ও হালকা মেজাজের হয়, এবং এতে “মিউ মিউ মিউ”-এর মতো শব্দগুচ্ছ বারবার ব্যবহৃত হয়।
অন্যান্য এনপিএম প্যাকেজ এবং গিটহাব প্রজেক্টে ওয়ার্মের মতো বিস্তার
ট্রিনিটিট ক্যাম্পেইনের সবচেয়ে উদ্বেগজনক দিকগুলোর মধ্যে একটি হলো, চুরি করা টোকেন পুনরায় ব্যবহার করে অতিরিক্ত প্যাকেজ এবং রিপোজিটরিগুলোকে ক্ষতিগ্রস্ত করার ক্ষমতা । ম্যালওয়্যারটি নিজেকে মূল ট্যানস্ট্যাক কোয়েরি কোড জেনারেটর প্যাকেজের মধ্যে সীমাবদ্ধ না রেখে, একটি ওয়ার্মের মতো আচরণ করে এবং পদ্ধতিগতভাবে ছড়িয়ে পড়ার উপায় খুঁজতে থাকে।
হাতে একটি বৈধ এনপিএম টোকেন থাকলে, পেলোডটি অ্যাকাউন্টটির সাথে যুক্ত সমস্ত টোকেন গণনা করার জন্য এনপিএম এপিআই-কে কোয়েরি করে এবং সবচেয়ে সুবিধাপ্রাপ্ত পাবলিশ টোকেনটি নির্বাচন করে। এরপর এটি সেই মেইনটেইনারের মালিকানাধীন প্রতিটি প্যাকেজ অনুসন্ধান করে, প্রতিটির বিদ্যমান টারবল ডাউনলোড করে এবং প্যাকেজের বিষয়বস্তুর মধ্যে একই binding.gyp স্যান্ডবক্স এস্কেপ ও মূল পেলোড ফাইলটি প্রবেশ করিয়ে দেয়। এই পরিবর্তনগুলোর পর, এটি বৈধ মেইনটেইনারের নামে এনপিএম-এ একটি নতুন সংস্করণ প্রকাশ করে, যা কার্যকরভাবে বিশ্বস্ত প্যাকেজগুলোকে নতুন সংক্রমণের বাহক (ইনফেকশন ভেক্টর) হিসেবে পরিণত করে । ক্লায়েন্ট-সাইড পিনিং সমস্যা এড়ানোর জন্য আউটবাউন্ড অনুরোধগুলোতে টিএলএস সার্টিফিকেট চেক নিষ্ক্রিয় রেখে, পাইপিআই (PyPI) এবং রুবিজেমস (RubyGems)-এর ক্ষেত্রেও তাদের নিজ নিজ আপলোড এন্ডপয়েন্টের মাধ্যমে একই ধরনের আচরণ প্রয়োগ করা হয়।
গিটহাব রিপোজিটরিগুলোর সাথেও একই রকম আচরণ করা হয়। যখন ম্যালওয়্যারটি পর্যাপ্ত স্কোপসহ একটি গিটহাব টোকেন পায়, তখন এটি কয়েকটি পরিচিত অটোমেশন ব্রাঞ্চ, যেমন যেগুলোর শুরুতে নির্দিষ্ট উপসর্গ (") থাকে, সেগুলোকে বাদ দিয়ে প্রতিটি অ্যাক্সেসযোগ্য রিপোজিটরি এবং ব্রাঞ্চের তালিকা তৈরি করে। release/, dependabot/, renovate/ or copilot/বাকি শাখাগুলোর জন্য, এটি সতর্কতার সাথে নির্বাচিত কিছু ফাইল কমিট করে, যেগুলো ব্যাকডোর এবং আধুনিক ডেভেলপমেন্ট টুলিং-এ প্রবেশের মাধ্যম উভয় হিসেবেই কাজ করে।
এর মধ্যে রয়েছে ব্যাকডোরযুক্ত ভিএস কোড এবং ক্লড কনফিগারেশন ফাইলসহ .vscode/tasks.json, .claude/settings.json এবং স্ক্রিপ্ট পছন্দ setup.mjs যেগুলো একজন ডেভেলপার নির্দিষ্ট কিছু এআই-সহায়তাযুক্ত এডিটরে কোনো প্রজেক্ট খুললে কার্যকর হয়। ম্যালওয়্যারটি একটি নকল ফাইলও ফেলে দেয়। .github/workflows/codeql.yml এটি এমন একটি ওয়ার্কফ্লো যা সিকিউরিটি স্ক্যানের ছদ্মবেশে CI-এর ভেতরে কোড এক্সিকিউশনের জন্য আরেকটি পথ তৈরি করে দেয়। অতিরিক্ত ফাইলগুলো জেমিনি, কার্সর এবং বিভিন্ন কোড অ্যাসিস্ট্যান্টের মতো অন্যান্য এডিটর ও টুলকে লক্ষ্য করে তৈরি করা হয়, যা আক্রমণকারীকে ডেভেলপাররা যেখানেই কাজ করুক না কেন, সেখানে তার উপস্থিতি বজায় রাখতে সাহায্য করে।
এই কমিটগুলোর প্রত্যেকটি এর অধীনে রচিত হয়েছে github-actions পরিচয়, যেখানে “কাজ: নির্ভরতা আপডেট করুন”-এর মতো রুটিন রক্ষণাবেক্ষণের মতো বার্তা এবং একটি ট্রেইলার ফ্ল্যাগিং থাকে। skip-checks:true প্রয়োজনীয় যাচাই এড়িয়ে যাওয়ার জন্য। ব্যস্ত কোনো দল যখন এক নজরে কমিট লগ দেখে, তখন এই পরিবর্তনগুলোকে সহজেই ভুল বোঝা যেতে পারে। নিরীহ অটোমেশন আপডেট.
TanStack Query টুলিং ব্যবহারকারী দলগুলোর আপোসের সূচক
যেসব সংস্থা TanStack Query-এর উপর নির্ভর করে এবং তাদের কর্মপ্রবাহে @7nohe/openapi-react-query-codegen সংহত করেছে, তাদের জন্য সম্ভাব্য ঝুঁকি শনাক্তকরণ শুরু হয় সংস্করণ এবং ফাইল-স্তরের সূচকগুলির মাধ্যমে, যা এখন একাধিক সূত্র তুলে ধরেছে। এই সূত্রগুলি নির্দিষ্টভাবে চিহ্নিত করতে সাহায্য করতে পারে যে কোন প্রকল্পগুলি তাদের ইনস্টল করার ধাপগুলিতে আপোসকৃত কোডটি চালিয়ে থাকতে পারে।
পূর্বে তালিকাভুক্ত @7nohe/openapi-react-query-codegen- এর প্রভাবিত সংস্করণগুলির যেকোনো ব্যবহারকে সন্দেহজনক হিসেবে বিবেচনা করা উচিত, বিশেষ করে যদি বিল্ডগুলি শেয়ার্ড CI পরিকাঠামোতে বা সংবেদনশীল ক্রেডেনশিয়াল অ্যাক্সেস আছে এমন ডেভেলপারদের ল্যাপটপে করা হয়ে থাকে। নিরাপত্তা দলগুলিকে লকফাইল, package.json হিস্টোরি এবং বিল্ড লগ নিরীক্ষা করে নিশ্চিত করার পরামর্শ দেওয়া হচ্ছে যে ঐ রিলিজগুলি আদৌ প্রোডাকশন বা স্টেজিং এনভায়রনমেন্টে পুল করা হয়েছিল কিনা।
ডিস্কে, নিরাপত্তা লঙ্ঘনের একটি প্রধান লক্ষণ হলো প্যাকেজ রুটে 3FWCvzduYZg.js ফাইলটির উপস্থিতি । তদন্তকারীরা এই স্ক্রিপ্টের বিভিন্ন দুর্বোধ্য বিল্ডের সাথে যুক্ত বেশ কয়েকটি SHA-256 হ্যাশ তালিকাভুক্ত করেছেন, যেগুলোর সবগুলোই একই অন্তর্নিহিত কার্যকারিতার সাথে সংযুক্ত:
- 8e5d1af68ca340ae0c6e8132cb00c686ec2d60502c1994d94ce353d1472ad5a3
- b49afb7dba04cd99b357ce7c652c823a3707f28e130bd5c6645851a7adc030d6
- 59370c67b54a0ccaedd265e2356f04540b2fba1e1845300ef6de4d5437d99380
- 778d6f0058045d6a2ab9a7e1d3e3be8e7e6b4d9cc217d13949bf1dfbab759a7c
- b24d121667f21f492cb9db34fbfd515d5922a8dd30b9c45215c7220abbb10ca8
- e1f1162ece9a6e6ea21a20399cbf31c563a8149d433a68711f4223870c203d5a
- b6012b2ff87f08f93ee53921c48db907ddbcf5461b03bb988083b01a36886237
- 709af2fdeb50324229e94c44c679a0fab18bd8e17d3864405989c526cbb63ad8
এছাড়াও, অনেক সংক্রামিত হোস্ট অস্থায়ী ডিরেক্টরি তৈরি করে যার নামগুলি দিয়ে শুরু হয় trinnyyyy- এর পরে সিস্টেম টেম্প ফোল্ডারে এলোমেলো আলফানিউমেরিক অক্ষরের একটি সংক্ষিপ্ত স্ট্রিং পাওয়া যায়। যদিও শুধুমাত্র এই প্যাটার্নটি কোনো নিরাপত্তা লঙ্ঘনের প্রমাণ দেয় না, তবে একটি সন্দেহজনক binding.gyp ফাইল এবং পরিচিত পেলোড হ্যাশগুলোর কোনো একটির সাথে মিলিত হয়ে এটি সেই সিস্টেমে ট্রিনিটি ম্যালওয়্যারটি কার্যকর হওয়ার সম্ভাবনাকে উল্লেখযোগ্যভাবে বাড়িয়ে তোলে।
কিছু নিরাপত্তা সরবরাহকারী প্রতিষ্ঠান ইতিমধ্যেই এই সূচকগুলোকে তাদের ডিটেকশন ফিডে অন্তর্ভুক্ত করেছে। উদাহরণস্বরূপ, ডেভেলপার টুলিং এবং সাপ্লাই-চেইন নিরাপত্তার উপর দৃষ্টি নিবদ্ধকারী প্ল্যাটফর্মগুলো এখন প্রভাবিত সংস্করণগুলো ইম্পোর্ট করে এমন যেকোনো রিপোজিটরি বা প্রজেক্টকে একটি গুরুতর ম্যালওয়্যার সমস্যা হিসেবে চিহ্নিত করে , এবং প্রায়শই তাৎক্ষণিক তদন্ত শুরু করার জন্য এটিকে সর্বোচ্চ তীব্রতার স্তরে স্কোর করে। টিমগুলোকে তাদের প্রতিষ্ঠান জুড়ে রিস্ক্যান চালানোর জন্য উৎসাহিত করা হচ্ছে, বিশেষ করে এমন পরিবেশে যেখানে অ্যাপ্লিকেশন আর্কিটেকচারের কেন্দ্রবিন্দুতে TanStack Query রয়েছে এবং কোড জেনারেশন টুলগুলো ব্যাপকভাবে ব্যবহৃত হয়।
বিশেষায়িত টুল এবং ওপেন-সোর্স ইউটিলিটি তৈরি হচ্ছে, যেগুলো npm, yarn, pnpm এবং এই জাতীয় অন্যান্য প্যাকেজ ম্যানেজারের সামনে থেকে ইনস্টলেশনের আগে সংগৃহীত ইন্টেলিজেন্স ফিডের সাথে প্যাকেজের ভার্সন মিলিয়ে দেখে। এর মূল উদ্দেশ্য হলো, ক্ষতিকর বা সন্দেহজনক প্যাকেজগুলোকে, বিশেষ করে এই ধরনের ঘটনার সাথে জড়িত প্যাকেজগুলোকে, সিস্টেমে আসার আগেই আটকে দেওয়া। node_modulesযার ফলে একটি আপোসকৃত হেল্পার লাইব্রেরি পরোক্ষভাবে যে ঝুঁকি প্রকাশ করতে পারে তা হ্রাস পায়। TanStack কোয়েরি-চালিত অ্যাপ্লিকেশন এবং তাদের সংশ্লিষ্ট অবকাঠামো।
ডেভেলপমেন্ট টিমগুলোর জন্য, এই ঘটনাটি এটাই তুলে ধরে যে, আপাতদৃষ্টিতে নিরীহ একটি সুবিধাজনক প্যাকেজ—যা কেবল একটি OpenAPI স্পেক থেকে TanStack Query-এর জন্য টাইপড হুক তৈরি করে—কীভাবে একটি শক্তিশালী আক্রমণের মাধ্যম হয়ে উঠতে পারে, যখন এর CI পাইপলাইন এবং ডিস্ট্রিবিউশন চ্যানেলকে বিকৃত করা হয়। এখন প্রতিরক্ষামূলক ব্যবস্থাগুলোকে মূল অ্যাপ্লিকেশন ডিপেন্ডেন্সিগুলো পরীক্ষা করার বাইরেও প্রসারিত করতে হবে এবং এর মধ্যে সেই জেনারেটর, CLI ও অটোমেশন স্ক্রিপ্টগুলোকেও অন্তর্ভুক্ত করতে হবে, যেগুলো নীরবে প্রতিদিন সেই ডিপেন্ডেন্সিগুলোর ব্যবহারকে রূপ দেয়।