פגיעות של PolKit אפשרה גישה לבסיס ברוב ההפצות של לינוקס

לאחרונה קוואליס פרסמה את הידיעה כי זיהה פגיעות (CVE-2021-4034) en רכיב מערכת פולקיט (לשעבר PolicyKit), המשמש בהפצות כדי לאפשר למשתמשים שאינם מורשים לבצע פעולות הדורשות זכויות גישה מוגברות.

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

מוזכר ש הבעיה קיימת בכלי השירות pkexec הכלול ב-PolKit, שמגיע עם דגל השורש של SUID ונועד לבצע פקודות עם הרשאות של משתמשים אחרים לפי כללי PolKit.

עקב טיפול שגוי בטיעונים משורת הפקודה שעברה ל-pkexec, א משתמש שאינו בעל הרשאות יכול לעקוף את האימות ולהפעיל את הקוד שלך כשורש, ללא קשר לכללי הגישה שנקבעו. להתקפה, לא משנה אילו הגדרות והגבלות מוגדרות ב-PolKit, מספיק שתכונת השורש SUID מוגדרת עבור קובץ ההפעלה עם כלי השירות pkexec.

Pkexec לא בודק תקינות מתוך ספירת הארגומנטים של שורת הפקודה (argc) שעברה בעת התחלת תהליך. מפתחי pkexec הניחו שהערך הראשון במערך argv מכיל תמיד את שם התהליך (pkexec), והערך השני הוא NULL או שם הפקודה המבוצעת באמצעות pkexec.

מכיוון שספירת הארגומנטים לא הושוו לתוכן בפועל של המערך והנחה אותה היא תמיד גדולה מ-1, אם מערך argv ריק הועבר לתהליך, מה שפונקציית execve של לינוקס מאפשרת, pkexec התייחס ל-NULL כארגומנט הראשון ( process name), והבא אחרי מחוץ לזיכרון המאגר, כתוכן המערך הבא.

הבעיה היא שאחרי מערך argv בזיכרון נמצא מערך envp שמכיל את משתני הסביבה. לפיכך, עם מערך argv ריק, pkexec מחלץ את הנתונים על הפקודה המתבצעת עם הרשאות מוגברות מהאלמנט הראשון של המערך עם משתני סביבה (argv[1] הפך זהה ל-envp[0]), שניתן לשלוט בתוכן שלו על ידי התוקף.

לאחר קבלת הערך argv[1], pkexec מנסה לקבוע את הנתיב המלא לקובץ ההפעלה באמצעות נתיבי הקובץ ב-PATH וכותבת את המצביע למחרוזת עם הנתיב המלא בחזרה ל-argv[1], מה שמוביל להחלפת הערך גם של משתנה הסביבה הראשון, שכן argv[1] זהה ל-envp[0]. על ידי מניפולציה של השם של משתנה הסביבה הראשון, תוקף יכול להחליף משתנה סביבה אחר ב-pkexec, למשל, להחליף את משתנה הסביבה "LD_PRELOAD", שאינו מותר בתוכניות suid, ולגרום לתהליך לטעון את הספרייה המשותפת שלו בתהליך. .

ניצול העבודה משתמש בהחלפת משתנים ב-GCONV_PATH, אשר משמש לקביעת הנתיב לספריית המרת קידוד הסמלים הנטענת באופן דינמי כאשר נקראת הפונקציה g_printerr() אשר משתמשת ב- iconv_open() בקוד שלה.

על ידי הגדרה מחדש של הנתיב ב-GCONV_PATH, התוקף יכול להצליח לטעון לא את ספריית iconv הרגילה, אלא את הספרייה שלו, שמנהלי ההתקן שלה יבוצעו במהלך הודעת השגיאה בשלב שבו pkexec עדיין פועל כ-root ולפני אימות ההפעלה הרשאות.

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

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

Polkit זמין גם עבור מערכות BSD ו- Solaris, אך לא נחקר לצורך ניצול. מה שידוע הוא שלא ניתן לבצע את ההתקפה ב-OpenBSD, שכן ליבת OpenBSD אינה מאפשרת העברת ערך argc null בעת קריאה ל-execve().

הבעיה קיימת מאז מאי 2009 כאשר נוספה הפקודה pkexec. התיקון של הפגיעות ב-PolKit עדיין זמין כתיקון (גרסת התיקון לא נוצרה), אך מכיוון שמפתחי ההפצה קיבלו הודעה על הבעיה מראש, רוב ההפצות פרסמו עדכון במקביל. של מידע על פגיעות.

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


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.