ഞാൻ ഒരു സെക്യൂരിറ്റി ടൂൾ നിർമ്മിച്ചു. അത് അതിൽ തന്നെ ഒരു ഗുരുതരമായ പിഴവ് കണ്ടെത്തി.
ഞാൻ ഒരു കോഡ് സെക്യൂരിറ്റി അനലൈസർ നിർമ്മിച്ചുകൊണ്ടിരിക്കുകയാണ്. ഇതിനെ ഞാൻ vibeanalyzer എന്ന് വിളിക്കുന്നു.
ലക്ഷ്യം ലളിതമാണ്. ഇപ്പോൾ പലരും "vibe-code" ചെയ്യുന്നു. അവർ AI ഏജന്റുകളെ കോഡ് എഴുതാൻ അനുവദിക്കുന്നു. കോഡ് കാണാൻ വൃത്തിയുള്ളതാണ്. ടെസ്റ്റുകൾ പാസ്സായി വരുന്നു. എന്നാൽ പ്രോജക്റ്റിനുള്ളിൽ യഥാർത്ഥത്തിൽ എന്താണുള്ളതെന്ന് ഡെവലപ്പർക്ക് അറിയില്ല.
ഞാൻ ഇതിൽ പൂർണ്ണമായും മുഴുകുന്നതിന് മുമ്പ്, പണ്ടേ ചെയ്യേണ്ടിയിരുന്ന ഒരു കാര്യം ഞാൻ ചെയ്തു. നിലവിലുള്ള ടൂളുകൾ ഇതിനകം തന്നെ ഇത് പരിഹരിച്ചിട്ടുണ്ടോ എന്ന് ഞാൻ പരിശോധിച്ചു. അവ പരിഹരിച്ചിരുന്നു. Semgrep, CodeQL, Snyk തുടങ്ങിയ ടൂളുകൾ എന്നെക്കാൾ എത്രയോ മികച്ചതാണ്.
ഞാൻ എന്റെ സ്വന്തം പ്രോജക്റ്റിൽ Semgrep പ്രവർത്തിപ്പിച്ചു. അതിന്റെ ഫലങ്ങൾ യാഥാർത്ഥ്യം ബോധ്യപ്പെടുത്തുന്നതായിരുന്നു.
എന്റെ ഡിപ്പൻഡൻസികളിൽ (dependencies) Semgrep ആറ് പ്രശ്നങ്ങൾ കണ്ടെത്തി:
• ഒരു ഹാഷ് തിരഞ്ഞെടുപ്പിലെ ചെറിയ പ്രശ്നം (cosmetic issue). • esbuild, vite എന്നിവയിൽ രണ്ട് ഉയർന്ന തീവ്രതയുള്ള (High severity) പ്രശ്നങ്ങൾ. • പാത്ത് ട്രാവേഴ്സൽ (path traversal) സംബന്ധിച്ച മൂന്ന് ഇടത്തരം തീവ്രതയുള്ള (Medium severity) പ്രശ്നങ്ങൾ. • vitest-ൽ ഒരു ഗുരുതരമായ (Critical) പ്രശ്നം.
vitest-ലെ പ്രശ്നം ഒരു പാത്ത് ട്രാവേഴ്സൽ വൾനറബിലിറ്റി (path traversal vulnerability) ആയിരുന്നു. ഇത് പ്രോജക്റ്റിന് പുറത്തുള്ള ഫയലുകൾ വായിക്കാനോ പ്രവർത്തിപ്പിക്കാനോ ഒരാളെ അനുവദിച്ചേക്കാം. ആ ഡിപ്പൻഡൻസി ഞാൻ തന്നെ ഉൾപ്പെടുത്തിയതായിരുന്നു.
ഒരു സെക്യൂരിറ്റി ടൂളിന് എങ്ങനെ ഒരു ഗുരുതരമായ പിഴവ് (critical vulnerability) ഉണ്ടാകാൻ കഴിയും?
ഉത്തരം സപ്ലൈ ചെയിൻ (supply chain) ആണ്. എന്റെ കോഡ് കൃത്യമായിരിക്കാം. എന്നാൽ ഞാൻ ഉപയോഗിക്കുന്ന ടൂളുകൾ എല്ലായ്പ്പോഴും സുരക്ഷിതമാകണമെന്നില്ല. ഒരു സെക്യൂരിറ്റി ടൂൾ നിർമ്മിക്കുമ്പോൾ പോലും എനിക്ക് ഇത് തിരിച്ചറിയാൻ കഴിഞ്ഞില്ലെങ്കിൽ, ഒരു സാധാരണ ഡെവലപ്പർക്ക് ഇത് കണ്ടെത്താൻ യാതൊരു സാധ്യതയുമില്ല.
അതുകൊണ്ടാണ് ഞാൻ ഇപ്പോഴും ഇത് നിർമ്മിച്ചുകൊണ്ടിരിക്കുന്നത്.
Semgrep പോലുള്ള നിലവിലുള്ള ടൂളുകൾ അപകടസാധ്യതകളുടെ പാറ്റേണുകൾ കണ്ടെത്തുന്നു. അവ അറിയപ്പെടുന്ന വൾനറബിലിറ്റികൾ കണ്ടെത്തുന്നു. എന്നാൽ അവയ്ക്ക് ഉദ്ദേശ്യം (intent) മനസ്സിലാക്കാൻ കഴിയില്ല. നിങ്ങളുടെ കോഡ് യഥാർത്ഥത്തിൽ എന്താണ് ചെയ്യേണ്ടതായിരുന്നു എന്ന് അവയ്ക്ക് അറിയില്ല.
ഒരു ഫംഗ്ഷൻ സുരക്ഷിതമാണെങ്കിലും, നിങ്ങളുടെ പ്രോജക്റ്റിൽ ഉണ്ടാകാൻ പാടില്ലാത്ത ഒരു പ്രശ്നം അത് പരിഹരിക്കുകയാണെങ്കിൽ അത് തിരിച്ചറിയാൻ അവയ്ക്ക് കഴിയില്ല.
ഇതിനെ ഞാൻ 'ഇൻ്റെന്റ് ഗ്യാപ്പ്' (intent gap) എന്ന് വിളിക്കുന്നു. കോഡും അതിന്റെ ലക്ഷ്യവും തമ്മിലുള്ള അകലം കൂടിയാണിത്.
Vibeanalyzer ഈ വിടവിലാണ് ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത്. പ്രോജക്റ്റിന്റെ ലക്ഷ്യത്തെക്കുറിച്ചും (intent) അത് ലക്ഷ്യമിടാത്ത കാര്യങ്ങളെക്കുറിച്ചും (non-goals) ടൂൾ നിങ്ങളോട് ചോദിക്കുന്നു. ഇത് സുരക്ഷാ വേലിക്കെട്ടുകൾ (guardrails) നിശ്ചയിക്കുന്നു. AI കോഡ് വിലയിരുത്തുമ്പോൾ, അതിന് ലക്ഷ്യം എന്താണെന്ന് അറിയാം. എന്തൊക്കെയാണ് പരിധിക്ക് പുറത്തുള്ളതെന്ന് അതിന് മനസ്സിലാകും.
ഞാൻ ഇൻ്റെന്റ് ലോഡിംഗ് (intent loading) ഭാഗം പൂർത്തിയാക്കി. എനിക്ക് അടിസ്ഥാനപരമായ TypeScript അനാലിസിസും ഫോൾഡർ സ്ട്രക്ചർ ഗ്രാഫുകളും ഉണ്ട്. അടുത്തതായി, എനിക്ക് AI ലെയർ നിർമ്മിക്കണം. ഉദ്ദേശ്യത്തിനനുസരിച്ച് (intent) കോഡിനെ ശരിക്കും വിലയിരുത്താൻ AI-ക്ക് കഴിയുമോ എന്ന് എനിക്കറിയില്ല. അത് തെറ്റായ മുന്നറിയിപ്പുകൾ (false alarms) നൽകിയേക്കാം. അത് കണ്ടെത്താനായി ഞാൻ ഇത് പരസ്യമായി (in the open) നിർമ്മിക്കും.
ഞാൻ എന്റെ ഡിപ്പൻഡൻസികൾ അപ്ഡേറ്റ് ചെയ്യുകയും അറിയപ്പെടുന്ന ബഗുകൾ പരിഹരിക്കുകയും ചെയ്തു. എന്നാൽ അറിയപ്പെടാത്ത പിഴവുകളും ലോജിക് പിശകുകളും ഇപ്പോഴുമുണ്ട്. അതുകൊണ്ടാണ് ഈ പ്രവർത്തനം തുടരുന്നത്.
ഓപ്ഷണൽ ലേണിംഗ് കമ്മ്യൂണിറ്റി: https://t.me/GyaanSetuAi
