# একটি ডিপেন্ডাবট বাম্প একটি কৃমি প্রকাশ করেছে। ২২টি প্যাকেজ।

Published: 2026-09-17

একটি বট একটি পুল রিকোয়েস্ট খোলে। একজন মানুষ এটি ২৪ মিনিট পরে মার্জ করে। তার ৯৫ মিনিট পরে, একটি কৃমি তার CI-তে পাওয়া একটি টোকেন ব্যবহার করে তার ২২টি npm প্যাকেজের ১১০টি দূষিত সংস্করণ তার নামে প্রকাশ করেছে।

Canonical: https://thedailydiff.dev/bn/video/2026-09-17-dependabot-tanstack/

## এই ভিডিওতে যা আছে

- একটি বট, একজন মানুষ, একটি কৃমি
- কীভাবে এটি ঘটলো, কেন npm এটি অনুমতি দিল, কে দায়ী
- সময়রেখা: বিষাক্ত ক্যাশে
- ২১:৪৮ — ডিপেন্ডাবট বাম্প
- কেন এটি কাজ করে

## অধ্যায়

- 0:00 একটি বট, একজন মানুষ, একটি কৃমি
- 0:20 কীভাবে এটি ঘটলো, কেন npm এটি অনুমতি দিল, কে দায়ী
- 0:30 সময়রেখা: বিষাক্ত ক্যাশে
- 1:15 ২১:৪৮ — ডিপেন্ডাবট বাম্প
- 1:50 কেন এটি কাজ করে
- 2:20 git blame
- 2:45 বিস্ফোরণ ব্যাসার্ধ
- 3:00 রায়

## অনুবাদিত প্রতিলিপি

মূল ইংরেজি বর্ণনা থেকে অনূদিত। উপলব্ধ অডিও এবং ক্যাপশন YouTube দ্বারা নিয়ন্ত্রিত।

### একটি বট, একজন মানুষ, একটি কৃমি

0:00 একটি বট একটি পুল রিকোয়েস্ট খোলে; একজন মানুষ চব্বিশ মিনিট পরে এটি মার্জ করে। পঁচানব্বই মিনিট পর, একটি কৃমি প্রকাশ করেছে তার একশ দশটি সংস্করণ প্যাকেজ, তার নিজের নামে। TanStack-এর পোস্টমর্টেমে আপস্ট্রিম টাইমস্ট্যাম্প আছে, ডাউনস্ট্রিম রক্ষণাবেক্ষণকারীর বাকিটা আছে, এবং হ্যাকার নিউজ এটিকে এগারোশ পয়েন্ট এবং একটি নাম দিয়েছে: Mini Shai-Hulud। কীভাবে এটি ঘটে, কেন npm এটি অনুমতি দেয়, কে দায়ী।

### কীভাবে এটি ঘটলো, কেন npm এটি অনুমতি দিল, কে দায়ী

0:21 এটি The Daily Diff, পোস্টমর্টেম। ১১ই মে, সকাল। একটি পুনঃনামকৃত ফর্ক TanStack Router-এর বিরুদ্ধে একটি পুল রিকোয়েস্ট খোলে। এটি এক ঘন্টার মধ্যে বন্ধ হয়ে যায়, কিন্তু একটি বেঞ্চমার্ক ওয়ার্কফ্লো ইতিমধ্যে তার কোড চালিয়েছে এবং

### সময়রেখা: বিষাক্ত ক্যাশে

0:33 একটি বিষাক্ত ক্যাশে সংরক্ষণ করেছে সেই কী-এর অধীনে যা রিলিজ ওয়ার্কফ্লো ব্যবহার করবে। উনিশ-কুড়ি। একটি বৈধ মার্জ রিলিজ চালায়। ক্যাশে ফিরে আসে, একটি বাইনারি রানারের মেমরি পড়ে, পাবলিশ টোকেন তুলে নেয়, এবং বিয়াল্লিশটি প্যাকেজের আশি-চারটি সংস্করণ প্রকাশ করে, বৈধ প্রমাণপত্র সহ। পরীক্ষা ব্যর্থ হয়। এটি তবুও প্রকাশিত হয়। উনিশ ছেচল্লিশ, একজন StepSecurity গবেষক ইস্যুটি ফাইল করেন; নয়টা UTC-এর মধ্যে সবকিছু অপ্রচলিত হয়ে যায় এবং পরামর্শ প্রকাশিত হয়।

0:55 অপ্রচলিত মানে চলে যাওয়া নয়: npm নির্ভরশীল কিছু অপ্রকাশিত করতে অস্বীকার করে, তাই এটি কয়েক ঘন্টা ইনস্টলযোগ্য থাকে। একুশ আটচল্লিশ। একটি নয়-স্টার এভিয়েশন-ডেটা প্রকল্পে, Dependabot তার রুটিন পুল রিকোয়েস্ট খোলে: dev-dependencies গ্রুপ আপডেট করা, তেরোটি আপডেট। দুটি বিষাক্ত TanStack সংস্করণ। বাইশ-বারো: মার্জ করা হয়েছে। পাবলিশ ওয়ার্কফ্লো স্কোপে থাকা টোকেন দিয়ে npm C-I চালায়;

### ২১:৪৮ — ডিপেন্ডাবট বাম্প

1:15 একটি প্রিপেয়ার স্ক্রিপ্ট এটি পড়ে, এবং বাইশ-সতেরোতে কৃমি প্রকাশ করে তার নামে। টোকেনটি যে প্রতিটি প্যাকেজে পৌঁছায় তার পাঁচটি সংস্করণ, এমনকি একটি পুরানো সাইড প্রজেক্টও: সবকিছুর জন্য একটি ক্লাসিক টোকেন। পঁচানব্বই মিনিটে একশ দশটি সংস্করণ। মধ্যরাতের পর সে ইমেল মারফত জানতে পারে। কেন এটি কাজ করে। এক: npm install ডিফল্টরূপে অপরিচিতদের লাইফসাইকেল স্ক্রিপ্ট চালায়, এবং একটি git নির্ভরতার প্রিপেয়ার স্ক্রিপ্ট গণনা করা হয়।

1:39 দুই: কৃমি একটি জিনিস চায়: একটি টোকেন যা দ্বিতীয় ফ্যাক্টর ছাড়াই প্রকাশ করে। তারপর এটি রেজিস্ট্রিকে জিজ্ঞাসা করে সেই রক্ষণাবেক্ষণকারী আর কীসের মালিক, এবং তার নিজের ভিতরে থাকা সব কিছু পুনরায় প্রকাশ করে। তিন: চেইনে কিছুই ব্যক্তি নয়।

### কেন এটি কাজ করে

1:51 একটি বট প্রস্তাব করে, একটি পাইপলাইন ইনস্টল করে, এবং কৃমি সেই উপকারের প্রতিদান দেয়: তার ডেড-ড্রপ শাখাগুলির নাম dependabot slash github-actions slash fremen। git blame। npm-এর ইনস্টল মডেল, পঁয়তাল্লিশ শতাংশ: ইনস্টল করার সময় স্ক্রিপ্ট চলে, অপ্রচলিত ইনস্টলযোগ্য থাকে, দুই-ফ্যাক্টর-বাইপাস টোকেন বিদ্যমান। TanStack-এর CI, পঁচিশ: একটি অ-নিরীক্ষিত পুল রিকোয়েস্ট টার্গেট ওয়ার্কফ্লো যা ক্যাশে লেখার অনুমতি সহ ফর্ক কোড চালায়। বাম্প অভ্যাস, পনেরো: তেরোটি আপডেট চব্বিশ মিনিটে মার্জ করা হয়েছে, রুমে টোকেন।

2:17 Dependabot, পাঁচ: এতটাই বিশ্বাস করা হয়েছিল যে কৃমি তার ইউনিফর্ম পরেছিল।

### git blame

2:20 বিস্ফোরণ ব্যাসার্ধ: বিয়াল্লিশটি TanStack প্যাকেজ। ডাউনস্ট্রিমে বাইশটি, নয়টি স্টার সহ একটি প্রকল্প থেকে। কৃমি একবার Mistral-এ পৌঁছালে ইকোসিস্টেম জুড়ে একশ ষাটটিরও বেশি। প্রতিটি আপস্ট্রিম সংস্করণে একটি বৈধ স্বাক্ষর ছিল: অফিসিয়াল দ্বারা নির্মিত পাইপলাইন। সত্য। রায়, পোস্টমর্টেম: SHIP IT। উভয় রক্ষণাবেক্ষণকারী এক দিনের মধ্যে টাইমস্ট্যাম্প সহ পোস্টমর্টেম পোস্ট করেন; তিন দিনের মধ্যে, ডাউনস্ট্রিম পাইপলাইন ignore-scripts সহ ইনস্টল করে, বিল্ড থেকে পাবলিশ আলাদা করে, এবং দীর্ঘস্থায়ী টোকেন বাদ দেয়।

### বিস্ফোরণ ব্যাসার্ধ

2:47 npm-এর ডিফল্টগুলি স্থানান্তরিত হয়নি। সোমবার: ইনস্টল করার সময় ignore-scripts, এবং সেই জব থেকে পাবলিশ টোকেন বাদ দেওয়া যা এটি চালায়। আপনি যে ঘটনাটি নিয়ে এখনও কথা বলতে পারছেন না, সেটি আমাকে পাঠান, মন্তব্যে, অথবা thedailydiff.dev-এ। এবং আজকের জন্য এটাই পার্থক্য।

### রায়

3:00 আমি Axrisi থেকে Niko। দায়িত্ব সহকারে মার্জ করুন।

## উৎস

- [TanStack postmortem (Tanner Linsley, May 11, refined May 15)](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem) — tanstack.com
- [TanStack "Hardening TanStack After the npm Compromise" (May 12)](https://tanstack.com/blog/incident-followup) — tanstack.com
- [TanStack/router#7383 — the StepSecurity detection issue](https://github.com/TanStack/router/issues/7383) — github.com
- [Downstream incident post, @squawk/\* (May 12)](https://github.com/neilcochran/squawk/discussions/251) — github.com
- [Downstream hardening post (May 14)](https://github.com/neilcochran/squawk/discussions/264) — github.com
- [The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)](https://github.com/neilcochran/squawk/pull/246) — github.com
- [@tan\_stack advisory post, 21:19 UTC](https://x.com/tan_stack/status/2053948103766716630) — x.com
- [StepSecurity — worm internals, bypass\_2fa search, Dependabot-style branch names](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem) — www.stepsecurity.io
- [Socket](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack) — socket.dev
- [Aikido — "over 160 packages, including Mistral"](https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised) — www.aikido.dev
- [Hacker News (1,097 points)](https://news.ycombinator.com/item?id=48100706) — news.ycombinator.com
