- 2026-05-11 19:20~19:26 UTC पर हमलावर ने 42 @tanstack/ npm पैकेजों में कुल 84 malicious versions publish किए
- attack chain ने pull_request_target “Pwn Request”, GitHub Actions cache poisoning, और runner memory से OIDC token extraction को जोड़ा
- npm token और publish workflow चोरी या compromise नहीं हुए; malicious code ने OIDC trusted publisher अधिकार के साथ registry पर सीधे POST किया
- प्रभावित version install होने पर AWS, GCP, Kubernetes, Vault, GitHub, npm, SSH credentials उजागर हो सकते थे, इसलिए उन्हें बदलना ज़रूरी है
- सभी प्रभावित versions को deprecated कर दिया गया है, npm security के साथ tarball removal किया गया है, और tracking issue व GitHub Security Advisory प्रकाशित कर दिए गए हैं
घटना का सारांश
- 2026-05-11 19:20~19:26 UTC के बीच हमलावर ने 42
@tanstack/* npm पैकेजों में कुल 84 malicious versions publish किए
- attack chain ने
pull_request_target “Pwn Request” पैटर्न, fork↔base trust boundary को पार करने वाला GitHub Actions cache poisoning, और GitHub Actions runner process memory से OIDC token extraction को जोड़ा
- पुष्टि हुई कि npm tokens चोरी नहीं हुए थे, और npm publish workflow स्वयं भी compromise नहीं हुआ था
- malicious versions को बाहरी researcher
ashishkurmi ने stepsecurity में सार्वजनिक रूप से 20 मिनट के भीतर detect किया
- सभी प्रभावित versions को deprecated कर दिया गया, और npm security के साथ मिलकर registry से tarball removal किया गया
- जिन उपयोगकर्ताओं ने 2026-05-11 को प्रभावित versions install किए, उन्हें install host से सुलभ AWS, GCP, Kubernetes, Vault, GitHub, npm, SSH credentials बदलने चाहिए
- tracking issue TanStack/router#7383 है, और GitHub Security Advisory GHSA-g7cv-rxg3-hmpx है
प्रभाव का दायरा
-
प्रभावित पैकेज
- प्रभाव 42 पैकेजों और 84 versions तक सीमित है, और प्रति पैकेज 2 versions लगभग 6 मिनट के अंतराल पर publish किए गए
- पूरी सूची tracking issue में शामिल है
- पुष्टि किए गए अप्रभावित product families हैं
@tanstack/query*, @tanstack/table*, @tanstack/form*, @tanstack/virtual*, @tanstack/store, और @tanstack/start meta package
@tanstack/start-* पुष्टि किए गए अप्रभावित सूची में शामिल नहीं है
-
malicious code का व्यवहार
- यदि developer या CI environment प्रभावित version पर
npm install, pnpm install, yarn install चलाता है, तो npm malicious optionalDependencies entry को resolve करता है और fork network के orphan payload commit को fetch करता है
- इसके बाद
prepare lifecycle script चलती है, और प्रभावित tarball के भीतर छिपी लगभग 2.3MB obfuscated router_init.js execute होती है
- malicious script AWS IMDS/Secrets Manager, GCP metadata, Kubernetes service-account token, Vault token,
~/.npmrc, GitHub token, gh CLI, .git-credentials, SSH private key जैसी सामान्य locations से credentials इकट्ठा करती है
- चुराया गया data Session/Oxen messenger file-upload network के माध्यम से exfiltrate किया जाता है, और target हैं
filev2.getsession.org, seed{1,2,3}.getsession.org
- यह network end-to-end encrypted है और इसमें attacker-controlled C2 नहीं है, इसलिए network mitigation केवल IP/domain blocking तक सीमित है
- self-propagation logic
registry.npmjs.org/-/v1/search?text=maintainer:<user> से पीड़ित द्वारा maintain किए जाने वाले अन्य packages को enumerate करती है, फिर उसी injection method से दोबारा publish करती है
- क्योंकि payload npm install lifecycle के हिस्से के रूप में execute होती है, इसलिए जिन hosts ने 2026-05-11 को प्रभावित versions install किए, उन्हें संभावित रूप से compromised माना जाना चाहिए
टाइमलाइन
-
हमले से पहले: कैश पॉइज़निंग चरण
- 2026-05-10 17:16 UTC पर हमलावर ने TanStack/router का fork github.com/zblgg/configuration बनाया और fork सूची खोज से बचने के लिए उसका नाम बदल दिया
- 2026-05-10 23:29 UTC पर छेड़छाड़ की गई पहचान
claude <claude@users.noreply.github.com> के साथ दुर्भावनापूर्ण commit 65bf499d16a5e8d25ba95d69ec9790a6dd4a1f14 fork में बनाया गया
- उस commit ने लगभग 30,000 लाइनों वाला bundled JS payload
packages/history/vite_setup.mjs जोड़ा और push event की CI को दबाने के लिए commit message में [skip ci] लगाया
- 2026-05-11 लगभग 10:49 UTC पर
zblgg ने TanStack/router main के खिलाफ “WIP: simplify history build” शीर्षक वाला PR #7378 खोला
bundle-size.yml और labeler.yml दोनों PR के लिए pull_request_target पर अपने-आप चले, और pull_request_target पहले योगदानकर्ता approval gate को bypass करता है, इसलिए अलग approval की ज़रूरत नहीं थी
pull_request इस्तेमाल करने वाला pr.yml approval की प्रतीक्षा में blocked रहा और चला नहीं
- 2026-05-11 11:01~11:11 UTC के बीच
zblgg ने PR head पर कई बार force-push किया, जिससे अतिरिक्त pull_request_target runs ट्रिगर हुए
- 2026-05-11 11:11 UTC पर दुर्भावनापूर्ण commit
65bf499d PR head पर पहुंच गया, और bundle-size.yml के benchmark-pr job ने refs/pull/7378/merge checkout करने के बाद pnpm install और pnpm nx run @benchmarks/bundle-size:build चलाया, जिससे vite_setup.mjs सक्रिय हुआ
- 2026-05-11 11:29 UTC पर
Linux-pnpm-store-6f9233a50def742c09fde54f56553d6b449a535adf87d4083690539f49ae4da11 नाम का 1.1GB GitHub Actions cache TanStack/router में store किया गया
- यह cache
refs/heads/main scope में store किया गया था और इसे इस तरह configure किया गया था कि अगली main push पर release.yml जिस key को lookup करेगा, उससे यह match हो जाए
- 2026-05-11 11:31 UTC पर हमलावर ने PR को उस समय के
main HEAD b1c061af पर वापस कर दिया, जिससे visible PR 0-file no-op जैसा दिखने लगा, और उसी मिनट PR बंद कर branch हटा दी गई, लेकिन दूषित cache बना रहा
-
ट्रिगर: प्रकाशन चरण
- 2026-05-11 19:15 UTC पर Manuel ने PR #7369 merge किया, जिससे
main push हुआ, और release.yml workflow run 25613093674 19:15:44 पर शुरू होने के बाद fail हो गया
- 2026-05-11 19:20:39 UTC पर npm registry ने
@tanstack/history@1.161.9 और 41 sibling packages के publish प्राप्त किए
- कुल मिलाकर 42 packages में लगभग 84 versions publish किए गए, लेकिन इस सटीक क्षण पर इनमें से लगभग आधे ही दिखते हैं; बाकी दूसरे run में publish हुए
- publish authentication TanStack/router
release.yml@refs/heads/main के लिए OIDC trusted-publisher binding के जरिए हुई, लेकिन यह tests fail होने के कारण skipped workflow के Publish Packages step में नहीं हुआ
- वास्तविक publisher tests/cleanup चरण में चला malware था, जिसने
id-token: write permission के साथ OIDC token mint किया और फिर registry.npmjs.org पर सीधे POST किया
- 2026-05-11 19:20:47 UTC पर run
25613093674 failure status के साथ पूरा हुआ
- 2026-05-11 19:16 UTC पर Manuel ने PR #7382 merge किया, जिससे दूसरी
main push हुई, और 19:16:22 पर workflow run 25691781302 शुरू हुआ
- दूसरे run ने भी वही दूषित cache restore किया, और 2026-05-11 19:26:14 UTC पर
@tanstack/history@1.161.12 सहित हर package के लिए दूसरा version set उसी OIDC mechanism से publish किया गया
- 2026-05-11 19:26:20 UTC पर run
25691781302 भी failure status के साथ पूरा हुआ
-
पहचान और प्रतिक्रिया
- 2026-05-11 लगभग 19:50 UTC पर बाहरी researcher
carlini ने issue #7383 खोला, जिसमें दुर्भावनापूर्ण optionalDependencies fingerprint और package list शामिल थी
- शुरुआती सूची 42 में से 14 की थी, और researcher ने npm security को भी सीधे सूचित किया
- 2026-05-11 लगभग 20:00 UTC पर Manuel ने #7383 में incident की पुष्टि की और प्रतिक्रिया शुरू की
- 2026-05-11 लगभग 20:10 UTC पर Manuel ने user machines के compromise की संभावना को देखते हुए दूसरे team members की GitHub push permissions हटा दीं
- 2026-05-11 लगभग 20:30 UTC पर Tanner ने पूरी IOC list और registry-side tarball removal request security@npmjs.com पर भेजी, और npm के जरिए औपचारिक malware report जमा की
- 2026-05-11 लगभग 21:00 UTC पर 295
@tanstack/* packages की पूरी scan से scope की पुष्टि 42 packages और 84 versions के रूप में हुई
- Tanner ने सभी 84 प्रभावित packages के लिए npm deprecation शुरू किया, और
@tan_stack तथा maintainers ने Twitter/X, LinkedIn और Bluesky पर सार्वजनिक अलर्ट जारी किए
- 2026-05-11 21:30 UTC पर
bundle-size.yml के pull_request_target cache poisoning vector और zblgg/configuration fork की पहचान की गई
- सभी TanStack/* GitHub repositories की cache entries API के जरिए हटा दी गईं
- hardening PR merge किया गया,
bundle-size.yml को फिर से configure किया गया, repository_owner guard जोड़ा गया, और third-party action refs को SHA पर pin किया गया
- आधिकारिक GitHub Security Advisory publish की गई और CVE का अनुरोध किया गया
मूल कारण
-
तीन कमजोरियों का संयोजन
- हमले के लिए तीनों कमजोरियां जरूरी थीं, और इनमें से कोई एक अकेले पर्याप्त नहीं थी
- fork PR code का base repository cache तक पहुंचना, base repository cache का release workflow runtime तक पहुंचना, और release workflow runtime का npm registry write permission तक पहुंचना—इस तरह हर कमजोरी दूसरे की trust boundary को जोड़ती है
-
pull_request_target “Pwn Request” पैटर्न
bundle-size.yml fork PR के लिए pull_request_target पर चला, और उसी trigger context में fork के PR merge ref को checkout करने के बाद build चलाया गया
- मुख्य संरचना इस प्रकार है
on:
pull_request_target:
paths: ['packages/**', 'benchmarks/**']
jobs:
benchmark-pr:
steps:
- uses: actions/checkout@v6.0.2
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge # fork's merged code
- uses: TanStack/config/.github/setup@main # transitively calls actions/cache@v5
- run: pnpm nx run @benchmarks/bundle-size:build # executes fork-controlled code
- workflow लेखक ने
comment-pr job और benchmark-pr job को अलग करके trust boundary बांटने की कोशिश की थी, और YAML comment में benchmark-pr को “untrusted with read-only permissions” बनाए रखने का इरादा लिखा था
- लेकिन
actions/cache@v5 का post-job save, permissions: से नहीं रुकता, और cache write workflow GITHUB_TOKEN नहीं बल्कि runner के internal token का उपयोग करता है
- इसलिए
permissions: contents: read सेटिंग cache mutation को नहीं रोक सकी
- cache scope repository स्तर का है, और base repository cache scope का उपयोग करने वाला
pull_request_target run और main push इसे साझा करते हैं
- base repository cache scope में चलने वाला PR बाद में
main के production workflow द्वारा restore किए जाने वाले cache entry को दूषित कर सकता है
-
GitHub Actions cache poisoning
- malicious
vite_setup.mjs को इस तरह डिज़ाइन किया गया था कि वह उस pnpm-store key के अनुसार data लिखे जिसे सामान्य release.yml workflow calculate और lookup करेगा
- target key का फ़ॉर्मेट
Linux-pnpm-store-${hashFiles('**/pnpm-lock.yaml')} है
benchmark-pr job के अंत में actions/cache@v5 post-step दूषित pnpm store को ठीक उसी key के साथ save करता है
- बाद में
main push पर जब release.yml चला, तो Setup Tools step ने डिज़ाइन के मुताबिक उसी दूषित entry को restore किया
- इस तरह का हमला 2024 में Adnan Khan द्वारा दस्तावेजीकृत GitHub Actions cache poisoning परिवार का हिस्सा है, और यह केवल TanStack तक सीमित bug नहीं बल्कि GitHub Actions का एक design issue है जिसके लिए जानबूझकर mitigation की जरूरत है
-
runner memory से OIDC token निकालना
release.yml npm OIDC trusted publishing के लिए जरूरी होने के कारण वैध रूप से id-token: write घोषित करता है
- जब दूषित pnpm store runner पर restore होता है, तो attacker-controlled binary disk पर मौजूद होती है और build step के दौरान call की जाती है
- यह binary
/proc/*/cmdline के जरिए GitHub Actions Runner.Worker process को ढूंढती है, और /proc/<pid>/maps तथा /proc/<pid>/mem पढ़कर worker memory dump करती है
- इसके बाद runner द्वारा
id-token: write सेटिंग के तहत lazy mint किया गया OIDC token memory से निकाल लिया जाता है
- निकाले गए token से
registry.npmjs.org पर सीधे POST request authenticate की जाती है, जिससे workflow के Publish Packages step को पूरी तरह bypass कर दिया जाता है
- यह memory extraction तरीका मार्च 2025 के
tj-actions/changed-files compromise में इस्तेमाल किए गए तरीके जैसा ही है, और attribution comment सहित वही Python script इस्तेमाल की गई थी
- attacker ने कोई नई तकनीक ईजाद नहीं की, बल्कि सार्वजनिक research को फिर से संयोजित किया
-
क्यों हर तत्व अकेले पर्याप्त नहीं था
pull_request_target अपने-आप में label या comment जैसे trusted कामों के लिए इस्तेमाल किया जा सकता है
- पहले से compromised dependency के अंदर cache poisoning अकेले पर्याप्त नहीं है; इसके लिए अलग publish vehicle भी चाहिए
- केवल OIDC token extraction से काम नहीं चलता; runner पर पहले से code execution होना जरूरी है
detection और IOC
सबक
-
क्या अच्छा रहा
- बाहरी शोधकर्ताओं ने घटना के लगभग 20 मिनट के भीतर इसका पता लगाकर पूरी तकनीकी जानकारी के साथ रिपोर्ट किया
- maintainer team ने कई time zone में तुरंत समन्वय किया
- detection community ने कुछ घंटों के भीतर स्पष्ट सार्वजनिक IOC pattern तैयार कर लिए
-
किन बातों में सुधार की ज़रूरत थी
- कोई internal alerting नहीं था, और compromise की जानकारी तीसरे पक्ष से मिली
- अपने publish monitoring की ज़रूरत है, और ऐसे मुद्दों का तेज़ी से पता लगाने वाली ecosystem security research कंपनियों के साथ अधिक नज़दीकी से काम करके feedback loop को छोटा करने की योजना है
pull_request_target workflow लंबे समय से एक जोखिमपूर्ण pattern के रूप में जाना जाता था, लेकिन उसका audit नहीं किया गया था
- third-party action के floating ref
@v6.0.2, @main ने इस घटना से अलग भी स्थायी supply-chain risk पैदा किया
- npm की “dependent होने पर unpublish नहीं कर सकते” नीति के कारण लगभग सभी प्रभावित package के लिए unpublish संभव नहीं था
- registry-side tarball हटाने के लिए npm security पर निर्भर रहना पड़ा, जिससे malicious tarball कुछ अतिरिक्त घंटों तक install किए जा सकने की स्थिति में रहे
- npm scope में 7 maintainer की सूची का मतलब था कि एक ही blast radius के लिए credential theft के 7 अलग-अलग target मौजूद थे
- OIDC trusted-publisher binding में हर publish के लिए review नहीं होता, और एक बार सेट हो जाने पर workflow के भीतर कोई भी code path publish करने योग्य token mint कर सकता है
- ज़रूरी विकल्प है manual review वाले short-term classic token पर जाना, या provenance-source-verification जोड़ना जो workflow के किसी अप्रत्याशित step में publish का पता लगा सके
-
किस्मत साथ रही
- attacker ने ऐसा payload चुना जिसने test तोड़ दिए, इसलिए सामान्य publish step skip हो गया और अधिक साफ़ दिखने वाला tarball नहीं बना
- इसी वजह से हमला पर्याप्त शोर के साथ सामने आया और जल्दी पकड़ में आ गया
- अगर attacker अधिक सावधान होता और test नहीं तोड़ता, तो वह कई घंटों तक और चुपचाप publish कर सकता था
- attacker ने attribution comment वाला एक सार्वजनिक memory-dump script दोबारा इस्तेमाल किया, और नया code नहीं लिखा, जिससे IOC matching और तेज़ हो गई
बचे हुए सवाल
- यह पुष्टि करनी है कि क्या
bundle-size.yml के Setup Tools step ने वास्तव में actions/cache@v5 को call किया था
- PR #7378 के
pull_request_target run में से एक का post-job log पढ़कर सत्यापन करना है; उदाहरण run id 25666610798 है
- यह जाँचना है कि force-push से गायब होने से पहले शुरुआती PR head commit में क्या था; संभव है कि वह GitHub reflog में बचा हो
- यह सत्यापित करना है कि malicious commit fork के git object store में सीधे git push से गया था या GitHub web UI के ज़रिए बना था, जिससे audit-log entry रह जाती
voicproducoes वास्तविक account है या sock puppet, यह उसकी activity history से मिलान करके देखना है
- npm cache, जो 6 duplicate
linux-npm-store-* entry जैसा दिखता है, क्या वह भी contaminate हुआ था और क्या उसका वास्तव में उपयोग हुआ, यह देखना है
- यह पुष्टि करनी है कि क्या हमले के लिए Nx Cloud ज़रूरी था, या केवल GitHub Actions cache से भी यह काम कर सकता था
- यह देखना है कि क्या TanStack/router fork network के भीतर orphan payload commit वाले अन्य fork की पहचान की जा सकती है
- अगर कोई दूसरा fork उस commit को host कर रहा है, तो
github:tanstack/router#79ac49ee... की पहुँच बनी रह सकती है, जिससे cleanup और कठिन हो जाएगा
- यह audit ज़रूरी है कि router, query, table, form, virtual जैसे अन्य TanStack repo भी वही
bundle-size.yml शैली का pattern इस्तेमाल करते हैं या नहीं
- publish window के दौरान प्रभावित version वास्तव में डाउनलोड करने वाले users की संख्या npm support से लेनी है
- यह जाँचना है कि 7 maintainer की machines अलग से compromise हुई थीं या नहीं
- malicious publish में maintainer npm token का उपयोग नहीं हुआ था, लेकिन maintainer machine self-propagation logic के secondary target हो सकते हैं
संदर्भ सामग्री
1 टिप्पणियां
Hacker News टिप्पणियाँ
टोकन को revoke करते समय सावधान रहना चाहिए। payload शायद
~/.local/bin/gh-token-monitor.shमें dead-man's switch इंस्टॉल करता है, और Linux पर इसे systemd user service के रूप में, macOS परLaunchAgent com.user.gh-token-monitorके रूप में रजिस्टर करता हैचुराए गए टोकन से हर 60 सेकंड में
api.github.com/userको poll किया जाता है, और टोकन revoke होने पर HTTP 40x आने लगे तोrm -rf ~/चलाया जाता हैhttps://github.com/TanStack/router/issues/7383#issuecomment-...
अगले 5 साल software दुनिया में सचमुच बहुत उथल-पुथल वाले लगते हैं, और air-gapped systems बहुत महत्वपूर्ण हो सकते हैं
@mistralai/mistralainpm पैकेज भी इस worm के हिस्से के रूप में compromise हुआhttps://github.com/mistralai/client-ts/issues/217
अभी इसे npm registry से हटा दिया गया है
दुर्भाग्य से, यह इस बात का सबूत लगता है कि सिर्फ Trusted Publishing CI में सुरक्षित deployment के लिए पर्याप्त नहीं है। अगर CI pipeline के अंदर attacker हो या repository admin अधिकार चोरी हो जाएँ, तो deployment आसानी से किया जा सकता है
यह कोई नई जानकारी नहीं है, और Trusted Publishing को इसके लिए डिज़ाइन भी नहीं किया गया था, लेकिन local deployment और 2-factor authentication से Trusted Publishing पर जाने पर CI compromise के जरिए ऐसा attack path बनता है। local में काम करते समय जो दूसरा factor
npm publishको रोकता था, वह गायब हो जाता हैअभी जो घटनाक्रम दिख रहा है, उसमें attacker ने CI/CD pipeline पर कब्जा किया और
npm publishपर दूसरा factor न होने के कारण OIDC token चुराकर deployment पूरा कर लिया। दिलचस्प लेकिन अलग बात यह है कि deployment job खुद fail हुई, फिर भी malicious commit के payload ने workflow के OIDC token से खुद को publish कर लियाज़रूरत यह है कि long-term token रहित Trusted Publisher model बना रहे, लेकिन CI deployment में GitHub के बाहर का दूसरा factor भी मौजूद हो। यानी staged deployment चाहिए, जहाँ npm पक्ष पर कोई 2-factor authentication के साथ artifact को सचमुच public state में promote करे
अगर deployment सिर्फ GitHub trust model के भीतर ही संभव हो, तो repository admin token चुराने वाला या pipeline में malicious code डालने वाला कोई भी व्यक्ति deployment आसानी से पूरा कर सकता है। अगर GitHub context के बाहर असली दूसरा factor हो, तो कोई repository खराब कर सकता है या malware डाल सकता है, लेकिन registry के दूसरे factor के बिना publish नहीं कर सकता
पोस्टमॉर्टम: https://tanstack.com/blog/npm-supply-chain-compromise-postmo...
मैं जानना चाहता हूँ कि क्या इस बात का कोई सबूत है कि वे downstream packages सुरक्षित माने जा सकते हैं जिन्होंने TanStack packages को fetch या include किया हो सकता है
postinstall script घातक हैं। सबको pnpm इस्तेमाल करना चाहिए
यह बात समझ से बाहर है कि FORK पर push किए गए “orphan” commits npm client में ऐसा व्यवहार ट्रिगर कर सकते हैं। मेरी नज़र में GitHub की भी बड़ी ज़िम्मेदारी है। यह पूरी तरह पागलपन भरी संरचना है कि malicious fork के commits GitHub के shared object store के जरिए ऐसे URI से उपलब्ध हैं जिन्हें legitimate repository से अलग नहीं किया जा सकता
पहली बार पढ़ते समय मुझे लगा कि “fork” शब्द का गलत इस्तेमाल हुआ है और असल में official repository की branch की बात हो रही है। मुझे लगा यह सच नहीं हो सकता, लेकिन हे भगवान
https://tanstack.com/blog/npm-supply-chain-compromise-postmo...
TanStack ने अभी इस घटना पर postmortem प्रकाशित किया है
यह npm environment को सुरक्षित तरीके से configure करने का reminder है
https://gajus.com/blog/3-pnpm-settings-to-protect-yourself-f...
सिर्फ कुछ settings से बड़े जोखिम कम किए जा सकते हैं
allow-git=noneभी है: https://github.blog/changelog/2026-02-18-npm-bulk-trusted-pu...min-release-ageहै। 2) किसी वजह से इसे minutes में नहीं बल्कि days में बनाया गया है: https://docs.npmjs.com/cli/v11/using-npm/config#min-release-...dependency manager की दुनिया पूरी तरह अनावश्यक रूप से fragmented हो चुकी है
अगर package version dependency
^1.0.0जैसी है, या उससे भी खराब"*"है, तो आगे मत पढ़िए और तुरंत इसे किसी सुरक्षित version पर pin कीजिएइसे Claude से जल्दी-जल्दी बनाकर फैलाव कम करने में मदद करने की कोशिश की थी। जाहिर है, खुद verify करना चाहिए, लेकिन यह बताए गए compromised packages के आपकी मशीन पर होने के लिए scan करता है: https://github.com/PaulSinghDev/tanstack-shai-hulud-fix
अब लगता है कि हम उस चरण पर पहुँच गए हैं जहाँ हर किसी को हर project अलग VM में चलाना चाहिए
हाल की local privilege escalation vulnerabilities को देखते हुए Docker बिल्कुल पर्याप्त नहीं है। वैसे भी container को मुख्य security boundary के रूप में design नहीं किया गया था
अगर container के अंदर access की ज़रूरत वाली दूसरी cloud services भी हों, तो यह credentials stealer उन्हें भी ले जाएगा। फिर भी यह blast radius कम करता है, इसलिए कम से कम सुधार तो है
वाह, यह एक और बड़ा package है। Axios और LiteLLM compromise होने के बाद जो public service announcement पोस्ट किया था, उसे फिर से साझा कर रहा हूँ। lifecycle scripts वाली बात यहाँ भी लागू होती है
npm/bun/pnpm/uv अब सभी package के minimum release age setting को support करते हैं। मैंने
~/.npmrcमेंignore-scripts=trueभी रखा है, और विश्लेषण के अनुसार सिर्फ इससे भी vulnerability mitigate हो सकती थी। bun और pnpm default रूप से lifecycle scripts नहीं चलातेglobal setting के रूप में minimum release age को 7 दिन पर सेट करने का तरीका यह है
~/.config/uv/uv.tomlexclude-newer = "7 days"~/.npmrcmin-release-age=7 # daysignore-scripts=true~/Library/Preferences/pnpm/rcminimum-release-age=10080 # minutes~/.bunfig.toml[install]minimumReleaseAge = 604800 # secondsअगर global setting को override करना हो, तो CLI flags इस्तेमाल किए जा सकते हैं
npm install --min-release-age 0pnpm add --minimum-release-age 0uv add --exclude-newer "0 days"bun add --minimum-release-age 0एक और बात जोड़ूँ तो, लगता है कुछ लोगों को चिंता है कि dependencies के लिए waiting period बड़े पैमाने पर लागू करने से vulnerabilities की खोज देर से होगी, या dependency waiting period किसी तरह का free-riding है; मैं इससे सहमत नहीं हूँ। dependency waiting period के बदले जो लिया जा रहा है, वह time preference है, और हमेशा ऐसे लोग रहेंगे जिनकी time preference मुझसे अधिक होगी
0: https://news.ycombinator.com/item?id=47582220
1: https://news.ycombinator.com/item?id=47513932
अनपेक्षित बदलावों से बचने के लिए
pnpm install --frozen-lockfileइस्तेमाल किया जा सकता है। अगरmin-release-ageसेट नहीं है, तो याद रखें कि affected packages transitive dependencies के जरिए भी आ सकते हैं। संभव हो तो package manager version भी pin करना अच्छा है