שימוש ב-AI כדי למצוא באגים של הרשאות (Authorization)
תוכניות Bug bounty משתנות. חלק מהתוכניות הפסיקו לשלם פרסים. אחרות קיצצו את התשלומים ב-80%. הסיבה היא לא ש-AI מוצא יותר מדי באגים. הסיבה היא ש-AI מוצא יותר מדי באגים שגויים. צוותי Triage טובעים בדיווחים באיכות נמוכה.
בסביבה כזו, המיומנות החשובה ביותר היא לא למצוא באגים. היא להוכיח שבאג מסוים אינו קיים. עליך למצוא את השליליים (negatives) הנכונים.
אני משתמש בשיטה דו-שלבית עבור יעדים עם קוד זמין (source-available).
Stage 1: Fan-out השתמש במודלי AI זולים כדי לקרוא את הקוד. חלק את היעד לחלקים קטנים. בקש מהמודל למצוא אינווריאנטים (invariants) שבורים. חפש מקומות שבהם אובייקט נטען ללא בדיקת בעלים (owner check) או מקום שבו שער אבטחה נדלג עליו. שאף ל-recall גבוה. צפה להרבה טעויות.
Stage 2: Adversarial Verification השתמש במודל יקר בעל יכולת הסקה (reasoning) גבוהה כדי לסלק את המועמדים. הנח שכל מועמד מופרך. מועמד שורד רק אם תוכל לצטט שורות קוד ספציפיות. עליך להוכיח שהנתיב נגיש וששום בדיקה אחרת אינה חוסמת אותו.
הפלט בעל הערך הרב ביותר הוא רשימת הפרכות (refutations). רשימה זו בונה אמון מול צוותי ה-triagers.
בדקתי את Ory Kratos, שרת זהות בקוד פתוח. בחנתי את תהליך ההגדרות (settings flow). אזור זה מטפל בשינויי סיסמה ועדכוני אימייל. טעות אחת כאן מובילה להשתלטות על חשבון (account takeover).
השלב הראשון מצא באג מפתה. באסטרטגיית ה-OIDC, קונטיינר ספציפי חסר קישור זהות (identity binding). אם היית מחפש רק בדיקות חסרות, היית מדווח על כך כבאג בחומרה גבוהה.
זו הייתה טעות.
הקישור החסר אינו ניתן לניצול (exploitable). המערכת מקבלת את זהות היעד מ-session cookie חי או מ-token חתום. מאפייני הקונטיינר לעולם לא חלים על יעד הכתיבה בפועל. העיצוב עומד במבחן.
דיווח על כך היה מבזבז זמן ופוגע באמינות שלך. הערך שסיפקתי היה הביטחון לא להגיש דיווח.
כשעשיתי שימוש באותה שיטה על יעד אחר, מצאתי באג אמיתי. נקודת כניסה חלופית החמיצה בדיקת הרשאה שהנתיב הראשי אכפת לו ממנה. משתמש שבוטלה הרשתו עדיין יכול היה להיכנס דרך "דלת אחורית". הבאג הזה היה בעל השפעה גבוהה ובלתי נראה לסורקים סטנדרטיים.
שומרי הסף בונים חומות נגד נפח (volume). כדי להצליח, עבודת ה-AI שלך חייבת להיות קפדנית. השתמש ב-AI כדי לקרוא יותר קוד מכפי שאדם יכול. לאחר מכן, השתמש ב-AI כדי להוכיח שאתה טועה לפני שאתה לוחץ על "שלח".
התמקד באות (signal), לא בנפח (volume).
