.env ഫയലുകളും ഡീബഗ് ലോഗുകളും പബ്ലിക് ഇന്റർനെറ്റിൽ ലഭ്യമായതിനെത്തുടർന്ന് 669 വെണ്ടർമാരിൽ നിന്നായി 1,033 ലൈവ് Stripe സീക്രട്ട് കീകൾ പുറത്തായി. ഈ കീകൾ ഉപയോഗിച്ച് ആർക്കും ചാർജുകൾ ക്രിയേറ്റ് ചെയ്യാനും, ഇൻവോയ്‌സുകൾ എടുക്കാനും, ഉപഭോക്താക്കളുടെ വിവരങ്ങൾ ചോർത്താനും സാധിക്കും - ഇത് മിനിറ്റുകൾക്കുള്ളിൽ സാമ്പത്തിക നഷ്ടമുണ്ടാക്കാനും സൽപ്പേരിന് കളങ്കമുണ്ടാക്കാനും കാരണമാകുന്ന ഒരു സുരക്ഷാ വീഴ്ചയാണ്.

ചോർച്ചയ്ക്ക് കാരണമായത് എന്താണ്

ഡെവലപ്പർമാർ പതിവായി കോൺഫിഗറേഷൻ ഡാറ്റകൾ - ഡാറ്റാബേസ് പാസ്‌വേഡുകൾ, API ടോക്കണുകൾ, Stripe സീക്രട്ട് കീകൾ എന്നിവ - .env എന്ന ഫയലിൽ സൂക്ഷിക്കാറുണ്ട്. കോഡ്ബേസിൽ നിന്ന് രഹസ്യവിവരങ്ങൾ മാറ്റിനിർത്തുന്നതിനായി സോഴ്‌സ് കോഡിനൊപ്പം തന്നെ ഈ ഫയൽ നിലനിൽക്കുകയും റൺടൈമിൽ (runtime) ഇത് വായിക്കുകയും ചെയ്യുന്നു. ഒരു ഡോട്ടിൽ (.) തുടങ്ങുന്ന ഫയലുകൾ സെർവർ ഒരിക്കലും നൽകുന്നില്ലെങ്കിൽ മാത്രമേ ഈ രീതി ഫലപ്രദമാകൂ. ഈ സാഹചര്യത്തിൽ, തെറ്റായി കോൺഫിഗർ ചെയ്ത വെബ് സെർവറുകൾ (Nginx, Apache എന്നിവ) “/.env”, “/.env.example”, “/.git/HEAD”, കൂടാതെ ഒരു കസ്റ്റം “/debug” എൻഡ്‌പോയിന്റ് എന്നിവയ്ക്കുള്ള റിക്വസ്റ്റുകൾക്ക് 200 OK സ്റ്റാറ്റസോടെ ഫയലുകൾ നേരിട്ട് നൽകി.

ഈ ചോർച്ച Stripe പ്ലാറ്റ്‌ഫോമിലെ സുരക്ഷാ വീഴ്ച മൂലമോ ഏതെങ്കിലും പ്രത്യേക ഇ-കൊമേഴ്‌സ് പ്ലഗിനിലെ പിഴവ് മൂലമോ സംഭവിച്ചതല്ല. ലോകത്തിന് കാണാൻ പാടില്ലാത്ത ഫയലുകൾ വെളിപ്പെട്ടതുകൊണ്ട് മാത്രം സംഭവിച്ചതാണ് ഇത്.

ഈ വിവരങ്ങൾ പുറത്തായതുകൊണ്ട് എന്താണ് സംഭവിക്കുക?

ഒരു Stripe സീക്രട്ട് കീ എന്നത് ഒരു വ്യാപാരിയുടെ പേയ്‌മെന്റ് സംവിധാനത്തിലേക്കുള്ള ഒരു മാസ്റ്റർ പാസ്‌വേഡ് പോലെയാണ്. അത് കൈവശമുള്ള ആർക്കും താഴെ പറയുന്നവ ചെയ്യാൻ സാധിക്കും:

  • സൂക്ഷിച്ചിട്ടുള്ള കാർഡുകളിൽ നിന്ന് തന്നിഷ്ടപ്രകാരം ചാർജുകൾ ഈടാക്കാം (Create arbitrary charges)
  • ഇൻവോയ്‌സുകളും പേഔട്ട് ചരിത്രവും (payout histories) വീണ്ടെടുക്കാം
  • പേരുകൾ, ഇമെയിലുകൾ, ഫോൺ നമ്പറുകൾ, വീട്ടുപേരുകൾ, IP അഡ്രസ്സുകൾ തുടങ്ങിയ വ്യക്തിഗത വിവരങ്ങൾ ചോർത്താം
  • പ്രമോഷണൽ കോഡുകൾ ഉപയോഗിച്ച് സൗജന്യമായോ ഡിസ്കൗണ്ടോടെയോ സാധനങ്ങൾ വാങ്ങാം

ചോർത്തപ്പെട്ട ഡാറ്റയിൽ ഇവയെല്ലാം കൂടാതെ ഓരോ വെണ്ടറും എത്ര രൂപ സമ്പാദിച്ചു എന്ന് വ്യക്തമാക്കുന്ന പേഔട്ട് വിവരങ്ങളും ഉൾപ്പെട്ടിരുന്നു. ഒരു ബിസിനസ്സിനെ സംബന്ധിച്ചിടത്തോളം, ചാർജ്ബാക്കുകൾ (chargebacks) ഉണ്ടാക്കുന്ന തട്ടിപ്പ് ഇടപാടുകൾ, ഉപഭോക്താക്കളുടെ വിശ്വാസം നഷ്ടപ്പെടുക, PCI-DSS, GDPR അല്ലെങ്കിൽ മറ്റ് ഡാറ്റാ പ്രൈവസി നിയമങ്ങൾ പ്രകാരമുള്ള പിഴകൾ എന്നിവയാണ് നേരിട്ടുള്ള ഭീഷണി. നിയമപരമായ ചിലവുകൾ, പരിഹാര പ്രവർത്തനങ്ങൾക്കുള്ള ചെലവ്, ഒരിക്കലും വീണ്ടെടുക്കാൻ കഴിയാത്ത വിധം ബ്രാൻഡിന് സംഭവിക്കുന്ന നാശം എന്നിവ കാരണം ദീർഘകാലാടിസ്ഥാനത്തിൽ ഇതിന്റെ ആഘാതം വളരെ വലുതായിരിക്കും.

വേഗത്തിലുള്ള പരിശോധന: നിങ്ങളുടെ .env ഫയൽ പുറത്തായോ?

ഒരു ടെർമിനൽ തുറന്ന് yourdomain.com എന്നതിന് പകരം നിങ്ങളുടെ ഹോസ്റ്റ് നെയിം നൽകുക:

for p in "/.env" "/.env.example" "/.git/HEAD" "/debug"; do
  echo -n "$p -> "
  curl -s -o /dev/null -w "%{http_code}\n" "https://yourdomain.com$p"
done

ഓരോ വരിയും 403 (forbidden) അല്ലെങ്കിൽ 404 (not found) എന്ന് കാണിക്കണം. 200 എന്ന മറുപടി ലഭിച്ചാൽ ആ ഫയൽ പൊതുജനങ്ങൾക്ക് വായിക്കാൻ സാധിക്കും എന്നാണ് അർത്ഥം - ഇത് ഉടനടി ശ്രദ്ധിക്കേണ്ട അതീവ ഗുരുതരമായ ഒരു സുരക്ഷാ പ്രശ്നമാണ്.

ഉടനടി സ്വീകരിക്കേണ്ട നടപടികൾ

1. വെബ് സെർവറിൽ ഡോട്ട് ഫയലുകൾ (dotfiles) ബ്ലോക്ക് ചെയ്യുക

  • Nginx – ഡോട്ടിൽ തുടങ്ങുന്ന ഫയലുകൾക്കായുള്ള ഏതൊരു റിക്വസ്റ്റും നിരസിക്കുന്ന ഒരു location block ചേർക്കുക.
  • Apache – ഡോട്ടിൽ തുടങ്ങുന്ന ഫയലുകൾക്ക് 403 സ്റ്റാറ്റസ് നൽകുന്നതിനായി .htaccess-ൽ ഒരു FilesMatch ഡയറക്റ്റീവ് ഉപയോഗിക്കുക.

2. നിങ്ങളുടെ Docker വർക്ക്ഫ്ലോ കൂടുതൽ സുരക്ഷിതമാക്കുക

  • .env ഫയൽ ഇമേജിലേക്ക് കോപ്പി ചെയ്യപ്പെടാതിരിക്കാൻ അത് .dockerignore-ൽ ചേർക്കുക.
  • രഹസ്യവിവരങ്ങൾ അടങ്ങിയ ഫയലുകൾക്കായി COPY ഇൻസ്ട്രക്ഷൻ ഉപയോഗിക്കുന്നത് ഒഴിവാക്കുക.

3. ചോർത്തപ്പെട്ട എല്ലാ കീകൾക്കും റൊട്ടേഷൻ (Rotate) നടത്തുക

  • Stripe Dashboard → Developers → API keys ലോഗിൻ ചെയ്യുക.
  • പുതിയൊരു സീക്രട്ട് കീ ജനറേറ്റ് ചെയ്യുകയും പഴയ കീ ഉടനടി റദ്ദാക്കുകയും (revoke) ചെയ്യുക.

4. ലിറ്റസ്റ്റ്-പ്രിവിലേജ് (least-privilege) കീകൾ ഉപയോഗിക്കുക

  • എല്ലാ പ്രവർത്തനങ്ങൾക്കും ഒരൊറ്റ സീക്രട്ട് കീ ഉപയോഗിക്കുന്നത് നിർത്തുക.
  • ആവശ്യമായ കാര്യങ്ങൾ മാത്രം ചെയ്യാൻ അനുവദിക്കുന്ന നിയന്ത്രിത കീകൾ (restricted keys) നിർമ്മിക്കുക - ഉദാഹരണത്തിന്, ഒരു ചെക്ക്ഔട്ട് സർവീസിന് പേയ്‌മെന്റ് ഇന്റന്റുകൾ (payment intents) ക്രിയേറ്റ് ചെയ്യാനുള്ള അനുമതി മതിയാകും, എന്നാൽ റീഫണ്ട് നൽകാനോ പേഔട്ടുകൾ കാണാനോ ഉള്ള അനുമതി ആവശ്യമില്ല.

5. പഴയ കീയുടെ എല്ലാ കോപ്പികളും നീക്കം ചെയ്യുക

  • CI/CD ലോഗുകൾ, ബിൽഡ് ആർട്ടീഫാക്റ്റുകൾ (build artifacts), ബാക്കപ്പ് ആർക്കൈവുകൾ എന്നിവ പരിശോധിക്കുക.
  • നിങ്ങളുടെ Git ഹിസ്റ്ററിയിൽ Gitleaks അല്ലെങ്കിൽ TruffleHog പോലുള്ള സീക്രട്ട് സ്കാനിംഗ് ടൂളുകൾ ഉപയോഗിച്ച് പരിശോധന നടത്തുക.

സെർവറിൽ നിന്ന് ഫയൽ ഡിലീറ്റ് ചെയ്തതുകൊണ്ട് മാത്രം ചോർത്തപ്പെട്ട ഒരു കീ ഇല്ലാതാകുന്നില്ല; അത് ഡൗൺലോഡ് ചെയ്തവരുടെ കൈവശം എന്നെന്നേക്കുമായി നിലനിൽക്കും. മോഷ്ടിക്കപ്പെട്ട ഡാറ്റ ഉപയോഗശൂന്യമാക്കാൻ കീകൾ റൊട്ടേഷൻ (Rotation) നടത്തുക എന്നത് മാത്രമാണ് ഏക പോംവഴി.

പരിഹാരത്തിനപ്പുറം: കൂടുതൽ സുരക്ഷിതമായ ഒരു പൈപ്പ്‌ലൈൻ നിർമ്മിക്കുക

  • Automated scanning – ഓരോ പുൾ റിക്വസ്റ്റിലും (pull request) CI ജോബിലും സീക്രട്ട് ഡിറ്റക്ഷൻ (secret-detection) ഉൾപ്പെടുത്തുക.
  • Configuration management – രഹസ്യവിവരങ്ങൾ ഒരു ഡെഡിക്കേറ്റഡ് വോൾട്ടിൽ (ഉദാഹരണത്തിന്, HashiCorp Vault, AWS Secrets Manager) സൂക്ഷിക്കുകയും സ്റ്റാറ്റിക് ഫയലുകളെ ആശ്രയിക്കുന്നതിന് പകരം റൺടൈമിൽ അവ ഉപയോഗിക്കുകയും ചെയ്യുക.
  • Access reviews – ഏതൊക്കെ Stripe കീകൾ ആണ് നിലവിലുള്ളതെന്നും അവയ്ക്ക് എന്ത് അനുമതികളാണുള്ളതെന്നും കൃത്യമായ ഇടവേളകളിൽ ഓഡിറ്റ് ചെയ്യുക.

ഈ രീതികൾ പിന്തുടരുന്നത് ഒരു തെറ്റായ കോൺഫിഗറേഷൻ കാരണം മുഴുവൻ പേയ്‌മെന്റ് ഇൻഫ്രാസ്ട്രക്ചറും വെളിവാകാനുള്ള സാധ്യത കുറയ്ക്കുന്നു.

ഇനി ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ

സെക്യൂരിറ്റി കമ്മ്യൂണിറ്റി ഇതേ രീതി ഉപയോഗിച്ച് കൂടുതൽ കീകൾക്കായി തിരച്ചിൽ നടത്തിക്കൊണ്ടിരിക്കുകയാണ്. Stripe ടോക്കണുകൾ അടങ്ങിയ “/.env” ഫയലുകൾക്കായി ഓട്ടോമേറ്റഡ് സ്കാനറുകൾ വെബ് തിരയുന്നതിനാൽ കൂടുതൽ വിവരങ്ങൾ പുറത്തുവരാൻ സാധ്യതയുണ്ട്. കീ റൊട്ടേഷൻ രീതികളെക്കുറിച്ച് Stripe കൂടുതൽ മാർഗ്ഗനിർദ്ദേശങ്ങൾ നൽകിയേക്കാം, കൂടാതെ ഉയർന്ന റിസ്ക് ഉള്ള പ്രവർത്തനങ്ങൾക്കായി നിയന്ത്രിത കീകൾ (restricted keys) ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്തേക്കാം.

ചുരുക്കത്തിൽ

ഒരു ബ്രൗസർ ഉപയോഗിച്ച് ഒരു ഡോട്ട്ഫയൽ (dotfile) ലഭ്യമാക്കാൻ സാധിക്കുന്നുണ്ടെങ്കിൽ, നിങ്ങളുടെ പേയ്‌മെന്റ് സിസ്റ്റം ഇതിനകം തന്നെ സുരക്ഷിതമല്ല – തട്ടിപ്പുകൾ നിങ്ങളുടെ ലെഡ്ജറിൽ (ledger) എത്തുന്നതിന് മുമ്പ് ആ ഫയൽ ബ്ലോക്ക് ചെയ്യുക, കീ റൊട്ടേറ്റ് ചെയ്യുക, നിങ്ങളുടെ സീക്രട്ട് കൈകാര്യം ചെയ്യുന്ന വർക്ക്ഫ്ലോ (secret-handling workflow) പുനർരൂപകൽപ്പന ചെയ്യുക.