שתי שכבות הגנה בוחנות את הקוד עצמו: סריקת קוד מריצה כללים קבועים על כל שינוי ועל הענף המוגדר כברירת מחדל, ו סקירת אבטחה על בקשות משיכה בודקת את בעיות האבטחה שהCoroid Review מעלה לפני שאחת מהן תוכל לגרום לכישלון של pull request.
סריקת קוד
הכללים של Coroid
מחלקת האבטחה אחראית על כללים אלו. הם היו חלק ממנגנון האנטי-סלופ בבקרת איכות וכעת נמצאים כאן, כך שלכל אחד יש מקום אחד:
| כלל | מחפש |
|---|---|
security.hardcoded-secret | פרטי אימות שנכתבו לתוך הקוד. ראה סודות שנחשפו. |
security.tls-disabled | אימות תעודת TLS כבוי. |
security.auth-removed | מנגנוני אימות או הרשאות, דקורטורים או מידלווייר שהוסרו או נמחקו מהקוד. |
security.cors-wildcard-credentials | אפשרות גישה מכל מקור יחד עם פרטי אימות. |
security.sql-concat | שאילתות SQL שנוצרו משרשראות תווים משתנות ונמסרו לפונקציית שאילתה. |
security.eval | קוד שמופעל מתוך קלט: eval, new Function, ללא טיהור dangerouslySetInnerHTML. |
security.remote-script-exec | סקריפטים שנטענו מורצים ישירות לתוך מעטפת או מפרשן. |
security.policy-changed | שינויים בהגדרות הסורק. ראה אמצעי הגנה ואכיפה. |
deps.nonexistent | תלויות חדשות שאינן קיימות ברישום שלהן. |
deps.known-malicious | תלויות חדשות עם אזהרה על חבילה זדונית. |
deps.suspicious-new | תלויות חדשות שפורסמו לפני פחות מ-30 יום, עם מספר הורדות נמוך מאוד, ששמן דומה בשלב אחד או שניים לשם של חבילה פופולרית, או שיש להן שינוי לאחרונה במפתחי התחזוקה. |
deps.install-script | תלויות npm חדשות שמריצות סקריפט בעת התקנה. |
כללי היגיינת תלויות, גרסאות לא מקובעות וסטייה בין קובץ המניפסט לקובץ הנעילה – נשארים בבקרת איכות יחד עם מנגנון האנטי-סלופ. ראה אנטי-סלופ.
הכללים מופעלים על שינויים, באותה סריקה כמו בדיקת האנטי-סלופ של בקרת איכות, ועל הענף המוגדר כברירת מחדל בכל פעם שנדחף קוד ופעם ביום, בין אם מנגנון האנטי-סלופ פעיל ובין אם לא. מחלקת האבטחה, ולא ההגדרות של האנטי-סלופ, קובעת את פעולת כל כלל. בקטגוריית אבטחה → הגדרות → סריקת קוד מופיעים כל הכללים. עד שסריקת הקוד תאכוף את הכללים, כל כלל ימשיך לפעול כפי שנקבע בבקרת איכות – כך שכלל שנקבע לחסום ימשיך לחסום.
פקודת הסריקה שלך
אם לפרויקט שלך כבר יש סורק אבטחה, הזן את הפקודה שלו תחת
פקודת הסריקה שלך בסריקת קוד. הפקודה מופעלת כבדיקת
security_scan עבור כל שינוי. השאר את השדה ריק כדי לכבות את הפונקציונליות.
תוצאות מכלים חיצוניים כמו SonarQube, Snyk או Semgrep יכולות גם הן להגיע לCoroid כראיות לסקירה. ראה ספקי ראיות לסקירה.
סקירת אבטחה על בקשות משיכה
Coroid Review מבצע סקירה של בקשות משיכה בבקרת איכות. כשהוא מזהה בעיית אבטחה, הוא אינו רושם אותה כטקסט בדו״ח הסקירה. הוא מדווח על הבעיה כטענה מובנית: סוג הפגיעות, הקובץ והשורות הרלוונטיות, ורמת החומרה. מחלקת האבטחה רושמת כל טענה כך: עדיין לא אושרה.
הבדיקה העצמאית
עבור טענות ברמת חומרה קריטית וגבוהה, Coroid מבצע בדיקה עצמאית: מודל נפרד ומוגבל שבוחן את הקובץ שצוין בטענה, בגרסה העדכנית ביותר של pull request, ונדרש לגלות את הבעיה בעצמו. אם הוא אכן מגלה אותה, הטענה הופכת לממצא סטטי מאומת. אם הקוד שקובע את קיום הבעיה נמצא בקובץ אחר, הבדיקה אינה יכולה לאשר את הטענה, והיא נשארת ללא אישור.
הבדיקה צורכת את הזכויות של הארגון שלך כמו כל פעולה של מודל אחר, בתוך מגבלות קבועות לכל pull request. כשהזכויות או השעות נגמרות, הבדיקה אינה מתבצעת, והסקירה מציינת: "לא ניתן היה לאמת בעיית אבטחה אפשרית: זכויות הארגון או שעות העבודה אזלו."
מה גורם לכישלון הסקירה
| התבונן | אכוף | |
|---|---|---|
| טענה מאומתת ברמת חומרה שווה או גבוהה מהסף (גבוהה כברירת מחדל) | ניטרלי, "ממצא מאומת" | הבדיקה של Coroid Review נכשלת, "ממצא מאומת" |
| טענה שאינה מאומתת | לעולם לא נכשלת | לעולם לא נכשלת |
טענה מאומתת וברמת חומרה קריטית או גבוהה תגרום לכישלון של Coroid Review גם כשהסקירה מוגדרת כייעוצית בבקרת איכות. זו החריגה היחידה לכך שסקירות ייעוציות לעולם אינן נכשלות. סקירה שדורשת שינויים רק בגלל טענות אבטחה שאינן מאומתות נחשבת לייעוצית.
סקירת האבטחה דורשת שCoroid Review יהיה פעיל עבור הפרויקט. כשCoroid Review כבוי, השורה שלו בקטגוריית אבטחה → הגדרות תציין זאת.
מה מגיע לGitHub
לפני שכל טקסט ביקורת, תגובה או בדיקה מגיעים ל־GitHub, הם עוברים את שער הפרסום. במאגר ציבורי, או במאגר שהנראות שלו אינה ידועה ל־Coroid, בעיה אבטחתית שאינה ציבורית מוחלפת במשפט "Coroid זיהה בעיה אבטחתית אפשרית; הפרטים נמצאים ב־Coroid", יחד עם קישור. ראו גילוי מידע.