- בלוג
- פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE
פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE
פרצה קריטית ב-CUPS חושפת מערכות מבוססות UNIX למתקפת RCE
פורסם ב 01-10-2024
ארבע פרצות קריטיות נמצאו ב-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), הפקודה, המכילה את הקוד הזדוני, יוצאת לפועל.
CUPS, ראשי תיבות של Common Unix Printing System, היא מערכת לניהול הדפסות ומדפסות במערכות מבוססות UNIX. מאפשרת למערכת עליה היא מותקנת לתפקד כשרת מדפסות בפרוטוקול למעשה, היא IPP, וניתן לגשת אליה דרך דפדפן האינטרנט, בהפניה לשרת המארח המקומי דרך פורט 631. פשוט מקלידים בשורת הכתובת בדפדפן: localhost:631.
קובץ PPD (או Postscript Printing Description) הוא קובץ שמתאר למערכת את היכולות וההגדרות השונות של המדפסת. פונטים נתמכים, גודל דף, רזולוציית ההדפסה, DPI, קונפיגורציות, כל אלה מצויינים בקובץ PPD, ו-CUPS משתמשת בהם כדי לנהל את המדפסות שהתווספו דרכה.
ארבעת הפרצות התגלו על ידי חוקר אבטחת מידע בשם סיימון מרגריטלי (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 בעל קוד זדוני. מכאן, כל מה שהתוקף צריך כדי שהמתקפה תצליח, זה שמשתמש כלשהו במערכת ינסה לבצע הדפסה עם ה”מדפסת” שהוגדרה על ידי התוקף.
כהערת צד, נציין שמגריטלי דיווח על הפרצות למפתחי המערכות השונים לפני יותר מחודש, אבל נתקל במשך זמן מה בעיקר בהתנערות מאחריות. הוא כותב בדיווחו ל-Threat Reader (פורסם ב-23.9)שעל אף מספר הוכחות שהוא סיפק, המפתחים סירבו להכיר בכשלים שהציג, לא תייגו את הפרצות כראוי, לא הוציאו תיקונים ואף הביעו ספק שמדובר בענייני אבטחה.
לא ניכנס לדיונים על התנהלות או אגו, אבל ניתן להסכים עם מרגריטלי שזאת דוגמה כיצד לא להתנהל אל מול חשיפה של כשלי אבטחה.
איך נתגונן?
נכון לעכשיו, הפרצה תוקנה רק במערכות אובונטו.
בשביל לסגור את הפרצה, על משתמשי אובונטו לבצע עדכון למערכת ההפעלה, ולאתחל את 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.
כדאי ליישם את הצעדים הבאים בדחיפות כדי להגן על המערכות שלכם. מאחר ומדובר בפרצה קריטית ופשוטה לניצול, ומאחר ועדיין אין תיקונים לכל המערכות הפגיעות (מלבד אובונטו), התגוננות אקטיבית היא בעלת חשיבות קריטית נגד מתקפות.
לעזרה נוספת, ניתן לפנות אלינו. צור קשר