LinkedIn नौकरी प्रस्ताव में छिपा बैकडोर
(roman.pt)- एक social engineering attack का मामला, जिसमें एक recruiter ने LinkedIn message के ज़रिए संपर्क किया, lead engineer hiring का बहाना बनाया, और एक public GitHub repository की review करने को कहा
- review के लिए भेजे गए code में test suite के रूप में छिपा बैकडोर था, और "deprecated Node modules issue देख देने" का अनुरोध
npm installचलवाने वाला चारा था - शक होने पर local machine की बजाय ephemeral VPS पर read-only agent के साथ code की जांच की गई, और संदिग्ध file कुछ ही सेकंड में पकड़ ली गई
- repository commits और recruiter profile, दोनों में असल लोगों की पहचान का दुरुपयोग किया गया था; एक में वास्तविक developer, और दूसरे में arts journalist का रूप धरा गया था
- यह एक व्यावहारिक defensive lesson देता है कि शक, security hygiene, और read-only agent का इस्तेमाल, code को सीधे पढ़ने से भी ज्यादा असरदार हो सकता है
संपर्क कैसे हुआ
- पिछले हफ्ते एक छोटे crypto startup के recruiter से LinkedIn message मिला
- कुछ दिनों में कई बार message का आदान-प्रदान हुआ, और उसने lead engineer की जरूरत वाले एक टूटा हुआ proof-of-concept के बारे में बताया
- review के लिए एक public GitHub repository भेजी गई और कहा गया, "deprecated Node modules issue देख दीजिए"
- किसी मौजूदा codebase की review का अनुरोध अपने-आप में असामान्य नहीं था, लेकिन कुछ अटपटा लगा, इसलिए अतिरिक्त सावधानी बरती गई
जांच का तरीका
- clone करने और dependencies install करने के बजाय, Hetzner पर एक ephemeral VPS शुरू किया गया और वहीं repository clone की गई
- Pi को read-only mode में सेट किया गया, जिसमें सिर्फ file reading tools चालू थे
- इस्तेमाल किया गया command:
pi --tools read,grep,find,ls
- इस्तेमाल किया गया command:
- agent से codebase review करने और संदिग्ध चीजें दिखाने को कहा गया, तो वह लगभग तुरंत
app/test/index.jsपर रुक गया
बैकडोर की संरचना
- repository की बनावट React frontend + Node backend जैसी थी
- जाल लगभग 250 lines की
app/test/index.jsfile में था, जिसे test suite का रूप दिया गया था - उसके भीतर URL को टुकड़ों में बांटकर जोड़कर छिपाया गया था
- protocol, domain, separator, path, token, subdomain जैसे variables जोड़कर
https://rest-icon-handler.store/icons/77बनाया गया
- protocol, domain, separator, path, token, subdomain जैसे variables जोड़कर
- comment की गई test dummy lines के बीच payload छिपा था, जो server जो भी भेजे, उसे user machine पर execute कर देता था
- payload line 225 पर था
trigger mechanism
- file test run होने का इंतजार नहीं करती थी
app/index.jsमेंconst test = require('./test')चलाकरapp/test/index.jsको load और run किया जाता था
package.jsonमेंapp/index.jsको startup stage से जोड़ा गया था- सबसे अहम हिस्सा
preparescript था, जिसे npm,npm installके बाद अपने-आप चलाता है- यानी सिर्फ dependencies install करने से ही बैकडोर चल जाता था
- "deprecated Node modules issue देखिए" वाला निर्देश, असल में
npm installचलवाने का चारा था - sandbox में payload चलाकर second-stage payload भी देखा जा सकता था, लेकिन server से मिले code को चलाने का सबूत ही काफी था, इसलिए वहीं रुक गए
पहली चुराई गई पहचान
- commits एक वास्तविक full-stack developer के नाम और email से किए गए थे
- उसके पास सामान्य LinkedIn profile, personal website, और लंबे समय से सक्रिय GitHub account था
- codebase विरासत में मिलने का बहाना करके उस developer से संपर्क किया गया
- उसने कहा कि उसने उस company में कभी काम नहीं किया, पहले भी GitHub पर उसकी पहचान का इस्तेमाल कर fake repositories बनाई गई थीं और वे हटाई जा चुकी हैं, और उसका इस repository से कोई संबंध नहीं है
- उसने यह भी बताया कि वह खुद भी ऐसी repositories report कर रहा है
- पूरी commit history के 39 commits ऐसे developer के नाम पर थे, जिसने इस repository को कभी छुआ तक नहीं था
दूसरी चुराई गई पहचान
- recruiter profile एक वास्तविक arts journalist की थी, जिसकी background पूरी तरह culture field में थी और उसमें कोई technical तत्व नहीं था
- जब जवाब दिया गया कि install नहीं हो रहा, तो वही गैर-तकनीकी journalist फौरन npm और Node version expert बन गया और
npm installचलाने का दबाव बनाने लगा
यह किसी के साथ भी हो सकता है
- ऐसे attacks के बारे में पहले सुना था और HN पर भी पढ़ा था, लेकिन जब खुद निशाना बने तो कुछ हद तक चूकते-चूकते बचे
- पहले message से ही शक था, लेकिन अगर दिन थकाऊ होता या जल्दबाज़ी होती, तो शायद ज्यादा सोचे बिना
npm installचला देते
- पहले message से ही शक था, लेकिन अगर दिन थकाऊ होता या जल्दबाज़ी होती, तो शायद ज्यादा सोचे बिना
- repository review के अनुरोध वाले LinkedIn messages के साथ थोड़ी सतर्कता और security hygiene जरूरी है
- read-only agent से code review कराना, code को सीधे पढ़ने से ज्यादा असरदार साबित हुआ
- बैकडोर को भद्दे शुरुआती code जैसा दिखाया गया था, लेकिन agent ने उसे कुछ ही सेकंड में पकड़ लिया
- repository को GitHub पर और recruiter को LinkedIn पर report किया गया, लेकिन अब तक कोई बदलाव नहीं; code अभी भी public है
1 टिप्पणियां
Hacker News की राय
एक छोटे crypto startup के recruiter ने एक public GitHub repository भेजी और कहा कि टूटी हुई proof-of-concept repository को review कर दें, साथ ही “deprecated Node modules issue” चेक करने को कहा — यह दरअसल npm install के लिए उकसाने वाली phishing थी
preparescriptnpm installके बाद अपने-आप चलती थी, और server से आने वाला arbitrary code local machine पर चलाने वाला backdoor थी; LinkedIn पर इस तरह की phishing हो सकती है, यह चौंकाने वाली हद तक गंभीर लगता है$companyमें काम करते हैं, और अगर profile में लिखा हो तो वे official company page पर भी दिखते हैंहमारी कंपनी में भी ऐसे fake recruiters थे जो यही scam कर रहे थे, और वे काफ़ी believable fake profiles थे जिन पर LinkedIn Premium से जुड़ी posts भी थीं, लेकिन वे असली employee नहीं थे
कितनी भी report करो, वे हटे नहीं; आखिरकार LinkedIn में काम करने वाले एक जानकार को दारू पिलाकर मामला सुलझाया, लेकिन हर startup के पास ऐसा connection नहीं होता
जब लोग अब भी इसी तरह बार-बार फँस रहे हैं, तो समझ नहीं आता कि PNPM जैसे tools अपनाकर उस सबसे obvious और सबसे ज़्यादा abuse होने वाले hole को क्यों नहीं बंद किया जाता जहाँ code download करते वक्त arbitrary code execution हो जाता है
जो tools code download करने की कोशिश करते ही arbitrary code चलाते हैं, उन्हें अब रुक जाना चाहिए
मुझे आख़िरी बार याद है कि download को Windows
.scrscreensaver file की तरह disguise किया गया था, और अब इसका LinkedIn तक आ जाना और भी बुरा चरण हैplatform को शायद यह “jobs growth” जैसा दिखता होगा, इसलिए वे ज़्यादा परवाह नहीं करेंगे; कुछ वैसा ही जैसे Google या Meta जैसे ad networks scam ads की बहुत परवाह नहीं करते
bullshitpowershellladendoucument.pdf.docxजैसी चीज़ भेजने वाली phishing तो देखी है, लेकिन सीधे LinkedIn DM से भेजना काफ़ी bold strategy हैयह तो साफ़ तौर पर crime लगता है, फिर भी समझ नहीं आता कि ऐसी चीज़ report करने और मदद पाने के लिए cybercrime का कोई मशहूर 911 जैसा channel क्यों नहीं है
समाज को असली ख़तरे की रफ़्तार पकड़कर जल्दी support systems बनाने चाहिए, और organized crime के खिलाफ organized defense चाहिए
शायद जवाब न मिले, लेकिन अमेरिकी नागरिकों के लिए, और शायद किसी के लिए भी, जहाँ तक मैं जानता हूँ यह internet 911 के सबसे क़रीब है
दूसरी समस्या यह asymmetry है कि ऐसे scams बनाने में लगभग शून्य effort लगता है, लेकिन पकड़ने और prosecute करने में भारी मेहनत और astronomical cost लगती है
यह Microsoft support बनकर बुज़ुर्गों को निशाना बनाने वाले scam calls जैसी category में है, और suspects को पकड़ना लगभग नामुमकिन है
या तो वे tracks बहुत अच्छी तरह छिपाते हैं, या ज़्यादा आम तौर पर वे ऐसे देशों में रहते हैं जहाँ सरकार पश्चिमी लोगों को scam करने की परवाह नहीं करती, बल्कि कभी-कभी उसे tolerate भी करती है
crime report करने पर भी शायद न मदद मिलेगी, न कोई आपसे संपर्क करेगा
यह अब एक सामान्य interview task के काफ़ी असहज रूप से क़रीब है
कोई repository भेजे, कहे install टूटा हुआ है, ज़रा देख लो — यह situation बहुत natural लगती है, और कई developers अगर थके हों या job search में हों तो ज़्यादा सोचे बिना
npm installचला सकते हैंआप सुस्त नहीं दिखना चाहते, इसलिए शुरुआत में यह पूछने वाला step ही छोड़ देते हैं कि इसे चलाना भी चाहिए या नहीं
“repository GitHub पर report कर दी, recruiter को LinkedIn पर report कर दिया, लेकिन अभी तक कुछ नहीं बदला और code अब भी up है” — आह, Microsoft
वह एक fake video पर ले जाता था जिसमें Canada के प्रधानमंत्री सभी Canadians के लिए crypto investment plan announce कर रहे थे, और साथ में signup link भी था; report करने पर जवाब आया कि investigation में कोई policy violation नहीं मिला
तीनों में security या reliability issues हैं, और Microsoft जितना AI में गहराई से उतर रहा है, उतना लगता है कि चीज़ें बेहतर होने के बजाय और खराब हो रही हैं
कंपनी के अंदर AI productivity, या जिसे कुछ लोग 10x productivity कहते हैं, वह आख़िर जा कहाँ रही है समझ नहीं आता
तब शायद तुरंत हट जाता
लगता है वही domain कई targets के खिलाफ इस्तेमाल हो रहा है
3 महीने पहले की एक Reddit thread में भी ऐसा ही कुछ है: https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...
समझ नहीं आता कि दुनिया के सारे operating systems अभी तक npm को block क्यों नहीं कर रहे
लगता है ये लोग कभी नहीं सीखेंगे
ऐसे scams कई technologies के साथ हो सकते थे, यहाँ तक कि Makefile से भी काम चल जाता
काश Mac पर आखिरकार कोई ठीक-ठाक virtualization framework आ जाए
1995 की तरह internet से बिना protection random scripts download करना अब काफ़ी थका देने वाला हो गया है
किसी अजनबी से मिलकर उसकी चीज़ें अपने computer की गहराई तक डालते समय protective gear पहनना नहीं भूलना चाहिए
curl | bashscripts चलाना भी उतना ही बुरा है, लेकिन यहाँ के कई developers अब भी इस bad practice को लेकर संदिग्ध धारणाएँ रखते हैंपिछले कुछ हफ्तों में घूम रही कई छोटी Shai-Hulud-टाइप घटनाएँ दिखाती हैं कि यह कितना बुरा है
IntelliJ में npm commands को Docker container के अंदर run करने के लिए configure किया जा सकता है
LinkedIn पर मिली job offers सब की सब बहुत suspicious लगीं
जैसे platform के ज़रिए apply करो, या intro video record करो, या code platform के पीछे छिपे padding coding test पूरे करो
उससे company laptop deposit के नाम पर cheque लिखने को कहा गया; ऊपर-ऊपर से भी यह बेतुका था, लेकिन वह लंबे समय से नौकरी ढूँढ रहा था, बहुत desperate था, और सच में खुश था कि आखिर नौकरी मिल गई
लंबे समय से बेरोज़गार लोग कभी-कभी इतने desperate हो जाते हैं कि वे उन बड़े red flags को भी नज़रअंदाज़ कर देते हैं जिनमें पर्याप्त savings वाले या सिर्फ़ switch करने वाले employed लोग कभी नहीं फँसते
क्या आजकल ज़्यादातर NPM package authors इसी तरह hack नहीं हो रहे?
लगता है axios maintainer भी LinkedIn के ज़रिए इसी approach का शिकार हुआ था
मैं LinkedIn सिर्फ़ job postings के लिए इस्तेमाल करता हूँ, लेकिन पिछले कुछ महीनों में वहाँ बेकार postings बहुत बढ़ गई हैं
Ladders, Swooped जैसी और उनसे मिलती-जुलती कंपनियों की postings भरी पड़ी हैं, और अब लगता है LinkedIn को पूरी तरह छोड़ देने का समय आ गया है