שרת שמדבר HTTP/3 דרך הספרייה quiche של קלאודפלייר יכול, לפי הרשומה, להגיע למצב שבו נגמר לו הזיכרון בגלל נתונים שאף אחד לא שלח. הציון הוא 7.5 מתוך 10, הפגיעה היא בזמינות בלבד, והתיקון נמצא בגרסה 0.29.3. אין דיווח על ניצול בשטח.

מה החולשה?

נתונים שמגיעים ברשת מגיעים בחלקים. ב-HTTP/3 כל חלק כזה נקרא פריים, ולכל פריים יש כותרת קטנה שמצהירה כמה בתים עומדים לבוא אחריה. השרת קורא את ההצהרה, מבין שמתקרב מידע באורך מסוים, ומכין לו מקום בזיכרון מראש.

כאן נמצא הכשל. לפי הודעת האבטחה, בחלק מסוגי הפריימים quiche הקצתה את הזיכרון לפי האורך המוצהר ולא לפי מה שהגיע בפועל, ותוקף שמצהיר על אורך עצום אינו צריך לשלוח את הבתים עצמם כלל. ההצהרה לבדה מספיקה כדי שהשרת ישריין את המקום.

זה פער שעובד לרעת הנמען: תו אחד בכותרת מול הקצאה אמיתית בזיכרון. הסיווג הוא CWE-400, צריכה בלתי מבוקרת של משאבים.

ולחולשה יש צד שני שההודעה מתארת בנפרד. HTTP/3 דוחס את הכותרות של הבקשה בשיטה שנקראת QPACK, ולשרת יש הגדרה בשם MAX_FIELD_SECTION_SIZE שאמורה להגביל את הגודל שהכותרות האלה יכולות לתפוס אחרי שהדחיסה נפתחת. לפי ההודעה, quiche לא יישמה את ההגבלה הזאת כראוי, כך שפריים HEADERS בנוי במיוחד גורם להקצאה גדולה יותר מזו שההגדרה הכריזה עליה. מי שהגדיר את הגבול לא בהכרח קיבל אותו.

מי מושפע?

הרשומה מסמנת כחשופה כל גרסה מ-0.1.0 ועד 0.29.3, כלומר כל מה שאינו 0.29.3 ומעלה.

quiche אינה תוכנה שמישהו מתקין על מחשב, אלא ספרייה שמפתחים מכניסים לתוך מוצר. מי שמושפע הוא מי שבנה שרת, proxy או שירות שמדבר HTTP/3 ובחר בה כמימוש של הפרוטוקול. בישראל הקהל הזה אינו רחב, והוא מורכב בעיקר מצוותים שבונים תשתית רשת ושירותי ענן ולא ממשתמשי קצה.

ושווה לשים לב למה שהחולשה אינה. הדירוג מסמן שאין פגיעה בסודיות ואין פגיעה בשלמות, רק בזמינות. מידע אינו נחשף ודבר אינו משתנה. מה שקורה הוא ששרת נגמר לו הזיכרון ומפסיק לענות, וזה הפרש גדול מהשתלטות עליו.

האם מנוצלת בפועל?

אין דיווח על ניצול, והחולשה אינה מופיעה בקטלוג ה-KEV של CISA, סוכנות הסייבר האמריקאית, שמרכז את החולשות שידוע שתוקפים משתמשים בהן בשטח.

הגילוי הגיע בדרך מסודרת. ההודעה של קלאודפלייר מציינת שהחולשה נמסרה לה בגילוי אחראי בידי סבסטיאן פרי (Sébastien Féry), כלומר הפרטים הגיעו קודם אל היצרן, והתיקון היה מוכן כבר בפרסום.

מה שכן, ההודעה הפומבית מסבירה את המנגנון במדויק, ולחולשה מהסוג הזה גם אין דרישות מיוחדות: הדירוג מסמן שהתקיפה מגיעה מהרשת, בלי הרשאות ובלי שמישהו צריך ללחוץ על משהו.

מה עושים?

1. עדכנו ל-quiche 0.29.3 ומעלה. ההודעה מציינת במפורש שזו הגרסה הראשונה שמכילה את התיקון, כך שכל גרסה מתחתיה חשופה.
2. בדקו את הגרסה שבשימוש בפועל ולא את זו שרשומה אצלכם. ספרייה כזאת מגיעה לא פעם כתלות של תלות אחרת, ולכן המקום לחפש בו הוא עץ התלויות של הפרויקט אחרי בנייה.
3. אל תסתמכו על ההגבלה שהגדרתם בינתיים. ההגדרה set_max_field_section_size היא בדיוק זו שלפי ההודעה לא נאכפה כראוי בגרסאות החשופות, ולכן ערך שמרני בה אינו תחליף לשדרוג.
4. אם השירות חשוף לאינטרנט ואתם עדיין על גרסה חשופה, הסתכלו על צריכת הזיכרון של התהליך ולא רק על הלוג של האפליקציה. ניצול של החולשה הזאת נראה כקפיצה בזיכרון, ולא כבקשה שגויה שנרשמת ביומן.