நான் ஒரு பாதுகாப்பு கருவியை உருவாக்கினேன். அது தனக்குள்ளேயே ஒரு முக்கியமான ஓட்டையைக் கண்டறிந்தது.

நான் ஒரு குறியீடு பாதுகாப்பு ஆய்வாளரை (code security analyzer) உருவாக்கி வருகிறேன். அதற்கு vibeanalyzer என்று பெயரிட்டுள்ளேன்.

இதன் நோக்கம் எளிமையானது. இப்போது பலர் "vibe-code" செய்கிறார்கள். அவர்கள் AI முகவர்களைக் (AI agents) கொண்டு குறியீடுகளை எழுதவிடுகிறார்கள். அந்த குறியீடு சுத்தமாகத் தெரியும். சோதனைகள் (tests) வெற்றியடையும். ஆனால் அந்தத் திட்டத்திற்குள் (project) உண்மையில் என்ன இருக்கிறது என்பது டெவலப்பருக்குத் தெரியாது.

நான் இதில் முழுமையாக இறங்குவதற்கு முன், நீண்ட காலத்திற்கு முன்பே செய்திருக்க வேண்டிய ஒன்றைச் செய்தேன். ஏற்கனவே உள்ள கருவிகள் இதைத் தீர்த்துள்ளனவா என்று சரிபார்த்தேன். அவை தீர்த்திருந்தன. Semgrep, CodeQL மற்றும் Snyk போன்ற கருவிகள் என்னை விட மிகவும் சிறந்தவை.

எனது சொந்தத் திட்டத்தில் Semgrep-ஐ இயக்கினேன். அதன் முடிவுகள் ஒரு யதார்த்தமான உண்மையை உணர்த்தின.

எனது சார்புகளில் (dependencies) Semgrep ஆறு சிக்கல்களைக் கண்டறிந்தது:

• ஒரு ஹேஷ் (hash) தேர்வில் ஒரு சிறிய தோற்றப் பிழை (cosmetic issue). • esbuild மற்றும் vite ஆகியவற்றில் இரண்டு உயர் தீவிரத்தன்மை (High severity) கொண்ட சிக்கல்கள். • பாத் டிராவர்சல் (path traversal) தொடர்பான மூன்று நடுத்தர தீவிரத்தன்மை (Medium severity) கொண்ட சிக்கல்கள். • vitest-இல் ஒரு முக்கியமான (Critical) சிக்கல்.

vitest சிக்கல் ஒரு பாத் டிராவர்சல் பாதிப்பு (path traversal vulnerability) ஆகும். இது திட்டத்திற்கு வெளியே உள்ள கோப்புகளை யாராவது படிக்கவோ அல்லது இயக்கவோ வழிவகுக்கும். அந்தச் சார்பை நானே சேர்த்திருந்தேன்.

ஒரு பாதுகாப்பு கருவியே எப்படி ஒரு முக்கியமான பாதிப்பைக் கொண்டிருக்க முடியும்?

இதற்கான பதில் சப்ளை செயின் (supply chain) தான். எனது குறியீடு நேர்மையாக இருக்கலாம். ஆனால் நான் எதன் அடிப்படையில் உருவாக்குகிறேனோ அந்தத் கருவிகள் எப்போதும் பாதுகாப்பானவை அல்ல. ஒரு பாதுகாப்பு கருவியை உருவாக்கும்போதே நான் இதைக் கவனிக்கத் தவறினால், ஒரு சாதாரண டெவலப்பரால் இதைக் கண்டறியவே முடியாது.

இதனால்தான் நான் இன்னும் உருவாக்கி வருகிறேன்.

Semgrep போன்ற ஏற்கனவே உள்ள கருவிகள் ஆபத்தான முறைகளைக் (patterns of danger) கண்டறிகின்றன. அவை தெரிந்த பாதிப்புகளைக் கண்டறிகின்றன. ஆனால் அவை நோக்கத்தைப் (intent) புரிந்துகொள்வதில்லை. உங்கள் குறியீடு உண்மையில் என்ன செய்ய வேண்டியது என்பது அவற்றுக்குத் தெரியாது.

ஒரு செயல்பாடு (function) பாதுகாப்பானதுதான், ஆனால் அது உங்கள் திட்டத்தில் இருக்கவே தேவையில்லாத ஒரு சிக்கலைத் தீர்க்கிறது என்றால், அதை அவர்களால் சொல்ல முடியாது.

இதை நான் 'நோக்க இடைவெளி' (intent gap) என்று அழைக்கிறேன். இது குறியீட்டிற்கும் அதன் நோக்கத்திற்கும் இடையிலான தூரம் ஆகும்.

Vibeanalyzer இந்த இடைவெளியில் கவனம் செலுத்துகிறது. இந்தத் கருவி திட்டத்தின் நோக்கம் மற்றும் அதன் இலக்கு அல்லாத விஷயங்களைப் (non-goals) பற்றி உங்களிடம் கேட்கிறது. இது பாதுகாப்புத் தடைகளை (guardrails) அமைக்கிறது. AI குறியீட்டை மதிப்பீடு செய்யும்போது, அதற்கு இலக்கு என்னவென்று தெரியும். எது எல்லைக்கு அப்பாற்பட்டது என்பதும் அதற்குத் தெரியும்.

நான் நோக்கத்தை ஏற்றும் (intent loading) பகுதியை முடித்துவிட்டேன். என்னிடம் அடிப்படை TypeScript பகுப்பாய்வு மற்றும் கோப்பு அமைப்பு வரைபடங்கள் (folder structure graphs) உள்ளன. அடுத்து, நான் AI அடுக்கை (AI layer) உருவாக்க வேண்டும். நோக்கத்தின் அடிப்படையில் AI-ஆல் குறியீட்டை உண்மையிலேயே மதிப்பீடு செய்ய முடியுமா என்று எனக்குத் தெரியவில்லை. அது தவறான எச்சரிக்கைகளை (false alarms) மட்டுமே உருவாக்கக்கூடும். அதைத் தெரிந்துகொள்ள நான் இதைத் வெளிப்படையாகக் கட்டமைப்பேன்.

நான் எனது சார்புகளைப் புதுப்பித்து, தெரிந்த பிழைகளைச் சரிசெய்தேன். ஆனால் தெரியாத ஓட்டைகளும் தர்க்கப் பிழைகளும் (logic errors) இன்னும் உள்ளன. அதனால்தான் இந்தப் பணி தொடர்கிறது.

Source: https://dev.to/stkremen/im-building-a-code-security-analyzer-a-security-tool-found-a-critical-in-it-4b77

Optional learning community: https://t.me/GyaanSetuAi