# ഒരു ഡിപെൻഡബോട്ട് ബമ്പ് ഒരു വേമിനെ പ്രസിദ്ധീകരിച്ചു. 22 പാക്കേജുകൾ.

Published: 2026-09-17

ഒരു ബോട്ട് ഒരു പുൾ അഭ്യർത്ഥന തുറക്കുന്നു. 24 മിനിറ്റിനുശേഷം ഒരു മനുഷ്യൻ അത് ലയിപ്പിക്കുന്നു. അതിനു 95 മിനിറ്റിനുശേഷം, ഒരു വേം അദ്ദേഹത്തിന്റെ CI-യിൽ കണ്ടെത്തിയ ടോക്കൺ ഉപയോഗിച്ച്, അദ്ദേഹത്തിന്റെ പേരിൽ, 22 npm പാക്കേജുകളുടെ 110 ക്ഷുദ്രകരമായ പതിപ്പുകൾ പ്രസിദ്ധീകരിച്ചു.

Canonical: https://thedailydiff.dev/ml/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 ഒരു ബോട്ട് ഒരു പുൾ അഭ്യർത്ഥന തുറക്കുന്നു; ഇരുപത്തിനാല് മിനിറ്റിനുശേഷം ഒരു മനുഷ്യൻ അത് ലയിപ്പിക്കുന്നു. തൊണ്ണൂറ്റിയഞ്ച് മിനിറ്റിനുശേഷം, ഒരു വേം പ്രസിദ്ധീകരിച്ചു അദ്ദേഹത്തിന്റെ പാക്കേജുകളുടെ നൂറ്റിപ്പത്ത് പതിപ്പുകൾ അദ്ദേഹത്തിന്റെ പേരിൽ. ടാൻസ്റ്റാക്കിന്റെ പോസ്റ്റ്‌മോർട്ടത്തിൽ അപ്‌സ്ട്രീം ടൈംസ്റ്റാമ്പുകൾ ഉണ്ട്, ഡൗൺസ്ട്രീം മെയിന്റനറുടേതിൽ ബാക്കിയുള്ളവയുണ്ട്, ഹാക്കർ ന്യൂസ് അതിന് ആയിരത്തി ഒരുനൂറ് പോയിന്റും ഒരു പേരും നൽകുന്നു: മിനി ഷായ്-ഹലൂഡ്. ഇത് എങ്ങനെ സംഭവിക്കുന്നു, npm എന്തിനത് അനുവദിക്കുന്നു, ആർക്കാണ് കുറ്റം.

### അതെങ്ങനെ സംഭവിച്ചു, npm എന്തിനത് അനുവദിച്ചു, ആർക്കാണ് കുറ്റം

0:21 ഇത് The Daily Diff, പോസ്റ്റ്‌മോർട്ടം. മെയ് 11, രാവിലെ. ഒരു പേരുമാറ്റിയ ഫോർക്ക് ടാൻസ്റ്റാക്ക് റൂട്ടറിനെതിരെ ഒരു പുൾ അഭ്യർത്ഥന തുറക്കുന്നു. അത് ഒരു മണിക്കൂറിനുള്ളിൽ അടയ്ക്കുന്നു, പക്ഷേ ഒരു ബെഞ്ച്മാർക്ക് വർക്ക്ഫ്ലോ അതിന്റെ കോഡ് ഇതിനകം പ്രവർത്തിപ്പിച്ച്

### സമയരേഖ: വിഷലിപ്തമായ കാഷെ

0:33 റിലീസ് വർക്ക്ഫ്ലോ ഉപയോഗിക്കുന്ന കീയിൽ ഒരു വിഷലിപ്തമായ കാഷെ സംരക്ഷിച്ചു. പത്തൊൻപത് ഇരുപത്. ഒരു നിയമാനുസൃത ലയനം റിലീസ് പ്രവർത്തിപ്പിക്കുന്നു. കാഷെ തിരിച്ചെത്തുന്നു, ഒരു ബൈനറി റണ്ണറുടെ മെമ്മറി വായിക്കുന്നു, പബ്ലിഷ് ടോക്കൺ എടുക്കുന്നു, നാൽപ്പത്തിരണ്ട് പാക്കേജുകളിലായി എൺപത്തിനാല് പതിപ്പുകൾ അയയ്ക്കുന്നു, സാധുവായ പ്രോവനൻസ് സഹിതം. ടെസ്റ്റുകൾ പരാജയപ്പെടുന്നു. എന്നിട്ടും അത് പ്രസിദ്ധീകരിക്കുന്നു. പത്തൊൻപത് നാൽപ്പത്തിയാറ്, ഒരു സ്റ്റെപ്സെക്യൂരിറ്റി ഗവേഷകൻ പ്രശ്നം ഫയൽ ചെയ്യുന്നു; ഒൻപത് UTC ആകുമ്പോഴേക്കും എല്ലാം അസാധുവാക്കപ്പെട്ടു, മുന്നറിയിപ്പ് പുറത്തിറങ്ങി.

0:55 അസാധുവാക്കിയത് പോയിട്ടില്ല: ഡിപെൻഡന്റുകളുള്ള ഒന്നും അൺപബ്ലിഷ് ചെയ്യാൻ npm വിസമ്മതിക്കുന്നു, അതുകൊണ്ട് അത് മണിക്കൂറുകളോളം ഇൻസ്റ്റാൾ ചെയ്യാൻ സാധിക്കും. ഇരുപത്തിയൊന്ന് നാൽപ്പത്തെട്ട്. ഒൻപത്-നക്ഷത്ര വ്യോമയാന-ഡാറ്റാ പ്രോജക്റ്റിൽ, ഡിപെൻഡബോട്ട് അതിന്റെ പതിവ് പുൾ അഭ്യർത്ഥന തുറക്കുന്നു: dev-dependencies ഗ്രൂപ്പ് ബമ്പ് ചെയ്യുക, പതിമൂന്ന് അപ്ഡേറ്റുകൾ. രണ്ടെണ്ണം വിഷലിപ്തമായ ടാൻസ്റ്റാക്ക് പതിപ്പുകളാണ്. ഇരുപത്തിരണ്ട് പന്ത്രണ്ട്: ലയിപ്പിച്ചു. പബ്ലിഷ് വർക്ക്ഫ്ലോ സ്കോപ്പിലെ ടോക്കൺ ഉപയോഗിച്ച് npm C-I പ്രവർത്തിപ്പിക്കുന്നു;

### 21:48 — ഡിപെൻഡബോട്ട് ബമ്പ്

1:15 ഒരു പ്രിപ്പയർ സ്ക്രിപ്റ്റ് അത് വായിക്കുന്നു, ഇരുപത്തിരണ്ട് പതിനേഴിന് വേം പ്രസിദ്ധീകരിക്കുന്നു അദ്ദേഹത്തിന്റെ പേരിൽ. ടോക്കൺ എത്താൻ കഴിയുന്ന ഓരോ പാക്കേജിന്റെയും അഞ്ച് പതിപ്പുകൾ, പഴയ ഒരു സൈഡ് പ്രോജക്റ്റ് പോലും: എല്ലാത്തിനും ഒരു ക്ലാസിക് ടോക്കൺ. തൊണ്ണൂറ്റിയഞ്ച് മിനിറ്റിനുള്ളിൽ നൂറ്റിപ്പത്ത് പതിപ്പുകൾ. അർദ്ധരാത്രിക്ക് ശേഷം, ഇമെയിൽ വഴിയാണ് അദ്ദേഹം ഇത് അറിയുന്നത്. എന്തുകൊണ്ടാണ് ഇത് പ്രവർത്തിക്കുന്നത്. ഒന്ന്: npm install ഡിഫോൾട്ടായി അപരിചിതരുടെ ലൈഫ് സൈക്കിൾ സ്ക്രിപ്റ്റുകൾ പ്രവർത്തിപ്പിക്കുന്നു, ഒരു git ഡിപെൻഡൻസിയുടെ പ്രിപ്പയർ സ്ക്രിപ്റ്റും ഇതിൽപ്പെടും.

1:39 രണ്ട്: വേമിന് ഒരു കാര്യമാണ് വേണ്ടത്: രണ്ടാം ഘടകം ഇല്ലാതെ പ്രസിദ്ധീകരിക്കുന്ന ഒരു ടോക്കൺ. എന്നിട്ട് അത് രജിസ്ട്രിയിൽ നിന്ന് ആ മെയിന്റനർക്ക് മറ്റെന്തൊക്കെ സ്വന്തമായിട്ടുണ്ടെന്ന് ചോദിക്കുന്നു, എന്നിട്ട് അതിനെയെല്ലാം അതിനുള്ളിൽ ഉൾപ്പെടുത്തിക്കൊണ്ട് പുനഃപ്രസിദ്ധീകരിക്കുന്നു. മൂന്ന്: ശൃംഖലയിൽ ഒന്നും ഒരു വ്യക്തിയല്ല.

### എന്തുകൊണ്ടാണ് ഇത് പ്രവർത്തിക്കുന്നത്

1:51 ഒരു ബോട്ട് നിർദ്ദേശിക്കുന്നു, ഒരു പൈപ്പ്ലൈൻ ഇൻസ്റ്റാൾ ചെയ്യുന്നു, വേം പ്രത്യുപകാരം ചെയ്യുന്നു: അതിന്റെ ഡെഡ്-ഡ്രോപ്പ് ശാഖകൾക്ക് dependabot slash github-actions slash fremen എന്ന് പേരിട്ടിരിക്കുന്നു. git blame. npm-ന്റെ ഇൻസ്റ്റാൾ മോഡൽ, അമ്പത്തിയഞ്ച് ശതമാനം: സ്ക്രിപ്റ്റുകൾ ഇൻസ്റ്റാളിൽ പ്രവർത്തിക്കുന്നു, അസാധുവാക്കിയത് ഇൻസ്റ്റാൾ ചെയ്യാൻ സാധിക്കുന്നതായി നിലനിൽക്കുന്നു, ദ്വി-ഘടക-ബൈപാസ് ടോക്കണുകൾ നിലവിലുണ്ട്. ടാൻസ്റ്റാക്കിന്റെ CI, ഇരുപത്തിയഞ്ച്: കാഷെയിലേക്ക് എഴുതാനുള്ള അനുമതിയോടെ ഫോർക്ക് കോഡ് പ്രവർത്തിപ്പിക്കുന്ന, ഓഡിറ്റ് ചെയ്യാത്ത ഒരു പുൾ അഭ്യർത്ഥന ടാർഗെറ്റ് വർക്ക്ഫ്ലോ. കാഷെയിലേക്ക് എഴുതാനുള്ള അനുമതിയോടെ ഫോർക്ക് കോഡ് പ്രവർത്തിപ്പിക്കുന്ന, ഓഡിറ്റ് ചെയ്യാത്ത ഒരു പുൾ അഭ്യർത്ഥന ടാർഗെറ്റ് വർക്ക്ഫ്ലോ. ബമ്പ് ശീലം, പതിനഞ്ച്: ഇരുപത്തിനാല് മിനിറ്റിനുള്ളിൽ ലയിപ്പിച്ച പതിമൂന്ന് അപ്ഡേറ്റുകൾ, മുറിയിൽ ടോക്കൺ.

2:17 ഡിപെൻഡബോട്ട്, അഞ്ച്: വേം അതിന്റെ യൂണിഫോം ധരിക്കാൻ മാത്രം വിശ്വസനീയമാണ്.

### git blame

2:20 സ്ഫോടന പരിധി: നാൽപ്പത്തിരണ്ട് ടാൻസ്റ്റാക്ക് പാക്കേജുകൾ. ഒൻപത് നക്ഷത്രങ്ങളുള്ള ഒരു പ്രോജക്റ്റിൽ നിന്ന് ഇരുപത്തിരണ്ട് ഡൗൺസ്ട്രീം. വേം മിസ്ട്രാളിൽ എത്തുമ്പോൾ ഇക്കോസിസ്റ്റം മുഴുവൻ നൂറ്റി അറുപതിലധികം. ഓരോ അപ്‌സ്ട്രീം പതിപ്പും ഒരു സാധുവായ ഒപ്പ് വഹിച്ചു: ഔദ്യോഗിക പൈപ്പ്ലൈൻ നിർമ്മിച്ചത്. ശരി. വിധി, പോസ്റ്റ്‌മോർട്ടം: SHIP IT. രണ്ട് മെയിന്റനർമാരും ഒരു ദിവസത്തിനുള്ളിൽ ടൈംസ്റ്റാമ്പ് ചെയ്ത പോസ്റ്റ്‌മോർട്ടങ്ങൾ പോസ്റ്റ് ചെയ്യുന്നു; മൂന്നെണ്ണത്തിനുള്ളിൽ, ഡൗൺസ്ട്രീം പൈപ്പ്ലൈൻ ignore-scripts ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യുന്നു, ബിൽഡ് പബ്ലിഷിൽ നിന്ന് വേർതിരിക്കുന്നു, ദീർഘകാല ടോക്കൺ ഉപേക്ഷിക്കുന്നു.

### സ്ഫോടന പരിധി

2:47 npm-ന്റെ ഡിഫോൾട്ടുകൾ മാറിയിട്ടില്ല. തിങ്കൾ: ഇൻസ്റ്റാളിൽ ignore-scripts, അത് പ്രവർത്തിപ്പിക്കുന്ന ജോലിയിൽ നിന്ന് പബ്ലിഷ് ടോക്കൺ പുറത്താക്കുക. നിങ്ങൾക്ക് ഇപ്പോഴും സംസാരിക്കാൻ അനുവാദമില്ലാത്ത സംഭവം എനിക്ക് അയയ്ക്കുക, കമന്റുകളിൽ, അല്ലെങ്കിൽ thedailydiff.dev-ൽ. ഇതാണ് ഇന്നത്തെ diff.

### വിധി

3:00 ഞാൻ Axrisi-യിൽ നിന്നുള്ള നിക്കോ. ഉത്തരവാദിത്തത്തോടെ ലയിപ്പിക്കുക.

## ഉറവിടങ്ങൾ

- [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
