# एक Dependabot बम्पले एक वर्म प्रकाशित गर्यो। २२ प्याकेजहरू।

Published: 2026-09-17

एक बोटले पुल रिक्वेस्ट खोल्छ। एक मानवले २४ मिनेट पछि यसलाई मर्ज गर्छ। त्यसको ९५ मिनेट पछि, एक वर्मले उसको CI मा फेला पारेको टोकनको साथ, उसको नाममा, उसको २२ npm प्याकेजहरूको ११० दुर्भावनापूर्ण संस्करणहरू प्रकाशित गर्यो।

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

## यो भिडियोले के समेट्छ

- एक बोट, एक मानव, एक वर्म
- यो कसरी भयो, npm ले किन अनुमति दियो, कसले दोष पाउँछ
- टाइमलाइन: विषालु क्यास
- २१:४८ — Dependabot बम्प
- यो किन काम गर्छ

## अध्यायहरू

- 0:00 एक बोट, एक मानव, एक वर्म
- 0:20 यो कसरी भयो, npm ले किन अनुमति दियो, कसले दोष पाउँछ
- 0:30 टाइमलाइन: विषालु क्यास
- 1:15 २१:४८ — Dependabot बम्प
- 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 हो, पोस्टमार्टम। मे ११, बिहान। एक पुन: नामांकित फोर्कले TanStack Router विरुद्ध पुल रिक्वेस्ट खोल्छ। यो एक घण्टा भित्र बन्द हुन्छ, तर एक बेन्चमार्क कार्यप्रवाहले यसको कोड पहिले नै चलाइसकेको छ र

### टाइमलाइन: विषालु क्यास

0:33 रिलिज कार्यप्रवाहले प्रयोग गर्ने कुञ्जी अन्तर्गत एक विषालु क्यास बचत गर्यो। १९:२०। एक वैध मर्जले रिलिज चलाउँछ। क्यास फिर्ता आउँछ, एक बाइनरीले रनरको मेमोरी पढ्छ, प्रकाशन टोकन लिन्छ, र वैध प्रोभेनान्सको साथ, ४२ प्याकेजहरूमा ८४ संस्करणहरू SHIP IT गर्छ। प्याकेजहरू, वैध प्रोभेनान्सको साथ। परीक्षणहरू असफल हुन्छन्। यसले जे भए पनि प्रकाशित गर्छ। १९:४६, एक StepSecurity अनुसन्धानकर्ताले समस्या फाइल गर्छ; बिहान ९ UTC सम्म सबै कुरा अप्रचलित हुन्छ र सल्लाह बाहिर आउँछ।

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

### २१:४८ — Dependabot बम्प

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 मा। र आजको लागि यही DIFF हो।

### निर्णय

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
