Snyk के सुरक्षा शोधकर्ता ने Cursor.com को निशाना बनाकर दुर्भावनापूर्ण NPM पैकेज प्रकाशित किए
(sourcecodered.com)- npm पर अपलोड किए गए कई पैकेजों में ऐसी इंस्टॉलेशन स्क्रिप्ट शामिल थी जो Cursor.com को निशाना बनाती हुई लगती है, और इंस्टॉल होने पर सिस्टम जानकारी को बाहरी वेब सेवा पर भेजती है
- इन्हें प्रकाशित करने वाला npm उपयोगकर्ता sn4k-s3c था, और उसने
cursor-retreival,cursor-always-local,cursor-shadow-workspaceजैसे नामों का इस्तेमाल किया जो Cursor के आंतरिक पैकेजों की याद दिलाते हैं - पैकेज द्वारा प्राप्त
envआउटपुट में AWS keys, npm tokens, GitHub credentials जैसे संवेदनशील environment variables शामिल हो सकते हैं, जिससे नुकसान का दायरा बढ़ सकता है - OpenSSF package analysis scanner ने पैकेजों को दुर्भावनापूर्ण के रूप में पहचाना, और OSV ने MAL-2025-27, MAL-2025-28, MAL-2025-29 नाम से 3 advisories बनाई
- npm metadata में Snyk Security Labs की snyk.io email publisher के रूप में दिखाई दी, और बाद में Snyk शोधकर्ता ने पैकेज हटा दिए जिसके बाद Snyk ने ब्लॉग पोस्ट के जरिए प्रतिक्रिया दी
Cursor को निशाना बनाते दिखने वाले npm पैकेज
- SourceCodeRed द्वारा दुर्भावनापूर्ण पैकेजों का पता लगाने की प्रक्रिया में npm पर अपलोड किए गए कई पैकेज मिले
- पैकेज नाम Cursor से जुड़े आंतरिक पैकेजों की याद दिलाने वाले थे
cursor-retreivalcursor-always-localcursor-shadow-workspace
- publisher के रूप में npm उपयोगकर्ता sn4k-s3c दिखा
- बताया गया कि पैकेजों की सूची
https://www.npmjs.com/~sn4k-s3cपर देखी जा सकती है
इंस्टॉल करते समय होने वाली गतिविधि
- पैकेज इंस्टॉल करने पर यह सिस्टम डेटा इकट्ठा करके हमलावर के नियंत्रण वाली वेब सेवा को भेजता है
- स्क्रीनशॉट के अनुसार पैकेज
envकमांड का आउटपुट लेता है envआउटपुट में सिस्टम सेटिंग्स के साथ संवेदनशील environment variables भी शामिल हो सकते हैं- AWS keys
- npm tokens
- GitHub credentials
- अन्य संवेदनशील environment variables
- नतीजतन, सिर्फ इंस्टॉल करने से ही लोकल environment की जानकारी बाहरी रूप से लीक हो सकती है
dependency confusion की संभावना और डिटेक्शन परिणाम
- इस तरह के पैकेज अक्सर किसी खास कंपनी को निशाना बनाने वाले dependency confusion हमलों में दिखाई देते हैं
- Cursor.com का bug bounty program है या नहीं, या इसकी विशिष्ट पृष्ठभूमि क्या थी, यह पुष्टि नहीं हुई
- SourceCodeRed को संदेह है कि Cursor के पास
cursor-always-local,cursor-retrieval,cursor-shadow-workspaceजैसे private npm पैकेज हो सकते हैं - हमलावर को शायद उम्मीद थी कि Cursor का कोई कर्मचारी गलती से public पैकेज इंस्टॉल कर लेगा और डेटा भेज देगा
- OpenSSF package analysis scanner ने इन पैकेजों को दुर्भावनापूर्ण के रूप में पहचाना, और OSV ने 3 malware advisories बनाई
-
MAL-2025-27
-
MAL-2025-28
- MAL-2025-29
- संबंधित OSV सूची
https://osv.dev/list?q=cursor&ecosystem=npmपर है
-
publisher metadata
- npm package metadata में publisher ने Snyk Security Labs टीम का snyk.io email address इस्तेमाल किया
- कहा गया कि publisher email metadata ऐसा हिस्सा है जिसे spoof नहीं किया जा सकता
authorफ़ील्ड में Snyk कर्मचारी का विशिष्ट उल्लेख हैauthorफ़ील्ड spoof की जा सकती है, लेकिन publisher verified Snyk email होने के कारण यह अनुमान लगाया गया कि यह वास्तव में Snyk से आया था
उपयोगकर्ता प्रतिक्रिया और बाद के अपडेट
- SourceCodeRed ने npm को सूचित किया, लेकिन उस समय तक पैकेजों को अभी भी दुर्भावनापूर्ण के रूप में चिह्नित नहीं किया गया था
- कई software supply chain security tools तभी ब्लॉक कर पाते हैं जब उन्हें पता हो कि कोई पैकेज दुर्भावनापूर्ण है
- बिना सोचे-समझे npm पैकेज इंस्टॉल न करने की सलाह दी गई
- इन पैकेजों में केवल
package.jsonऔरindex.jsयाmain.jsये दो फ़ाइलें थीं, जिसे एक संदिग्ध संकेत माना जा सकता है - 15 जनवरी 2025 के अपडेट के अनुसार, Snyk शोधकर्ता ने ब्लॉग प्रकाशित होने के अगले दिन Cursor-संबंधित पैकेज हटा दिए
- 14 जनवरी 2025 को The Register ने इससे संबंधित रिपोर्ट प्रकाशित की:
https://www.theregister.com/2025/01/14/snyk_npm_deployment_removed/ - उसी दिन Snyk ने ब्लॉग में प्रतिक्रिया पोस्ट की और कहा कि उनकी ओर से कोई गलती नहीं हुई:
https://snyk.io/blog/snyk-security-labs-testing-update-cursor-com-ai-code-editor/
1 टिप्पणियां
Hacker News की राय
[सुधार: नीचे Cursor डेवलपर का जवाब देखने पर लगता है कि Cursor ने इसे मंजूरी नहीं दी थी] ऐसा लगता है कि Cursor के अंदर एक private NPM registry है जिसमें ये पैकेज मौजूद हैं, और NPM के काम करने के तरीके की वजह से attacker के लिए public registry से वही पैकेज उठवाने का झांसा देना आसान हो सकता है
शायद Snyk के किसी कर्मचारी ने पाया या शक किया कि Cursor build का कुछ हिस्सा इस तरह गलत तरीके से configured है, और proof of concept के तौर पर पैकेज publish कर दिए। पैकेज description “for Cursor” देखकर मुझे लगा था कि उन्हें इसी काम के लिए hire किया गया होगा
अगर ऐसा है, तो इसमें बहुत बड़ी बात नहीं है; और अगर मुख्य मुद्दा private registry को bypass करने वाली misconfiguration दिखाना था, तो security researcher proof of concept में private NPM registry का इस्तेमाल कर ही नहीं सकता था
खासकर कई proxy latest package version ज्यादा होने पर private registry के बजाय public registry को चुन लेते हैं: https://snyk.io/blog/detect-prevent-dependency-confusion-att...
हम इसे VS Code की तरह ही handle करते हैं: https://github.com/microsoft/vscode/tree/main/extensions
हमने Snyk को hire नहीं किया था, और यह देखने के बाद उनसे संपर्क किया तो उन्होंने माफी मांगी। वे असल में क्या करने की कोशिश कर रहे थे, इसकी पुष्टि हमें नहीं मिली, लेकिन यह explanation plausible है कि किसी ने dependency confusion vulnerability का शक किया था। हालांकि public NPM से सच में environment variables भेजवाना मुझे काफी irresponsible लगता है
envcommand के output तक पूरा access देना, ज्यादातर लोगों के लिए बड़ी समस्या होगादिलचस्प बात यह है कि Snyk co-founder ने Cursor की competitor कंपनी शुरू की है
https://www.tessl.io/ https://techcrunch.com/2024/11/14/tessl-raises-125m-at-at-50...
उम्मीद है कोई foul play नहीं हुआ होगा
अब लगता है कि सारा development सच में virtual machine के अंदर ही करना पड़ेगा। हर project के लिए एक VM। ऐसी बहुत-सी चालाक तरकीबें हैं जिनसे मैं अनजाने में गलती करके security बिगाड़ सकता हूँ। तसल्ली बस यही है कि मैं कोई बड़ा नाम नहीं हूँ, इसलिए चुराने लायक secrets या संपत्ति नहीं है
IDE, plugins, development utilities, language libraries, operating system packages वगैरह—हम बहुत ज्यादा code पर आंख मूंदकर भरोसा कर रहे हैं
कुछ साल पहले जहाँ काम करता था, वहाँ laptops पर web browser और development tools ban थे। Browser चाहिए तो Citrix से इस्तेमाल करना पड़ता था, और coding करनी हो तो VDI इस्तेमाल करना पड़ता था या tools को VM के अंदर चलाना पड़ता था
उस समय यह तरीका लगभग पागलपन जैसा लगता था, लेकिन अब धीरे-धीरे समझ आने लगा है
NVIDIA virtualization GPU features को enterprise cards के पीछे lock कर देता है, इसलिए बेअसर command translation पर निर्भर रहना पड़ता है
VM का बाकी overhead लगभग सब सहन हो जाता है, लेकिन अटकता और response न देने वाला GUI ergonomics पर उम्मीद से ज्यादा बुरा असर डालता है और अजीब तरह से बाकी performance को भी नीचे खींच देता है
अगर सिर्फ Linux पर Linux virtualize करने के मामले में भी यह समस्या हल हो जाए, तो सब कुछ virtualize करने का विकल्प कहीं ज्यादा practical हो जाएगा
खास तौर पर, मैं पुराने Mac से M1 के Asahi Linux पर Go और Zig development environment शिफ्ट कर रहा हूँ, लेकिन TrueCrypt और Little Snitch के alternatives ढूँढने से ही उलझा हुआ हूँ। क्या ऐसे VM tools encrypted VM और firewall rules support करते हैं? यहाँ Vagrant का जिक्र हुआ है और network isolation शायद कुछ हद तक हल हो जाए, लेकिन इसके अलावा क्या recommend किया जा सकता है?
VM मुझे protect कर सकता है, लेकिन मेरे बनाए software के users को protect नहीं करता। जिस product को छूने के लिए मुझे protective suit पहनना पड़ता है, उसे customers को भेजकर मैं कैसे उम्मीद कर सकता हूँ कि वे बिना protection के उसे safe तरीके से use करेंगे?
मुझे ऐसा environment नहीं चाहिए
अभी का solution dependencies को बेहद सख्ती से चुनना है। और खास तौर पर, मेरा मानना है कि project या company पर नहीं, सिर्फ लोगों पर भरोसा करना चाहिए। यह आसान नहीं है, लेकिन फिलहाल इससे बेहतर alternative नहीं दिखता
हर project के लिए simple dot file में file system binds लिख देता हूँ, और काम के दौरान नया terminal खोलने पर उस dot file के आधार पर automatic isolation हो जाता है। Cognitive burden बहुत कम है और integration लगभग seamless है। लगता है बहुत से developers के पास ऐसे ही scripts होंगे। पहले मैंने ऐसा project ढूँढा था लेकिन नहीं मिला; समझ नहीं आया कि यह इतना simple है कि project बनाने लायक कुछ नहीं, या बाकी लोग इसे किस नाम से बुलाते हैं। कोई reference मिल जाए तो अच्छा होगा
Network access को restrict नहीं करता। सारे traffic को log करने और automatically man-in-the-middle proxy set करने के experiments किए थे, लेकिन ordinary user की तरह इस्तेमाल करने के लिए यह पर्याप्त convenient नहीं था। बेशक kernel attack surface अब भी बचा रहता है। हालांकि मुख्य चिंता files के पढ़े जाने या destroy होने की है
लेख में जिस हिस्से से मैं सहमत नहीं हूँ, वह यह है: “NPM packages को blindly install न करना बेहतर है, और package suspicious है या नहीं यह देखने के संकेत होते हैं। इन packages में सिर्फ दो files हैं—
package.jsonऔरindex.jsयाmain.js—इसलिए यह normal है या नहीं तय करने वाले flags में से एक है”यह top-level packages पर कुछ हद तक काम कर सकता है, लेकिन transitive dependencies तक सबकी review करना लगभग असंभव है
अगर आप 400 dependencies वाला package ला रहे हैं, तो उस surface area के 10% को भी ठीक से कैसे check करेंगे? https://gist.github.com/anvaka/8e8fa57c7ee1350e3491#top-1000...
id_rsaaccess न करने देना—काफी हद तक हल हो जाती हैSnyk वह company भी है जो public key को rotate नहीं करती, बस बिना notice बदल देती है: https://github.com/snyk/cli/pull/5649
अगर project GitHub के अलावा किसी दूसरे repository hosting पर चला जाए तो उसे “abandoned” mark कर देती है, और npm/PyPI पर नई release आने के बाद भी वह project abandoned ही रहता है
मुझे नहीं लगता कि उनकी क्षमता उनकी reputation जितनी बड़ी है
और Snyk के sales rep ने email में मेरा अपमान किया था। शायद product खरीदने में interest न होना मतलब मैं ऐसा incompetent developer हूँ जो सिर्फ vulnerabilities से भरा software ही use कर सकता है
यह पूरी तरह उल्टा software लगता है, जिसे companies इसलिए खरीदती हैं क्योंकि insurer security checklist के items भरने को कहता है
Codeberg interesting लगता है, और अगर maintenance संभाल सकें तो Forejo जैसे self-hosting options भी अच्छे लगते हैं
Snyk के बारे में मैंने ज्यादा नहीं सुना, सिवाय इसके कि उनमें ego काफी है; यह perspective काफी interesting है
अगर और संदर्भ न हो, तो Snyk के लिए भी यह अच्छा नहीं दिखता। इसका मतलब है कि किसी कर्मचारी ने NPM के जरिए अपनी ही सेवा का real-environment test किया, या Cursor का वैध audit करते समय public resources का इस्तेमाल न हो, इसके लिए जरूरी controls और procedures की कमी थी
यह Snyk test की white-hat audit जैसा दिखता है।
oastify.comBurp Collaborator का default server है, इसलिए शायद detect हुआtest में private npm repository इस्तेमाल करनी चाहिए थी, और local में override करना मुश्किल नहीं है। अपना Collaborator server भी इस्तेमाल करना चाहिए था
console.logकरना,npm installfail कराना, या payload extract न करने वाला तरीका भी काफी थाऐसा लगता है NPM security industry में jobs पैदा कर रहा है। यह एक ऐसा messy सिस्टम है जिसे ठीक नहीं किया जा सकता, और उम्मीद है कि JSR जैसे competitors संगठन पर पर्याप्त दबाव डालेंगे
उल्टे DORA और NSIS जैसे regulations के चलते third-party package audits की मांग बढ़ने की संभावना ज्यादा है। यह critical industries में development practices बदलने के लिए मजबूर करेगा। साथ ही, LLM के दौर में बाहरी packages का इस्तेमाल काफी कम हो जाएगा, ऐसा मुझे लगता है। OpenAPI spec generation जैसी चीजों के लिए external package लाने की जरूरत ही क्या है? LLM एक-दो घंटे की setup में जरूरी CLI script लिख सकता है। इसी तरह, code के boring हिस्सों को सीधे auto-generate कराने के लिए LLM इस्तेमाल न भी करें, तो उससे ऐसा CLI tool बनवाया जा सकता है जो यह काम करे। तब बाहरी factors पर निर्भर नहीं रहना पड़ेगा, और उन CLI tools के messy cowboy code होने की संभावना लगभग तय है, लेकिन output को tool refine करके मनचाहे रूप में बनाया जा सकता है
Go जैसी languages को देखें, जो standard packages में जरूरी चीजें डालती हैं, तो एक ऐसी दुनिया दिखती है जहां standard library भर से बहुत सारे काम बेहद आसानी से किए जा सकते हैं
थोड़ा off-topic है, लेकिन क्या किसी ने Snyk के अपने tools और services के लिए proper SBOM लिया है? पूछ इसलिए रहा हूं क्योंकि वे हमारी company को SBOM बनाने वाला solution बेचने की कोशिश कर रहे थे
पैसे दें तब भी शायद मैं इसे install नहीं करूंगा। Unit 8200 लगातार founders निकालती और fund करती रहती है, जिससे यह NSA की तरह पहले से ही दरवाजे के अंदर पैर जमा लेने वाली structure लगती है
Snyk Research Labs आम software packages की testing और research के जरिए community में नियमित योगदान देता है। यह Cursor research malicious intent से नहीं की गई थी, और packages में Snyk Research Labs और researcher के contact details शामिल थे। हम कुछ VS Code extensions में dependency confusion को बहुत specific तौर पर देख रहे थे, और वे packages ऐसे नहीं थे जिन्हें developers को खुद install करना था
Snyk responsible disclosure policy का पालन करता है। किसी ने भी यह package नहीं उठाया, लेकिन अगर कोई उठाता तो हम तुरंत follow-up करते
response ऐसा सुनाई देता है जैसे प्रभावित व्यक्ति के funeral पर apology letter भेजने की बात हो। “अच्छे इरादे” हों तब भी अगर credentials compromise होते हैं, तो वह व्यक्ति पहले ही compromised हो चुका होता है, और उसे malicious attacker से compromise होने जैसी ही response देनी पड़ती है
यह maliciousness से फर्क महसूस कर पाना मुश्किल हो, इतना करीब है
साथ ही, सभी को यह भी याद रखना चाहिए कि Snyk का एक stakeholder अभी Cursor का competing product launch करने की कोशिश कर रहा है। good faith assume करना कहीं ज्यादा मुश्किल हो जाता है
envoutput को अपने पास रखेऊपर से Cursor के competing product के साथ conflict of interest है, इसलिए और ज्यादा सावधानी बरतनी चाहिए थी। decision-making भी खराब और response भी खराब