AI കോഡ് അസിസ്റ്റന്റുകളെ (AI code assistants) ഒരു ദുരുദ്ദേശ്യപരമായ .git/config എൻട്രി വഴി ഹാക്ക് ചെയ്യാൻ സാധിക്കും. ഇത് Git-ന്റെ core.fsmonitor ഫീച്ചർ ഉപയോഗപ്പെടുത്തിയാണ് ചെയ്യുന്നത്. അസിസ്റ്റന്റ് ഫയലുകൾ സ്കാൻ ചെയ്യുന്ന നിമിഷം തന്നെ ഒരു വിശ്വസനീയമല്ലാത്ത റെപ്പോസിറ്ററിക്ക് (untrusted repository) ഡെവലപ്പറുടെ മെഷീനിൽ കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കാൻ ഇത് അനുവദിക്കുന്നു.
Claude Code, Cursor, OpenAI Codex, Goose, Qwen Code, Grok Build, Hermes എന്നിങ്ങനെ പ്രശസ്തമായ പല ഏജന്റുകളിലും ഈ പിഴവ് കണ്ടെത്തിയിട്ടുണ്ട്. പാച്ച് ചെയ്ത (patched) ഏജന്റുകളിൽ ഈ എക്സ്പ്ലോയിറ്റ് (exploit) ഇനി പ്രവർത്തിക്കില്ല; എന്നാൽ മറ്റുള്ളവ ഇപ്പോഴും ഇതിന് ഇരയാകാൻ സാധ്യതയുണ്ട്. ഇതിനായി പ്രത്യേക ക്ലിക്കുകളോ പ്രോംപ്റ്റുകളോ ആവശ്യമില്ല, കൂടാതെ AI ഏജന്റ് നൽകുന്ന സാൻഡ്ബോക്സിന് (sandbox) പുറത്തായി ഉപയോക്താവിന്റെ തന്നെ അധികാരങ്ങളോടെയാണ് (privileges) ഈ ദുരുദ്ദേശ്യ കോഡ് പ്രവർത്തിക്കുന്നത്.
ഒരു ഡെവലപ്പർ എങ്ങനെയാണ് ഈ ആക്രമണത്തിന് ഇരയാകുന്നത്
- ഒരു കോൺട്രാക്ടർ ഒരു പ്രോജക്റ്റ് സിപ്പ് (zip) ചെയ്ത് ഇമെയിൽ ചെയ്യുന്നു.
- ഒരു സഹപ്രവർത്തകൻ നെറ്റ്വർക്ക് ഡ്രൈവിൽ ഒരു ഫോൾഡർ പങ്കിടുന്നു.
- ഒരു കോഡ്ബേസ് അടങ്ങിയ യുഎസ്ബി സ്റ്റിക്കർ കൈമാറുന്നു.
ഓരോ സാഹചര്യത്തിലും, റെപ്പോസിറ്ററി ഒരു ഡയറക്ടറിയായാണ് വരുന്നത്, അതിൽ നേരത്തെ തന്നെ ഒരു .git ഫോൾഡർ അടങ്ങിയിട്ടുണ്ടാകും. ഒരു AI അസിസ്റ്റന്റ് ആ ഫോൾഡർ തുറക്കുമ്പോൾ, കോഡിന്റെ ഒരു കാഴ്ച (view) നിർമ്മിക്കുന്നതിനായി അത് സാധാരണയായി പശ്ചാത്തലത്തിൽ (background) git status പ്രവർത്തിപ്പിക്കുന്നു. ഫയൽ സിസ്റ്റത്തിലെ മാറ്റങ്ങൾ നിരീക്ഷിക്കാൻ ഒരു ബാഹ്യ പ്രോഗ്രാമിനെ വിളിക്കാൻ Git-നോട് ആവശ്യപ്പെടുന്ന core.fsmonitor സെറ്റിംഗ് ഉപയോഗിച്ച് Git ഈ പ്രവർത്തനം വേഗത്തിലാക്കുന്നു. റെപ്പോസിറ്ററിയിലെ .git/config ഫയൽ core.fsmonitor-ന് വേണ്ടി ഒരു ദുരുദ്ദേശ്യ കമാൻഡ് നിർവചിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താവിനോട് ചോദിക്കാതെ തന്നെ Git അത് സ്വയമേവ പ്രവർത്തിപ്പിക്കുന്നു.
കമാൻഡ് Git തന്നെ പുറപ്പെടുവിക്കുന്നതുകൊണ്ട്, അത് ഉപയോക്താവിന്റെ അവകാശങ്ങൾ (rights) സ്വീകരിക്കുന്നു കൂടാതെ AI ടൂൾ സജ്ജീകരിച്ചിട്ടുള്ള ഏതൊരു സാൻഡ്ബോക്കിനെയും മറികടക്കുകയും ചെയ്യുന്നു. ഒരു സാധാരണ git clone, git fetch അല്ലെങ്കിൽ git pull സമയത്തല്ല ഈ എക്സ്പ്ലോയിറ്റ് പ്രവർത്തിക്കുന്നത്; മറിച്ച് റെപ്പോസിറ്ററി അൺപാക്ക് ചെയ്യുമ്പോൾ അതിൽ .git മെറ്റാഡാറ്റ നേരത്തെ തന്നെ ഉണ്ടെങ്കിൽ മാത്രമേ ഇത് സജീവമാകൂ.
എന്തുകൊണ്ടാണ് ഈ പ്രശ്നം ഗൗരവകരമാകുന്നത്
കോഡ് പൂർത്തിയാക്കാനോ (completions), റീഫാക്ടർ ചെയ്യാനോ (refactor), അല്ലെങ്കിൽ മുഴുവൻ മൊഡ്യൂളുകൾ നിർമ്മിക്കാനോ ഡെവലപ്പർമാർ കൂടുതൽ കൂടുതൽ AI അസിസ്റ്റന്റുകളെ ആശ്രയിക്കുന്നു. ഈ ടൂളുകൾക്ക് പ്രോജക്റ്റിന്റെ ഫയൽ ട്രീയുടെ ഒരു വേഗത്തിലുള്ള സ്നാപ്പ്ഷോട്ട് ആവശ്യമാണ്, അതിനാൽ അവ Git കമാൻഡുകൾ നിശബ്ദമായി പ്രവർത്തിപ്പിക്കുന്നു. ഒരു ദുരുദ്ദേശ്യ റെപ്പോസിറ്ററിക്ക് ആ നിമിഷം കോഡ് പ്രവർത്തിപ്പിക്കാൻ കഴിയുമെങ്കിൽ, ഒരു മുന്നറിയിപ്പും കൂടാതെ തന്നെ അറ്റാക്കർക്ക് ഡെവലപ്പറുടെ വർക്ക്സ്റ്റേഷനിൽ പ്രവേശനം ലഭിക്കുന്നു. ഉപയോക്താവ് വെറുമൊരു AI സഹായത്തോടെ കോഡ് "പരിശോധിക്കുകയാണെന്ന്" വിശ്വസിക്കുമ്പോൾ തന്നെ, ക്രെഡൻഷ്യൽ മോഷണം (credential theft) മുതൽ സ്ഥിരമായ ബാക്ക്ഡോറുകൾ (backdoors) ഇൻസ്റ്റാൾ ചെയ്യുന്നത് വരെയുള്ള അപകടസാധ്യതകൾ ഇതിലുണ്ട്.
വിഷലിപ്തമായ (poisoned) ഒരു റെപ്പോസിറ്ററി എങ്ങനെ കണ്ടെത്താം
ഒരു അസിസ്റ്റന്റിന് റെപ്പോസിറ്ററി നൽകുന്നതിന് മുമ്പ് ഇത് പ്രവർത്തിപ്പിക്കുക:
git config --get core.fsmonitor
ശൂന്യമല്ലാത്ത ഔട്ട്പുട്ട് ലഭിച്ചാൽ, ഒരു പ്രോഗ്രാം സ്വയമേവ പ്രവർത്തിക്കാൻ ക്രമീകരിച്ചിട്ടുണ്ടെന്ന് അർത്ഥം. കൂടുതൽ പരിശോധനയ്ക്കായി, സംശയാസ്പദമായ Git സെറ്റിംഗുകൾ പട്ടികപ്പെടുത്തുക:
git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'
നിങ്ങൾ ചേർക്കാത്ത എൻട്രികൾ കണ്ടാൽ, അവ ഇതാ ഉപയോഗിച്ച് നീക്കം ചെയ്യുക:
git config --local --unset core.fsmonitor
git config --global core.fsmonitor false എന്ന് സെറ്റ് ചെയ്യുന്നത് നിങ്ങളെ സംരക്ഷിക്കില്ല എന്ന കാര്യം ശ്രദ്ധിക്കുക. ലോക്കൽ റെപ്പോസിറ്ററി സെറ്റിംഗുകൾ എപ്പോഴും ഗ്ലോബൽ സെറ്റിംഗുകളെ മറികടക്കും, അതിനാൽ ഒരു ദുരുദ്ദേശ്യ റെപ്പോസിറ്ററിക്ക് ഗ്ലോബൽ നിയമങ്ങളെ ലളിതമായി അവഗണിക്കാനാകും.
നിലവിലെ പാച്ച് സാഹചര്യം
- Claude Code – പാച്ച് ചെയ്തു (fsmonitor)
- Cursor – പാച്ച് ചെയ്തു
- OpenAI Codex – പാച്ച് ചെയ്തു
- Goose – പാച്ച് ചെയ്തു
- Qwen Code – പാച്ച് ചെയ്തിട്ടില്ല
- Grok Build – പാച്ച് ചെയ്തിട്ടില്ല
- Hermes – പാച്ച് ചെയ്തിട്ടില്ല
പാച്ച് ചെയ്യാത്ത ഏജന്റുകൾ ഉപയോഗിക്കുന്ന ഡെവലപ്പർമാർ, ടൂളുകൾ മാറ്റുകയോ അല്ലെങ്കിൽ കർശനമായ ലോക്കൽ Git നയങ്ങൾ നടപ്പിലാക്കുകയോ ചെയ്യുന്നത് വരെ വരുന്ന ഏത് റെപ്പോസിറ്ററിയെയും അപകടകരമായി കണക്കാക്കണം.
Git കമ്മ്യൂണിറ്റിയുടെ മറുവാദം
Git-ന്റെ core.fsmonitor എന്നത് ഒരു നിയമപരമായ പെർഫോമൻസ് ഫീച്ചറാണ്, അല്ലാതെ ഒരു ബഗ് അല്ല. Git കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുന്നതിന് മുമ്പ് റെപ്പോസിറ്ററി ഉള്ളടക്കം പരിശോധിക്കേണ്ട ഉത്തരവാദിത്തം വിളിക്കുന്നവർക്കാണ് (callers) എന്ന് മെയിന്റനർമാർ വാദിക്കുന്നു. ഈ ഫീച്ചർ ഗ്ലോബലായി പ്രവർത്തനരഹിതമാക്കുന്നത് ഒരു ലളിതമായ പരിഹാരമാണ്, എന്നാൽ നേരത്തെ സൂചിപ്പിച്ചത് പോലെ, ലോക്കൽ ഓവർറൈഡുകൾ ആ സംരക്ഷണം ഇല്ലാതാക്കിയേക്കാം. AI അസിസ്റ്റന്റുകൾ എല്ലാ ബാഹ്യ Git വിളികളെയും (invocations) സാൻഡ്ബോക്സിനുള്ളിലാക്കണോ അതോ കസ്റ്റം fsmonitor ഹുക്കുകൾ അടങ്ങിയ റെപ്പോസിറ്ററികൾ പ്രോസസ്സ് ചെയ്യാൻ വിസമ്മതിക്കണോ എന്നതിനെച്ചൊല്ലിയുള്ള ചർച്ചയാണ് ഇപ്പോൾ നടക്കുന്നത്.
ഇനി ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ
- പാച്ച് ചെയ്യാത്ത AI ഏജന്റുകളിൽ നിന്നുള്ള അപ്ഡേറ്റുകൾ—പ്രത്യേകിച്ച് Git കോളുകളെ സാൻഡ്ബോക്സിംഗിനെക്കുറിച്ചുള്ള പ്രസ്താവനകൾ.
- വിശ്വസനീയമല്ലാത്ത ഡയറക്ടറികൾക്കായി Git-ന്റെ
core.fsmonitorഡിഫോൾട്ട് രീതിയിൽ ഉണ്ടാകാൻ സാധ്യതയുള്ള മാറ്റങ്ങൾ. - ഒരു അസിസ്റ്റന്റിന് ലഭിക്കുന്നതിന് മുമ്പ് റെപ്പോസിറ്ററിയുടെ
.git/configശുദ്ധീകരിക്കാൻ (sanitize) കഴിയുന്ന തേർഡ് പാർട്ടി ടൂളുകൾ.
ചുരുക്കത്തിൽ
ഒരു മറഞ്ഞിരിക്കുന്ന കോൺഫിഗർ ഫയലിലെ ഒറ്റ വരിക്ക് ഒരു AI-അധിഷ്ഠിത സൗകര്യത്തെ റിമോട്ട്-കോഡ്-എക്സിക്യൂഷൻ വെക്റ്ററിലേക്ക് (remote-code-execution vector) മാറ്റാൻ കഴിയും. ദുർബലമായ ഏജന്റുകൾ പരിഹരിക്കപ്പെടുന്നത് വരെ, സാധാരണ ക്ലോൺ വർക്ക്ഫ്ലോയ്ക്ക് പുറത്ത് വരുന്ന ഓരോ റെപ്പോസിറ്ററിയും പരിശോധിക്കുകയും (audit), ഒരു AI അസിസ്റ്റന്റ് കോഡ് സ്കാൻ ചെയ്യുന്നതിന് മുമ്പ് ഏതെങ്കിലും core.fsmonitor അല്ലെങ്കിൽ സമാനമായ ഹുക്കുകൾ നീക്കം ചെയ്യുകയും ചെയ്യുന്നതാണ് ഏറ്റവും സുരക്ഷിതമായ മാർഗ്ഗം.
