pkexec הוא כלי קטן בלינוקס שנותן למשתמש רגיל להריץ פקודות בהרשאות של משתמש מורשה יותר, לפי מה שהוגדר מראש במערכת. החולשה הזאת הופכת את הגשר המבוקר הזה למעבר חופשי: משתמש מקומי בלי הרשאות מיוחדות מגיע דרכו להרשאות root, כלומר לשליטה מלאה במכונה. הציון הוא 7.8 מתוך 10, הרשומה פורסמה בינואר 2022, והחולשה נמצאת בקטלוג החולשות שתוקפים מנצלים בפועל מאז יוני 2022.
מה החולשה?
כשמריצים תוכנה בלינוקס מעבירים לה שני דברים: רשימת ארגומנטים, כלומר הפקודה והפרמטרים שאחריה, ובנפרד את משתני הסביבה, אוסף הגדרות שמגיע מהמשתמש שהפעיל אותה. ההפרדה בין השניים היא עיקרון בסיסי. ארגומנטים הם מה שהתוכנה אמורה לעבוד עליו, ומשתני סביבה הם רק הקשר.
הבאג ב-pkexec הוא בטיפול במספר הארגומנטים שהוא מקבל. הספירה השגויה מובילה אותו בסופו של דבר לנסות להריץ את משתני הסביבה כאילו היו פקודות, וכאן ההפרדה נשברת. ערך שהמשתמש קובע בעצמו הופך למשהו שהכלי מריץ, ולכן מי שמסדר את משתני הסביבה שלו בצורה מחושבת גורם ל-pkexec להריץ קוד שהוא בחר. הסיווג הרשמי הוא CWE-787, כתיבה מחוץ לגבולות שהוקצו בזיכרון.
ומה שהופך את זה מבאג מעצבן לחולשה חמורה הוא תכונה אחת של pkexec עצמו: הוא מותקן עם סימון setuid, כלומר הוא רץ בהרשאות של משתמש מורשה גם כשמשתמש רגיל לגמרי מפעיל אותו. זה תפקידו, וזאת גם הנקודה. הקוד שהתוקף הצליח להחדיר יורש את ההרשאות האלה, ולכן התוצאה אינה הרצת קוד סתם אלא הרצת קוד בתור root.
מי מושפע?
הרשומה מציינת את polkit עצמו בכל הגרסאות שלפני 121. polkit הוא רכיב מערכת, ולכן כל הפצת לינוקס אורזת אותו בעצמה ומוציאה גרסה מתוקנת משלה.
לצד polkit מופיעה ברשומה רשימה של מוצרים שהוא מגיע בתוכם: Enterprise Linux Server Update Services for SAP Solutions בגרסאות 7.6, 7.7, 8.1, 8.2 ו-8.4, Enterprise Storage 7.0, Linux Enterprise High Performance Computing 15.0, Manager Proxy ו-Manager Server בגרסה 4.1, ו-ZFS Storage Appliance Kit. Red Hat פרסמה על כך הודעת אבטחה מסודרת, ו-Oracle כללה את התיקון בעדכון הרבעוני שלה מאפריל 2022.
מי שמושפע הוא בפועל כל מי שמריץ לינוקס על שרת או על עמדת עבודה, בישראל כמו בכל מקום. אבל חשוב להבין את גבולות החולשה, כי הם משנים את התמונה: היא מקומית. תוקף אינו יכול להפעיל אותה מהאינטרנט נגד מכונה שאין לו גישה אליה. היא נכנסת לתמונה בשלב הבא, כשיש לו כבר דריסת רגל על המכונה בתור משתמש רגיל והוא מחפש דרך למעלה. זה בדיוק מה שהופך חולשה כזאת לשימושית כל כך: הכניסה הראשונה היא בדרך כלל חשבון חלש או חולשה ביישום, ומשם צריך משהו שיהפוך משתמש מוגבל למנהל.
האם מנוצלת בפועל?
כן, והיא שם כבר שנים. החולשה נכנסה לקטלוג ה-KEV של CISA, סוכנות הסייבר האמריקאית, ב-27 ביוני 2022, והמועד שנקבע לגופים הפדרליים לתקן אותה היה 18 ביולי 2022.
מה שמעניין בה הוא לא התאריך אלא העמידות שלה. התיקון זמין כבר שנים והיא ממשיכה להופיע, והסיבות מצטברות: היא דורשת רק גישה מקומית בסיסית, היא עובדת באותו אופן על מערכות רבות ושונות, והיא אינה תלויה בתצורה מיוחדת. שרתי לינוקס גם אינם מתעדכנים תמיד באותה סדירות שבה מתעדכנת עמדת עבודה, ומכונה שהוקמה פעם אחת והמשיכה לעבוד יכולה לשבת עם polkit ישן שנים. הרשומה עצמה עודכנה לאחרונה באוגוסט 2026.
מה עושים?
1. בדקו איזו גרסת polkit מותקנת אצלכם. ברוב ההפצות הפקודה pkexec --version מדפיסה אותה.
2. ודאו שאתם על polkit 121 ומעלה, או על גרסה שההפצה שלכם סימנה כמתוקנת. זאת נקודה שמבלבלת: הפצות נוהגות להחזיר את התיקון לגרסה מוקדמת יותר בלי להעלות את מספר הגרסה של polkit, ולכן אם המספר נמוך מ-121 זה אינו בהכרח אומר שאתם חשופים. השוו למספר החבילה בעדכוני האבטחה של ההפצה שלכם.
3. התקינו את עדכוני האבטחה של ההפצה. בהפצות ממשפחת Red Hat הפקודה היא sudo dnf update polkit, ובמשפחת דביאן ואובונטו sudo apt update ואחריה sudo apt upgrade.
4. אם אי אפשר לעדכן עכשיו, קראו את המעקף הזמני שמפורט בהודעת האבטחה של Red Hat שקישורה למעלה. העיקרון שם הוא לנטרל את ההרשאה המיוחדת שבגללה הכלי רץ בהרשאות גבוהות, וזה פתרון לתווך הקצר בלבד, כי במקביל הוא מוציא את הכלי מכלל שימוש.
5. ואם מדובר במכונה שרצה בלי עדכונים זמן רב, אל תסתפקו בעדכון. חולשה שמשמשת להרחבת גישה קיימת מחייבת גם מבט אחורה: בדקו אילו חשבונות נוספו למערכת, מי התחבר אליה ומה רץ בה כרגע בהרשאות root.