لقد بنيتُ أداة أمنية، واكتشفت ثغرة حرجة في نفسها.
أنا أقوم ببناء محلل لأمن الأكواد. أطلقتُ عليه اسم vibeanalyzer.
الهدف بسيط. الكثير من الناس الآن يتبعون أسلوب "vibe-code". إنهم يتركون وكلاء الذكاء الاصطناعي يكتبون الأكواد. يبدو الكود نظيفاً، وتجتاز الاختبارات بنجاح، لكن المطور لا يملك أدنى فكرة عما يوجد فعلياً داخل المشروع.
قبل أن أندفع بكل قوتي، قمتُ بشيء كان ينبغي عليّ فعله منذ زمن طويل. تحققتُ مما إذا كانت الأدوات الموجودة قد حلت هذه المشكلة بالفعل. وقد فعلت. أدوات مثل Semgrep وCodeQL وSnyk أفضل مني بكثير.
قمتُ بتشغيل Semgrep على مشروعي الخاص. كانت النتائج بمثابة مواجهة مع الواقع.
اكتشف Semgrep ست مشكلات في التبعيات (dependencies) الخاصة بي:
• مشكلة تجميلية واحدة تتعلق باختيار الهاش (hash). • مشكلتان عاليتا الخطورة في esbuild وvite. • ثلاث مشكلات متوسطة الخطورة تتعلق بتجاوز المسار (path traversal). • مشكلة واحدة حرجة في vitest.
كانت مشكلة vitest عبارة عن ثغرة تجاوز المسار (path traversal). كان من الممكن أن تسمح لشخص ما بقراءة أو تنفيذ ملفات خارج المشروع. وقد قمتُ بسحب تلك التبعية بنفسي.
كيف يمكن لأداة أمنية أن تحتوي على ثغرة حرجة؟
الإجابة هي سلسلة التوريد (supply chain). قد يكون الكود الخاص بي صادقاً، لكن الأدوات التي أبني عليها ليست آمنة دائماً. إذا فاتني هذا الأمر أثناء بناء أداة أمنية، فإن المطور العادي ليس لديه أي فرصة لاكتشافه.
لهذا السبب ما زلتُ مستمراً في البناء.
الأدوات الموجودة مثل Semgrep تجد أنماط الخطر، وتجد الثغرات المعروفة. لكنها لا تفهم "القصد" (intent). هي لا تعرف ما الذي كان من المفترض أن يفعله الكود الخاص بك فعلياً.
لا يمكنها معرفة ما إذا كانت الدالة (function) آمنة ولكنها تحل مشكلة لا ينبغي أن تكون موجودة في مشروعك أصلاً.
أسمي هذا "فجوة القصد" (intent gap). وهي المسافة بين الكود والغرض منه.
يركز vibeanalyzer على هذه الفجوة. تطلب منك الأداة تحديد قصد المشروع وأهدافه غير المقصودة (non-goals). وتقوم بوضع حواجز حماية (guardrails). عندما يقوم الذكاء الاصطناعي بتقييم الكود، فإنه يعرف الهدف، ويعرف ما هو خارج الحدود.
لقد انتهيتُ من جزء تحميل القصد. لدي الآن تحليل أساسي لـ TypeScript ورسوم بيانية لهيكل المجلدات. الخطوة التالية هي بناء طبقة الذكاء الاصطناعي. لا أعرف ما إذا كان بإمكان الذكاء الاصطناعي تقييم الكود حقاً بناءً على القصد، فقد يتسبب فقط في إنذارات كاذبة. سأقوم ببنائه بشكل علني (in the open) لمعرفة ذلك.
قمتُ بتحديث التبعيات الخاصة بي وإصلاح الأخطاء المعروفة. لكن الثغرات غير المعروفة والأخطاء المنطقية لا تزال قائمة. لهذا السبب يستمر العمل.
Optional learning community: https://t.me/GyaanSetuAi
