• בלוג
  • פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE

פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE

    פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE

    פורסם ב 01-10-2024

    information-security

    ארבע פרצות קריטיות נמצאו ב-CUPS, חלק מרכיב OpenPrinting המצוי בלא מעט מערכות מבוססות UNIX.
    בין המערכות הפגיעות: ArchLinux, Debian, Ubuntu, Fedora, Red Hat Enterprise Linux (RHEL), FreeBSD, NetBSD, OpenBSD, openSUSE, and SUSE Linux ואפילו MacOS ו-ChromeOS.

    שימוש בפרצות יכול לאפשר למשתמש לא מאומת (תוקף פוטנציאלי) לבצע הוצאה לפועל של קוד מרחוק (RCE – Remote Code Execution). זאת, באמצעות החלפת קובץ ה-url של מדפסת הפועלת בפרוטוקול IPP (פרוטוקול הדפסה דרך האינטרט – Internet Printing Protocol) או על ידי התקנת קובץ PPD חדש. ברגע שמשימת הדפסה מתקבלת (מהמחשב עליו מותקן קובץ ה-PPD), הפקודה, המכילה את הקוד הזדוני, יוצאת לפועל.

    ככה נראה חלק מקובץ PPD של מדפסת לקסמרק C524.
    מתוך קובץ PPD של מדפסת Lexmark

    ארבעת הפרצות התגלו על ידי חוקר אבטחת מידע בשם סיימון מרגריטלי (Simon Margaritelli). הן תוייגו כ-CVE-2024-47176 ,CVE-2024-47175 ,CVE-2024-47076 ו- CVE-2024-47177, ואומתו על ידי מפיצות גדולות כמו Canonical ו-RedHat. למעשה, לטענתו של מרגריטלי, הפרצות קיימות בהפצות השונות כבר בערך 10 שנים (!!!), מה שמעלה את הסיכוי שמתישהו, על ידי מישהו, הן נוצלו בהצלחה.
    על איך הפרצות התגלו, על תהליך הגילוי ועל איך הן עובדות בדיוק, ניתן לקרוא בבלוג של מרגריטלי (שימו לב שמדובר בחלק א’ בלבד).

    הפרצות בנפרד וכמכלול

    CVE-2024-47076: נמצאת בספריית libscupsfilters. הספריה לא מסננת או מטהרת תכונות (attributes) כאשר הן נכתבות לקובץ PPD זמני. בשל כך, התוקף יכול להחדיר נתונים זדוניים לקובץ ה-PPD הזמני.
    CVE-2024-47175: קיימת בספריית libppd, המכילה פונקציות שונות הקשורות ל”התמודדות” עם מדפסות באמצעות קבצי PPD.
     פונקציית ppdCreatePPDFromIPP2 לא מבצעת ווידוא או טיהור של תכונות התקשורת בפרוטוקול IPP כאשר הן נכתבות לקובץ ה-PPD. כך, יכול התוקף להחדיר אליו נתונים זדוניים.
    CVE-2024-47176: פרצה בשירות cups-browsed, האחראי על איתור מדפסות ברשת. הכשל בשירות מצוי בכך שהוא “סומך” על כל חבילת נתונים (packet) מכל מקור דרך פורט UPD 631. הוא שולח בעקבות זאת בקשת IPP של Get-Printer-Attributes לכתובת ה-url הנשלטת על ידי התוקף.
    CVE-2024-47177: הפרצה מצויה בחבילת הקבצים cups-filters בפונקציית foomatic-rip, ומאפשרת הוצאה לפועל של פקודה שרירותית (או ACE – חולשה המאפשרת לתוקף להריץ כל פקודה או קוד לבחירתו על המערכת או התהליך הנמצאים תחת התקפה). פעולה זאת מתבצעת דרך פרמטר FoomaticRIPCommandLine בקובץ ה-PPD.

    ניתן לנצל את הפרצות האלה בשתי דרכים:
    האחת היא דרך רשת איזורית (WAN) כולל האינטרנט: כל שהתוקף צריך לעשות הוא לשלוח מנת מידע (Datagram) דרך פורט 631 כדי לרשום על המחשב המארח מדפסת חדשה עם קובץ PPD זדוני (או להחליף את הקובץ של מדפסת קיימת). מאחר ואין שום הגנה על פורט 631, גם בידי cups-browsed שאמור לנהל אותו, ניתן להשיג את התוצאה הרצויה די בקלות.
    השניה היא דרך הרשת המקומית (LAN), באמצעות פרוטוקול mDNS – הכוללת רישום אוטומטי של מדפסת או החלפת קובץ PPD של מדפסת קיימת. גם אפשרות זו משתמשת בפרוטוקול 631 דרך cups-browsed daemon.

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

    איך נתגונן?

    נכון לעכשיו, הפרצה תוקנה רק במערכות אובונטו.
    בשביל לסגור את הפרצה, על משתמשי אובונטו לבצע עדכון למערכת ההפעלה, ולאתחל את CUPS באמצעות הפקודה הבאה:
    sudo systemctl restart cups.service

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

    ראשית, יש לבדוק אם שירות cups-browsed פעיל: sudo systemctl status cups-browsed
    אם הוא פעיל (סטטוס active), יש לעצור אותו: sudo systemctl stop cups-browsed
    ומומלץ גם לבטל את האופציה שיפעל מחדש לאחר אתחול: sudo systemctl disable cups-browsed
    אם אתם לא משתמשים בשירות, מומלץ להסיר אותו לחלוטין: sudo apt remove cup

    שנית, השתמשו בפיירוול שלכם כדי לחסום תקשורת דרך פורט UPD 631. למעשה, מרגריטלי ממליץ לחסום את כל התקשורת העוברת דרך פרוטוקול DNS-SD.

    השותפים שלנו

    Skip to content