בניתי כלי אבטחה. הוא מצא בו חור קריטי.
אני בונה מנתח אבטחת קוד. קראתי לו vibeanalyzer.
המטרה פשוטה. הרבה אנשים כיום עושים "vibe-code". הם נותנים לסוכני AI לכתוב קוד. הקוד נראה נקי. הבדיקות עוברות. אבל למפתח אין מושג מה באמת נמצא בתוך הפרויקט.
לפני שהשקעתי את כל כולי, עשיתי משהו שהייתי צריך לעשות מזמן. בדקתי אם כלים קיימים כבר פתרו את זה. הם כן. כלים כמו Semgrep, CodeQL ו-Snyk הרבה יותר טובים ממני.
הרצתי Semgrep על הפרויקט שלי. התוצאות היו מבחן מציאות.
Semgrep מצא שש בעיות בתלויות (dependencies) שלי:
• בעיה קוסמטית אחת בבחירת hash. • שתי בעיות בחומרה גבוהה (High) ב-esbuild ו-vite. • שלוש בעיות בחומרה בינונית (Medium) הקשורות ל-path traversal. • בעיה קריטית אחת ב-vitest.
הבעיה ב-vitest הייתה פגיעות מסוג path traversal. היא הייתה מאפשרת למישהו לקרוא או להריץ קבצים מחוץ לפרויקט. אני זה שמשכתי את התלות הזו בעצמי.
איך לכלי אבטחה יכולה להיות פגיעות קריטית?
התשובה היא שרשרת האספקה (supply chain). הקוד שלי אולי ישר, אבל הכלים עליהם אני בונה לא תמיד בטוחים. אם פספסתי את זה בזמן בניית כלי אבטחה, למפתח רגיל אין שום סיכוי לתפוס את זה.
זו הסיבה שאני עדיין בונה.
כלים קיימים כמו Semgrep מוצאים דפוסים של סכנה. הם מוצאים פגיעות ידועות. אבל הם לא מבינים כוונה (intent). הם לא יודעים מה הקוד שלך באמת היה אמור לעשות.
הם לא יכולים לומר אם פונקציה היא בטוחה, אך היא פותרת בעיה שלא אמורה להתקיים בפרויקט שלך.
אני קורא לזה "פער הכוונה" (intent gap). זה המרחק בין הקוד לבין המטרה שלו.
vibeanalyzer מתמקד בפער הזה. הכלי מבקש ממך את כוונת הפרויקט ואת ה-non-goals שלו. הוא קובע מגבלות (guardrails). כשה-AI מעריך את הקוד, הוא יודע מה המטרה. הוא יודע מה חורג מהגבולות.
סיימתי את חלק טעינת הכוונה. יש לי ניתוח TypeScript בסיסי וגרפים של מבנה תיקיות. בשלב הבא, אני חייב לבנות את שכבת ה-AI. אני לא יודע אם AI באמת יכול להעריך קוד אל מול כוונה. הוא עלול פשוט ליצור התראות שווא. אני אבנה את זה בפומבי כדי לגלות.
עדכנתי את התלויות שלי וניקיתי את הבאגים הידועים. אך חורים לא ידועים ושגיאות לוגיקה נותרו. לכן העבודה נמשכת.
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi
