জুলসজ্যাকার: একটি নকল এনপিএম ওয়ার্ম যা জুলস এআই-এর ছদ্মবেশ ধারণ করে

জুলসজ্যাকার: একটি নকল-PoC এনপিএম ওয়ার্ম যা গুগলের জুলস এজেন্টের ছদ্মবেশ ধারণ করে — এবং এটিকে বিশ্লেষণকারী স্যান্ডবক্সটি চালু করে দেয়

সুচিপত্র

অবশ্যই পঠনীয় পোস্ট

আগ্রহের সর্বশেষ পোস্টগুলি

TL; ডিআর

একজন এনপিএম অপারেটর ছয় সপ্তাহ ধরে নকল টাইপস্ক্রিপ্ট “ইউটিলিটি” প্যাকেজ প্রকাশ করেছেন, যেমন ts-form-utils, ts-project-lint, এবং ts-enum-helper.

প্যাকেজগুলো দেখতে ছোটখাটো ও বৈধ মনে হওয়া ভ্যালিডেশন হেল্পার দেখালেও, আসল পেলোডটি ইনস্টল বা প্রথমবার রিকোয়ার করার সময় এক্সিকিউট হয় এবং হোস্ট ফিঙ্গারপ্রিন্টিং, গিটহাব অর্গানাইজেশন ডিসকভারি, রিপোজিটরি ক্লোনিং ও সোর্স-কোড এক্সফিলট্রেশন সম্পাদন করে।

ম্যালওয়্যারটি বিশেষভাবে একাধিক উচ্চ-মূল্যের গিটহাব অর্গানাইজেশনকে টার্গেট করে। বিষয়শ্রেণী রিপোজিটরিগুলো, তারপর আর্কাইভ করে এবং পৌঁছানো যায় এমন সোর্স ট্রিগুলোকে একটি কেন্দ্রীভূত সংগ্রহ এন্ডপয়েন্টে পাচার করে।

আপস কর্মপ্রবাহের অংশ হিসেবে, পেলোড commitগুগলের স্বায়ত্তশাসিত কোডিং পরিচয়ের ছদ্মবেশ ধারণ করে sa ফাইলটি ভুক্তভোগীদের রিপোজিটরিতে পুনরায় প্রবেশ করানো হয়। google-labs-jules[bot].

আমরা প্রচারাভিযানটি অনুসরণ করেছি — যার নাম জুলসজ্যাকার একাধিক প্রকাশকের পরিধি জুড়ে এবং কমপক্ষে পাঁচটি পেলোড জেনারেশনে, যার মধ্যে এনক্রিপ্টেড এবং স্যান্ডবক্স-সচেতন সংস্করণ অন্তর্ভুক্ত রয়েছে।

সর্বশেষ সংস্করণটি বিশেষভাবে ম্যালওয়্যার-বিশ্লেষণ পরিকাঠামোকে লক্ষ্য করে: এটি কেবল বিশ্লেষণ পরিবেশের ভেতরেই সক্রিয় হয়, ক্লাউড মেটাডেটা পরিষেবা-অ্যাকাউন্ট টোকেন চুরি করে এবং কুবারনেটিস কন্ট্রোল প্লেন ও ক্লাউড স্টোরেজ বাকেটগুলোতে অনুপ্রবেশ করে।

সকল পেলোড জেনারেশন জুড়ে ব্যবহৃত প্রাথমিক IOC হলো কালেকশন এন্ডপয়েন্ট। aaronstack[.]com/jules-collect.

তীব্রতা: সংকটজনক।

আক্রমণ: এটি কীভাবে কাজ করে

প্রতিটি JulesJacker প্যাকেজ একই টেমপ্লেট অনুসরণ করে। package.json এটি একটি এমআইটি লাইসেন্সযুক্ত এবং কোনো লিঙ্ক করা সোর্স রিপোজিটরি ছাড়া একটি নিরীহ টাইপস্ক্রিপ্ট হেল্পারের বিজ্ঞাপন দেয়। index.js এটি ইমেল রেজেক্স, এনাম ম্যাপ, লিন্ট রুল টেবিলের মতো কয়েকটি বাস্তব ও কার্যকরী ফাংশন এক্সপোর্ট করে, যাতে কোনো ডেভেলপার প্যাকেজটি ইম্পোর্ট করলে এর আচরণ বিশ্বাসযোগ্য মনে হয়। এর বিদ্বেষ অন্য জায়গায় লুকিয়ে আছে: একটি পোস্টইনস্টল হুক, অথবা নীচের একটি ব্লকে index.js যেটি মডিউলটির প্রয়োজন হওয়ার মুহূর্তে কার্যকর হয়।

পেলোডগুলি সুস্পষ্টভাবে সংখ্যায়িত অভ্যন্তরীণ পর্যায়গুলির মধ্য দিয়ে বিকশিত হয়েছে (অপারেটর তার নিজস্ব টেলিমেট্রি ইভেন্টগুলিকে লেবেল করে) sc1-, sc3-, sc4-এবং আরও অনেক কিছু), এবং সেই বিবর্তন পর্যবেক্ষণ করাই প্রচারণাটি বোঝার সবচেয়ে স্পষ্ট উপায়।

 প্রজন্ম ১-২: তথ্য সংগ্রহ এবং গিট-কনফিগারেশন চুরি

প্রথম দিকের প্যাকেজগুলো ছিল সরাসরি তথ্যচোর। ইনস্টল করার সময় এগুলো এনভায়রনমেন্ট ভেরিয়েবল, গিটহাব সিএলআই হোস্ট ফাইল এবং গ্লোবাল গিট কনফিগারেশন সংগ্রহ করত।git config –global –list, গিট রিমোট -ভি), তারপর বান্ডেলটি কালেকশন এন্ডপয়েন্টে POST করা হলো। এর মাধ্যমে অপারেটরের একটি স্বতন্ত্র পরিচয় প্রতিষ্ঠিত হলো: “টাইপস্ক্রিপ্ট ফর্ম ভ্যালিডেশন ইউটিলিটি” নামক একটি ভুয়া গল্প, একটিমাত্র ডোমেইনের উদ্দেশ্যে পাঠানো একটি আউটবাউন্ড বিকন, এবং গ্রাহকের ডেটার পরিবর্তে ডেভেলপারদের ক্রেডেনশিয়ালের প্রতি তার বিশেষ আগ্রহ।

প্রজন্ম ৩: হাইপারভাইজর এবং কার্নেল এস্কেপ প্রোব

প্রচারণার মাঝামাঝি একটি সংস্করণ ব্যাপকভাবে অবকাঠামোগত আক্রমণের দিকে ঝুঁকে পড়ে। কনফিগারেশন চুরি করার পরিবর্তে, এটি একটি রিকন হারনেস চালিয়ে তথ্য অনুসন্ধান করত। AF_VSOCK সকেট, ভার্চুও এমএমআইও অঞ্চল, / দেব / মেমিএবং কার্নেল হার্ডেনিং ফ্ল্যাগ, এমনকি sysrq-এর মাধ্যমে কার্নেল ক্র্যাশ ঘটানোর প্রচেষ্টাও — এই আচরণগুলো একটি ভার্চুয়াল মেশিন বা কন্টেইনার থেকে বেরিয়ে আসার চেষ্টার সাথে সম্পর্কিত। টেলিমেট্রি ট্যাগগুলো (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-কার্নেল-প্রোব) অভিপ্রায়টি সুস্পষ্টভাবে প্রকাশ করেছে। এই সংস্করণটির স্পষ্ট লক্ষ্য ছিল ক্লাউড-স্যান্ডবক্স এবং সার্ভারলেস-রানার পরিবেশ — এমন এক ধরনের ক্ষণস্থায়ী ভিএম যা অবিশ্বস্ত কোড তৈরি ও পরীক্ষা করে।

জেনারেশন ৩ (SC3): ক্রস-রেপো রাইট ওয়ার্ম

ক্যাম্পেইনটির কেন্দ্রবিন্দু একটি স্ব-প্রজননশীল রিপো চোরে পরিণত হয়েছিল। ইনস্টল করার সময়, পেলোডটি একটি পাঁচ-পর্যায়ের সময়-নিয়ন্ত্রিত অনুক্রম চালায়:

  • পর্যায় 0 (~১০০ মিলিসেকেন্ড): হোস্টের ফিঙ্গারপ্রিন্ট তৈরি করা — হোস্টনেম, ব্যবহারকারীর তথ্য, গিট আইডেন্টিটি।
  • পর্যায় 1 (~৩ সেকেন্ড): পরিদর্শন করে ভুক্তভোগী কোন সংগঠনের সদস্য তা নির্ধারণ করুন। গিট রিমোট -ভিতারপর একটি হার্ডকোডেড সন্ধান করুন ORG_CONFIG টেবিল এবং টেস্ট রিপো অ্যাক্সেস সহ গিট এলএস-রিমোট — আক্রমণকারী-নিয়ন্ত্রিত SSRF প্রক্সির মাধ্যমে পরিচালিত http://git@192.168.0.1:8080.
  • পর্যায় 2 (~১০ সেকেন্ড): git ক্লোন টার্গেট লিস্টে থাকা প্রতিটি অ্যাক্সেসযোগ্য রিপোজিটরি থেকে ট্রি-টিকে টারবল ও জিজিপ করুন, সেটিকে বেস৬৪-এনকোড করুন এবং চাঙ্ক-এক্সফিলট্রেট করুন।
  • পর্যায় 3 (~৪৫ সেকেন্ড): “অ্যাক্সেসের প্রমাণ” — একটি রাইটেবল রিপো ক্লোন করুন, SECURITY-POC.md নামের একটি ফাইল ড্রপ করুন, এবং commit এর লেখক হিসেবে google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> সেট করা হয়েছে এবং বার্তাটি হলো: chore: update dependency cache, then push to the victim's mainline branch.

হার্ডকোড করা টার্গেট তালিকাটি জেনেরিক নয়। এটি ত্রিশটিরও বেশি তালিকাভুক্ত করে। বিষয়শ্রেণী নাম অনুসারে সংগ্রহস্থল — Shopify/shopify, শপিফাই/পরিচয়, শপিফাই/বিলিং, শপিফাই/ভল্ট, শপিফাই/গোপন তথ্য, শপিফাই/অবকাঠামো, Shopify/.githubএবং আরও অনেকে — একটি পরীক্ষা সংস্থার পাশাপাশি, অ্যারনস্ট্যাকবার্নসযেটিকে অপারেটর নিয়ন্ত্রণ করে বলে মনে হয় এবং লেখার লক্ষ্যবস্তু হিসেবে ব্যবহার করে।

চতুর্থ প্রজন্ম (SC4): এনক্রিপ্টেড এবং গেটেড

ডেভেলপারদের জন্য তৈরি সর্বশেষ সংস্করণটি SC3 ওয়ার্মের উপরে প্রতিরোধ ব্যবস্থার আরও দুটি স্তর যুক্ত করেছে।

প্রথমত, পেলোডটি আর প্লেইনটেক্সট হিসেবে পাঠানো হয় না। আসল লজিকটি একটি AES-256-CBC-এনক্রিপ্টেড ব্লবের মধ্যে থাকে। lib/.perf.dat, যার প্রথম ষোল বাইটে IV রয়েছে। লোডারটি index.js সংযুক্ত স্ট্রিং খণ্ডাংশ থেকে ডিক্রিপশন কী পুনর্গঠন করে, ব্লবটি ডিক্রিপ্ট করে এবং এটি দিয়ে চালায়। নতুন ফাংশন()এমনকি মডিউলের নামগুলোও স্ট্যাটিক স্ক্যানারকে ফাঁকি দেওয়ার জন্য বিভক্ত করা হয়। `'crypt' + 'o'` প্রয়োজন, 'f' + 's' প্রয়োজন.

দ্বিতীয়ত, এটি হোস্ট-গেটেড। এর একটি ভ্যারিয়েন্ট কেবল তখনই ডিক্রিপ্ট করে ও চলে যখন os.hostname() সমান ডেভবক্স or ubuntu-fc-uvm (ফায়ারক্র্যাকার মাইক্রোভিএম-এর ডিফল্ট) অথবা সাবস্ট্রিং ধারণ করে ডেভবক্সএকটির উপস্থিতির উপর আরেকটি ফটক। .জুলস/ কার্যকরী ডিরেক্টরি:

অন্য কথায়, SC4 পেলোডটি একজন সাধারণ ডেভেলপারের ল্যাপটপে নিষ্ক্রিয় থাকার জন্য এবং শুধুমাত্র স্বয়ংক্রিয় এআই-এজেন্টের ভিতরে সক্রিয় হওয়ার জন্য ডিজাইন করা হয়েছে। স্যান্ডবক্স পরিবেশ অপারেটর আসলে আপস করতে চায়।

ল্যাব চালু করা: বিশ্লেষণ-অবকাঠামো রূপ

প্রচারণার সবচেয়ে অভিনব প্যাকেজ, ts-enum-helperএটি ডেভেলপার বা শপিফাইকে মোটেও আক্রমণ করে না। পোস্টইনস্টল.sh এমন একটি গেট দিয়ে খোলে যা আসল রহস্য ফাঁস করে দেয়:

ম্যালওয়্যার-বিশ্লেষণ প্ল্যাটফর্মের জন্য নির্দিষ্ট কোনো এনভায়রনমেন্ট ভেরিয়েবল সেট করা না থাকলে স্ক্রিপ্টটি কিছুই করে না। যখন এটি সেট করা থাকে, তখন পেলোডটি বুঝতে পারে যে এটি এমন একটি স্যান্ডবক্সের ভেতরে চলছে যা ঠিক এই ধরনের প্যাকেজগুলোকে নিষ্ক্রিয় ও অধ্যয়ন করার জন্যই তৈরি — এবং এটি পাল্টা আক্রমণ করে।

এটি প্রথমে ইনস্ট্যান্স মেটাডেটা সার্ভার থেকে GCP সার্ভিস-অ্যাকাউন্ট OAuth টোকেনটি সংগ্রহ করে এবং তা পাচার করে। তারপর, সেই টোকেন ব্যবহার করে, এটি স্ক্যান করে। কুবারনেটিস নিয়ন্ত্রণ প্লেন এ পৌঁছানো যায় kubernetes.default.svc:

  • ClusterRoleBindings, ClusterRoles, এবং Nodes তালিকাভুক্ত করে;
  • পড, সিক্রেট এবং কনফিগম্যাপ জুড়ে অনুসন্ধান করে কিউব-সিস্টেম, ডিফল্ট, কিউব-পাবলিক, কিউব-নোড-লিজএবং বিশ্লেষণ নেমস্পেস;
  • চুরি করা পরিচয়টি ঠিক কী কী করতে পারবে, তা সুনির্দিষ্টভাবে চিহ্নিত করার জন্য SelfSubjectAccessReview কল জারি করে।

অবশেষে এটি একটি হার্ডকোডেড GCP প্রজেক্ট আইডি থেকে তৈরি Google Cloud Storage বাকেটের নামগুলো ব্রুট-ফোর্স পদ্ধতিতে যাচাই করে।বিরল-স্বাক্ষরকারী-৪৩৭৬০৩-পি৯) এবং প্রজেক্ট নম্বর, অনুমানমূলক সংমিশ্রণ যেমন *-নির্মাণ, *-শিল্পকর্ম, এবং বেশ কয়েকটি ম্যালিসিস- উপসর্গ (ম্যালিসিস-ফলাফল, ম্যালিসিস-প্যাকেজ, ম্যালিসিস-স্ক্যানপ্রতিটি প্রতিক্রিয়া কোড এবং বডি লগ করা হয় এবং একই ঠিকানায় POST করা হয়। জুলস-সংগ্রহ শেষপ্রান্ত.

এটি এমন একটি সাপ্লাই-চেইন পেলোডের বিরল ঘটনা, যা বিশেষভাবে রক্ষাকারীদের নিজস্ব পরিকাঠামো আক্রমণ করার জন্যই তৈরি করা হয়েছে। পুরো ক্যাম্পেইন জুড়ে ব্যবহৃত মূল গল্পটি একই আত্মপক্ষ সমর্থন, রানটাইম টার্গেট একটি শপিফাই মনোরেপো হোক বা অ্যানালাইসিস ক্লাস্টারের মেটাডেটা সার্ভার হোক। এই গল্পের কিছু অংশ পেলোডের ভেতরে কমেন্ট হিসেবে দেখা যায়, যেখানে এই আচরণকে “সিকিউরিটি রিসার্চ PoC … ওভারস্কোপড গিট প্রক্সি টোকেনের মাধ্যমে ক্রস-রেপো রাইট” হিসেবে বর্ণনা করা হয়েছে।

সময়রেখা এবং পরিধি স্থানান্তর

জুলসজ্যাকার কোনো এককালীন নির্মূল নয়। এটি একটি ধারাবাহিক কার্যক্রম যা শুধুমাত্র নাম পরিবর্তন করে রেজিস্ট্রি থেকে অপসারণের পরেও টিকে ছিল।

কখন ঘটনা
২০২৬ সালের এপ্রিলের মাঝামাঝি প্রথম প্যাকেজগুলো মূল প্রকাশকের আওতায় আবির্ভূত হয়: TS-utility façade, environment এবং git-config exfiltration।
২০২৫ সালের মে মাসের প্রথম দিকে হাইপারভাইজর এবং কার্নেল-এস্কেপ রিকনেসান্স ভ্যারিয়েন্ট প্রকাশিত হয়েছে।
২০২৬ সালের মে মাসের মাঝামাঝি থেকে শেষের দিকে SC3 ক্রস-রেপো রাইট ওয়ার্মটি Shopify-কে লক্ষ্য করে তৈরি পেলোডগুলোর পাশাপাশি আবির্ভূত হয় এবং google-labs-jules[bot] ছদ্মবেশ ধারণ। SC4 AES-এনক্রিপ্টেড এবং হোস্ট-গেটেড লোডার চালু করেছে।
২০২৫ সালের মে মাসের শেষের দিকে npm মূল পাবলিশার স্কোপটি সরিয়ে দেয়; প্যাকেজের নামগুলো খালি নিরাপত্তা-ধারণকারী প্লেসহোল্ডারে পরিণত হয়।
একই সপ্তাহে অপারেটরটি প্রায় অভিন্ন দেখতে একটি স্কোপে স্থানান্তরিত হয় এবং বিশ্লেষণ-অবকাঠামো ভ্যারিয়েন্টটি সহ ওয়ার্মটি পুনরায় প্রকাশ করে।

স্থানান্তর প্রক্রিয়াটিই ডিফেন্ডারদের ভেবে দেখা উচিত। প্রথম স্কোপটি বন্ধ করে দেওয়ায় ক্যাম্পেইনটি শেষ হয়ে যায়নি, এমনকি এর গতিও কমেনি। অপারেটরটি ইতিমধ্যেই একটি সমান্তরাল স্কোপ তৈরি করে ফেলেছিল, যার নাম মূলটির থেকে মাত্র একটি অক্ষরে আলাদা, এবং একই সপ্তাহের মধ্যে সেটি প্রকাশ করা চালিয়ে গিয়েছিল। এই লেখা পর্যন্ত, নতুন স্কোপটির... ts-form-utils (সংস্করণ ১.০.০ থেকে ১.১.০ পর্যন্ত), এর ts-project-lint (1.0.0 এবং 1.1.0), এবং স্বতন্ত্র ts-enum-helper (1.0.0) ইনস্টলযোগ্য থাকবে।

সমঝোতার সূচক

নিচের সমস্ত সূচক প্যাকেজ উৎসের সাথে মিলিয়ে নিশ্চিত করা হয়েছে।

আদর্শ ইনডিকেটর নোট
নেটওয়ার্ক (C2) aaronstack[.]com/jules-collect প্রতিটি প্রজন্মের জন্য একটিমাত্র সংগ্রহ বিন্দু; এটি JSON টেলিমেট্রি এবং base64-gzip রিপোজিটরি টারবল চাঙ্ক গ্রহণ করে।
নেটওয়ার্ক (এসএসআরএফ প্রক্সি) http://git@192.168.0.1:8080 টার্গেট অর্গানাইজেশন রিপোজিটরিগুলোতে পৌঁছানোর জন্য ব্যবহৃত একটি ওভারস্কোপড গিট প্রক্সি টোকেনের ফ্রন্ট।
নেটওয়ার্ক (ক্লাউড) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
টোকেন চুরি এবং কুবারনেটিস কন্ট্রোল-প্লেন রিকনেসান্সের জন্য শুধুমাত্র অ্যানালাইসিস-ইনফ্রাস্ট্রাকচার ভ্যারিয়েন্ট দ্বারা ব্যবহৃত হয়।
পরিচয় google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
নকল commit লেখকের পরিচয় ভুক্তভোগীর মূল শাখাগুলোতে ঠেলে দেওয়া হয়েছে।
ফাইল lib/.perf.dat AES-256-CBC এনক্রিপ্টেড পেলোড ব্লব; IV প্রথম ১৬ বাইটে সংরক্ষিত থাকে এবং কী গতিশীলভাবে পুনর্গঠিত হয় index.js.
ফাইল SECURITY-POC.md ফেলে দেওয়া এবং commitবার্তাটি সহ ভুক্তভোগী ভান্ডারগুলিতে ফেরত পাঠানো হয়েছে chore: update dependency cache.
ফাইল scripts/postinstall.sh গেটেড অন $MALYSIS_ANALYSIS_IDবিশ্লেষণ-অবকাঠামো-লক্ষ্যকারী ভ্যারিয়েন্টটি শনাক্ত করে।
ব্যবহারিক os.hostname() চেকের জন্য devbox / ubuntu-fc-uvm পেলোড ডিক্রিপশন এবং এক্সিকিউশনের পূর্বে স্যান্ডবক্স এবং এআই-এজেন্ট এনভায়রনমেন্ট গেটিং।
ব্যবহারিক .jules/ এবং /app/.jules ডিরেক্টরি পড়া এআই-এজেন্টের কর্মক্ষেত্রগুলোকে সুস্পষ্টভাবে লক্ষ্যবস্তু করা।
ব্যবহারিক sc1-, sc3-, sc4-, s0-vmm-recon অপারেটর-নির্ধারিত টেলিমেট্রি স্টেজ লেবেল যা সনাক্তকরণ এবং অনুসন্ধানের জন্য উপযোগী।
ক্লাউড টার্গেট rare-signer-437603-p9
malysis-* বালতি অনুমান
বিশ্লেষণ-অবকাঠামো ভ্যারিয়েন্টটিতে হার্ডকোডেড GCP প্রজেক্ট আইডেন্টিফায়ার এবং স্টোরেজ-বাকেট এনুমারেশন প্যাটার্ন এমবেড করা আছে।
প্যাকেজের আকৃতি রিপোজিটরি ফিল্ড ছাড়া TS-ইউটিলিটি প্যাকেজের বাহ্যিক রূপ সুসংগত প্রচারণার টেমপ্লেট: ক্ষতিকারক পেলোড এমবেড করা নকল টাইপস্ক্রিপ্ট ইউটিলিটি প্যাকেজ postinstall hooks অথবা সংযুক্ত index.js.
sca-tools-software-composition-analysis-tools
আপনার সফটওয়্যারের ঝুঁকিগুলোকে অগ্রাধিকার দিন, প্রতিকার করুন এবং সুরক্ষিত করুন।
আপনার বিনামূল্যে অ্যাকাউন্টটি নিন।
কোন ক্রেডিট কার্ড প্রয়োজন নেই

আপনার সফটওয়্যার উন্নয়ন ও বিতরণ সুরক্ষিত করুন

Xygeni প্রোডাক্ট স্যুটের সাথে