זה הכלי שעזר לנו לגלות לא פחות מ-14 חולשות אבטחה בתוכנת BusyBox הפופולרית

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

החולשה המרכזית שנמצאה מתרחשת באלגוריתם הדחיסה LZMA (צילום: Dreamstime)

מאת שחר מנשה, Senior Director Security Research ב-JFrog; שרון בריזינוב, Vulnerability Research Team Lead ב-Claroty

BusyBox היא כנראה התוכנה הכי נפוצה שקיימת בעולם ה-Embedded Linux. התוכנה, שמכונה “האולר השוויצרי של Embedded Linux”, היא בעצם קובץ בודד שמכיל בתוכו מגוון רחב מאוד של יישומונים (Applets) המממשים פקודות לינוקס ידועות כגון ls ,cp ,grep ואחרות. בעולם האמבדד, בו חשוב לשמור על מערכת קבצים פשוטה וקטנה, יש יתרון בשימוש ב-BusyBox מפני שניתן לקבל פונקציונליות רבה על ידי הכללה של קובץ בינארי בודד (במקום הכללה של המון בינארים נפרדים והתלויות שלהם). כמו כן, BusyBox יכולה גם לספק פונקציונליות מתקדמת כמו שרת ווב (HTTP) וממשק Shell מלא, עם מאמץ מינימלי מצד מפתח הקושחה. אך מחקר שביצענו לאחרונה חשף לא פחות מ-14 חולשות אבטחה ב-BusyBox, שעלולות לסכן משתמשים רבים (הטבלה המלאה מטה).

בדיקת מדגם שביצענו על קושחות לינוקס ממקורות פומביים גילתה ש-40% מכלל הקושחות מושפעות לפחות מאחת החולשות, ללא קשר לסוג המכשיר שהקושחה מותקנת עליו. רוב החולשות נצילות רק במקרים יחסית נדירים, אבל כאשר מתקיימים התנאים לכך הנזק עלול להיות רציני – הרצת קוד או דליפת מידע. באופן ספציפי, תנאי הנצילות הכי סביר הוא עבור החולשה CVE-2021-42374 – שימוש ב-BusyBox על מנת לפתוח קובצי ארכיון שמסופקים על ידי התוקף, לדוגמה באמצעות אחד מהכלים האלה – unzip ,rpm ,dpkg ,lzma ,man או tar. במקרה כזה התוקף יוכל לבצע הדלפת מידע שיכולה לשמש כעזר לתקיפה נוספת, או להדלפה של מידע פרטי.

CVSS v3.1ImpactAffected versions (inclusive)Affected appletDescriptionCVE ID
6.5DoS & InfoLeak1.27.0 - 1.33.1 lzma/unlzma and more (see below)An out-of-bounds heap read in unlzma leads to information leak and denial of service when crafted LZMA-compressed input is decompressed. This can be triggered by any applet/format that internally supports LZMA compression.CVE-2021-42374

מתודולגיית המחקר

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

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

ניתוח הסיכונים

כחלק מהמחקר ביצענו ניתוח סיכונים באמצעות סריקה אוטומטית של 10 אלף קושחות שנמצאות בצורה פומבית באינטרנט. המסקנות הן שברוב המקרים החולשות לא מהוות סיכון קריטי, מהסיבות הבאות:

1. חולשות ההקרסה בדרך כלל לא גורמות לקריסה של תהליך האב.
2. חולשות הדלפת המידע רלוונטיות רק במקרים מסוימים (נפרט בהמשך).
3. לא חקרנו לעומק את ניצול חולשות ה-Use After Free בהקשרי הרצת קוד, למרות שתיאורטית הדבר בהחלט אפשרי. בנוסף, המקרים בהם החולשות אמורות להיות רלוונטיות אינם שכיחים.

הנה כמה פרטים טכניים על ניצול CVE-2021-42374: החולשה שנמצאה מתרחשת באלגוריתם הדחיסה LZMA שמומש על ידי BusyBox. הדוחס משתמש במילון ובמבנה נתונים בשביל לבנות את הפלט הדחוס, שמורכב מסימבולים בינאריים ורפרנסים לסימבולים האלו – מה שמקטין את הפלט המקורי על ידי התייחסות מקוצרת לסימבולים. פורמט ה-LZMA מורכב מתחילית באורך 13 בתים, ואחריה המידע הדחוס. הנה דוגמה קצרה של דחיסת המחרוזת “abc”:

החולשה עצמה נגרמת בגלל בדיקת גודל לא נכונה בפונקציה unpack_lzma_stream:

while (global_pos + buffer_pos < header.dst_size) {
    ...
    uint32_t pos;

    pos = buffer_pos - rep0;
    if ((int32_t)pos < 0)           // Insufficient check
        pos += header.dict_size; 	// dict_size is user-controlled
    match_byte = buffer[pos]; 	// Read OOB may occur here
    do {
        int bit;

        match_byte <<= 1;
        bit = match_byte & 0x100;
        ...

אפשר לראות שבבדיקת הגודל המשתנה pos, גם אחרי פעולת ההוספה המשתנה יכול להישאר שלילי. זה בדיוק מה שגורם לגלישת Buffer under read בשורה הבאה.

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

כהוכחה לכך כתבנו PoC שמייצר קובץ ZIP זדוני שגורם להקרסה ברגע שמנסים לחלץ אותו עם BusyBox:

למרות שניתוח הסיכונים שלנו לא מצא כרגע מקרה ישיר נפוץ בהן החולשות הנצילות, אנחנו מאוד ממליצים לשדרג את BusyBox לגרסה 1.34.0. יש לכך שתי סיבות: הראשונה – במקרים נדירים יותר ניתן להשתמש בחולשות להרצת קוד, והשנייה – התוכנה עצמה כל כך נפוצה, שייתכן שחוקרי אבטחה אחרים (עם אג’נדה זדונית) ישימו להם למטרה למצוא דרך לנצל את החולשות האלו גם במקרים ש-BusyBox מותקנת בצורה דיפולטית.

רשימת החולשות המלאה ב-BusyBox

CVSS v3.1ImpactAffected versions (inclusive)Affected appletDescriptionCVE ID
5.1DoS1.33.0-1.33.1manA NULL pointer dereference in man leads to denial of service when a section name is supplied but no page argument is givenCVE-2021-42373
6.5DoS & InfoLeak1.27.0 - 1.33.1 lzma/unlzma and more (see below)An out-of-bounds heap read in unlzma leads to information leak and denial of service when crafted LZMA-compressed input is decompressed. This can be triggered by any applet/format that internally supports LZMA compression.CVE-2021-42374
4.1DoS1.33.1ashAn incorrect handling of a special element in ash leads to denial of service when processing a crafted shell command, due to the shell mistaking specific characters for reserved characters. This may be used for DoS under rare conditions of filtered command input.CVE-2021-42375
4.1DoS1.16-1.31.1hushA NULL pointer dereference in hush leads to denial of service when processing a crafted shell command, due to missing validation after a \x03 delimiter character. This may be used for DoS under very rare conditions of filtered command input.CVE-2021-42376
6.4DoS & Possible RCE1.33.0-1.33.1hushAn attacker-controlled pointer free in hush leads to denial of service and possible code execution when processing a crafted shell command, due to the shell mishandling the &&& string. This may be used for remote code execution under rare conditions of filtered command input.CVE-2021-42377
6.6DoS & Possible RCE1.16-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the getvar_i functionCVE-2021-42378
6.6DoS & Possible RCE1.18-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the next_input_file functionCVE-2021-42379
6.6DoS & Possible RCE1.28-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the clrvar functionCVE-2021-42380
6.6DoS & Possible RCE1.21-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the hash_init functionCVE-2021-42381
6.6DoS & Possible RCE1.26-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the getvar_s functionCVE-2021-42382
6.6DoS & Possible RCE1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the evaluate functionCVE-2021-42383
6.6DoS & Possible RCE1.18-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the handle_special functionCVE-2021-42384
6.6DoS & Possible RCE1.16-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the evaluate functionCVE-2021-42385
6.6DoS & Possible RCE1.16-1.33.1awkA use-after-free in awk leads to denial of service and possibly code execution when processing a crafted awk pattern in the nvalloc functionCVE-2021-42386

הכתבה בחסות JFROG

JFROG שמה לעצמה כמשימה לעמוד מאחורי כל עדכוני התוכנה בעולם. חזון החברה הוא לאפשר "תוכנה נוזלית" (Liquid Software) הזורמת בצורה מהירה, רציפה ומאובטחת של קבצים בינאריים מהתוכניתן עד לנקודות הקצה.

פלטפורמת ה- DevOps של החברה מספקת מענה מקצה לקצה, תוך מתן כלים ופתרונות הנדרשים מארגונים מודרניים. הפלטפורמה של JFrog הינה היברידית, אוניברסלית, מתאימה לסביבת ענן וזמינה כשירות ניהול עצמי ושירות SaaS ב- AWS, Microsoft Azure ו - Google Cloud.

כתב אורח

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

הגב

3 תגובות על "זה הכלי שעזר לנו לגלות לא פחות מ-14 חולשות אבטחה בתוכנת BusyBox הפופולרית"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
ינון
Guest

מעניין. תודה!

עברי
Guest

וואו קשה לקרוא מאמר כזה בעברית. התוקף יוכל לבצע הדלפת מידע, הקרסה… ומצד שני צורם לי לקרוא “דיפולטית”

תלמיד תיכון
Guest

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

wpDiscuz

תגיות לכתבה: