# एक डिपेंडबोट बंप ने एक वर्म प्रकाशित किया। 22 पैकेज।

Published: 2026-09-17

एक बॉट एक पुल रिक्वेस्ट खोलता है। एक इंसान इसे 24 मिनट बाद मर्ज कर देता है। उसके 95 मिनट बाद, एक वर्म ने उसके 22 एनपीएम पैकेजों के 110 दुर्भावनापूर्ण संस्करण प्रकाशित किए हैं, उसके नाम से, एक टोकन के साथ जो उसे उसके CI में मिला था।

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

## इस वीडियो में क्या शामिल है

- एक बॉट, एक इंसान, एक वर्म
- यह कैसे हुआ, npm ने इसे क्यों अनुमति दी, किसे दोष दिया जाए
- समयरेखा: ज़हरीला कैश
- 21:48 — डिपेंडबोट बंप
- यह क्यों काम करता है

## अध्याय

- 0:00 एक बॉट, एक इंसान, एक वर्म
- 0:20 यह कैसे हुआ, npm ने इसे क्यों अनुमति दी, किसे दोष दिया जाए
- 0:30 समयरेखा: ज़हरीला कैश
- 1:15 21:48 — डिपेंडबोट बंप
- 1:50 यह क्यों काम करता है
- 2:20 git blame
- 2:45 विस्फोट का दायरा
- 3:00 निर्णय

## अनुवादित प्रतिलेख

मूल अंग्रेजी कथन से अनुवादित। उपलब्ध ऑडियो और कैप्शन YouTube द्वारा नियंत्रित होते हैं।

### एक बॉट, एक इंसान, एक वर्म

0:00 एक बॉट एक पुल रिक्वेस्ट खोलता है; एक इंसान इसे चौबीस मिनट बाद मर्ज कर देता है। पचानवे मिनट बाद, एक वर्म ने प्रकाशित किया है उसके एक सौ दस संस्करण पैकेजों को, उसके रूप में। TanStack के पोस्टमॉर्टम में अपस्ट्रीम टाइमस्टैंप हैं, डाउनस्ट्रीम मेंटेनर के पास बाकी है, और Hacker News इसे ग्यारह सौ अंक और एक नाम देता है: Mini Shai-Hulud। यह कैसे होता है, npm इसे क्यों अनुमति देता है, किसे दोष दिया जाए।

### यह कैसे हुआ, npm ने इसे क्यों अनुमति दी, किसे दोष दिया जाए

0:21 यह The Daily Diff, पोस्टमॉर्टम है। 11 मई, सुबह। एक नया नाम वाला फोर्क TanStack Router के खिलाफ एक पुल रिक्वेस्ट खोलता है। यह एक घंटे के भीतर बंद हो जाता है, लेकिन एक बेंचमार्क वर्कफ़्लो ने पहले ही अपना कोड चला दिया है और

### समयरेखा: ज़हरीला कैश

0:33 रिलीज़ वर्कफ़्लो द्वारा उपयोग की जाने वाली कुंजी के तहत एक ज़हरीला कैश सहेजा है। उन्नीस-बीस। एक वैध मर्ज रिलीज़ चलाता है। कैश वापस आता है, एक बाइनरी रनर की मेमोरी पढ़ता है, प्रकाशित करने वाला टोकन उठाता है, और बयालीस पैकेजों में चौरासी संस्करण भेजता है, वैध प्रोवेनेंस के साथ। टेस्ट फेल हो जाते हैं। यह फिर भी प्रकाशित होता है। उन्नीस छियालीस, एक StepSecurity शोधकर्ता समस्या दर्ज करता है; नौ UTC तक सब कुछ अप्रचलित हो जाता है और सलाह जारी हो जाती है।

0:55 अप्रचलित का मतलब गया नहीं है: npm निर्भरता वाले किसी भी चीज़ को अप्रकाशित करने से इनकार करता है, इसलिए यह घंटों तक इंस्टॉलेबल रहता है। इक्कीस अड़तालीस। नौ-स्टार एविएशन-डेटा प्रोजेक्ट में, Dependabot अपना नियमित पुल रिक्वेस्ट खोलता है: dev-dependencies समूह को बंप करें, तेरह अपडेट। दो ज़हरीले TanStack संस्करण हैं। बाईस-बारह: मर्ज किया गया। प्रकाशित वर्कफ़्लो दायरे में टोकन के साथ npm C-I चलाता है;

### 21:48 — डिपेंडबोट बंप

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 पैकेज। नौ स्टार वाले प्रोजेक्ट से बाईस डाउनस्ट्रीम। एक सौ साठ से अधिक पारिस्थितिकी तंत्र-व्यापी एक बार वर्म मिस्ट्रल तक पहुंच जाता है। हर अपस्ट्रीम संस्करण में एक वैध हस्ताक्षर था: आधिकारिक द्वारा निर्मित पाइपलाइन। सत्य। निर्णय, पोस्टमॉर्टम: 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
