मी एक सुरक्षा साधन (Security Tool) तयार केले. त्यातच मला एक गंभीर त्रुटी सापडली.
मी एक कोड सिक्युरिटी अॅनालाइझर (code security analyzer) तयार करत आहे. मी त्याला vibeanalyzer असे नाव दिले आहे.
याचे उद्दिष्ट साधे आहे. आता अनेक लोक "vibe-code" करतात. ते AI एजंट्सना कोड लिहून घेतात. कोड दिसायला स्वच्छ असतो. टेस्ट्स सुद्धा पास होतात. पण डेव्हलपरला प्रत्यक्षात प्रोजेक्टमध्ये काय आहे, याची काहीच कल्पना नसते.
मी पूर्णपणे यात उतरण्यापूर्वी, मला खूप आधी करायला हवे होते ते मी केले. सध्याची साधने ही समस्या आधीच सोडवत आहेत का, हे मी तपासले. आणि हो, ती सोडवत आहेत. Semgrep, CodeQL आणि Snyk सारखी साधने माझ्यापेक्षा कितीतरी पटीने चांगली आहेत.
मी माझ्या स्वतःच्या प्रोजेक्टवर Semgrep चालवले. त्याचे परिणाम पाहून मला वास्तव समजले.
Semgrep ला माझ्या डिपेंडन्सीजमध्ये (dependencies) सहा समस्या आढळल्या:
• हॅश निवडीबाबत एक किरकोळ (cosmetic) समस्या. • esbuild आणि vite मध्ये दोन 'High severity' समस्या. • पाथ ट्रॅव्हर्सलशी (path traversal) संबंधित तीन 'Medium severity' समस्या. • vitest मध्ये एक 'Critical' समस्या.
vitest मधील समस्या ही 'path traversal' असुरक्षितता (vulnerability) होती. यामुळे कोणीही प्रोजेक्टच्या बाहेरच्या फाईल्स वाचू किंवा कार्यान्वित (execute) करू शकले असते. ती डिपेंडन्सी मी स्वतः प्रोजेक्टमध्ये समाविष्ट केली होती.
एका सुरक्षा साधनात (security tool) गंभीर त्रुटी कशी असू शकते?
याचे उत्तर आहे 'सप्लाय चेन' (supply chain). माझा कोड कदाचित अचूक असेल. पण ज्या साधनांवर मी माझे काम उभे करतो, ती नेहमीच सुरक्षित नसतात. जर सुरक्षा साधन बनवताना माझ्याकडून ही चूक सुटली असेल, तर एका सामान्य डेव्हलपरला ती पकडण्याची शक्यता शून्य आहे.
म्हणूनच मी अजूनही हे काम करत आहे.
Semgrep सारखी सध्याची साधने धोक्याचे पॅटर्न शोधतात. ती ज्ञात असुरक्षितता (known vulnerabilities) शोधतात. पण त्यांना 'हेतू' (intent) समजत नाही. तुमच्या कोडचा नेमका उद्देश काय होता, हे त्यांना माहित नसते.
एखादे फंक्शन सुरक्षित असूनही, ते तुमच्या प्रोजेक्टमध्ये नसाव्या अशा समस्येचे निराकरण करत असेल, तर ती साधने ओळखू शकत नाहीत.
मी याला 'intent gap' म्हणतो. कोड आणि त्याचा उद्देश यामधील अंतर म्हणजे हा 'intent gap' आहे.
Vibeanalyzer याच अंतरावर लक्ष केंद्रित करते. हे साधन तुम्हाला प्रोजेक्टचा उद्देश (intent) आणि त्याचे 'non-goals' (जे साध्य करायचे नाहीये) विचारते. ते काही मर्यादा (guardrails) ठरवून देते. जेव्हा AI कोडचे मूल्यमापन करते, तेव्हा त्याला नेमका उद्देश माहित असतो. काय मर्यादेबाहेर आहे, हे त्याला समजते.
मी 'intent loading' चा भाग पूर्ण केला आहे. माझ्याकडे मूलभूत TypeScript अॅनालिसिस आणि फोल्डर स्ट्रक्चर ग्राफ्स आहेत. आता मला AI लेयर तयार करावा लागेल. AI खरोखरच हेतूच्या आधारे कोडचे मूल्यमापन करू शकेल की नाही, हे मला माहित नाही. कदाचित यामुळे चुकीचे इशारे (false alarms) देखील मिळू शकतात. हे शोधण्यासाठी मी हे काम सर्वांसमोर (in the open) करेन.
मी माझ्या डिपेंडन्सीज अपडेट केल्या आणि ज्ञात बग्स (bugs) दूर केले. पण अज्ञात त्रुटी आणि लॉजिकमधील चुका अजूनही असू शकतात. म्हणूनच हे काम सुरू आहे.
Optional learning community: https://t.me/GyaanSetuAi
