nostromo, שהקובץ שלו נקרא nhttpd, הוא שרת אינטרנט קטן שנכתב כדי להיות פשוט ולתפוס מעט. בכל הגרסאות שלפני 1.9.7, בקשת HTTP שנבנתה במיוחד מצליחה לצאת מהתיקייה שהשרת אמור להגיש ממנה, והתוצאה שהרשומה מתארת היא הרצת קוד על המכונה מרחוק. הציון הוא 9.8 מתוך 10, אין צורך בסיסמה, והחולשה נמצאת בקטלוג החולשות שידוע על ניצולן בפועל.
מה החולשה?
שרת אינטרנט מקבל בבקשה נתיב ומגיש את הקובץ שנמצא בו, מתוך תיקייה אחת שהוגדרה לו מראש. כדי שזה יישאר בטוח הוא צריך לוודא שהנתיב המבוקש אינו יוצא מהתיקייה הזאת, כי נתיב שמכיל רצף של שתי נקודות אומר תיקייה אחת למעלה, ובהצטברות הוא מוביל לכל מקום בדיסק. הבדיקה הזאת נעשית ב-nostromo בפונקציה בשם http_verify, ולפי הרשומה היא זאת שאפשר לעקוף. לטכניקה קוראים Path Traversal.
מה שהרשומה אומרת, ומה שהיא לא אומרת, שווה תשומת לב. היא קובעת שהעקיפה הזאת מגיעה עד הרצת קוד מרחוק דרך בקשת HTTP אחת, ואינה מפרטת את השלב שבין קריאת נתיב לבין הרצה. לכן מה שאפשר לומר בביטחון הוא מה שכתוב: בקשה אחת, בלי הזדהות, מריצה קוד.
הווקטור מתמחר בדיוק את זה. הפנייה מגיעה מהרשת, המורכבות נמוכה, אין דרישה להרשאות ואין דרישה לפעולה של מישהו, ושלושת סוגי הנזק, סודיות שלמות וזמינות, מסומנים כגבוהים. 9.8 הוא מה שיוצא מהשילוב.
מי מושפע?
הרשומה מתייחסת לכל גרסה של nostromo nhttpd שמתחת ל-1.9.7, כלומר 1.9.6 וכל מה שקדם לה. 1.9.7 היא הגרסה שמתקנת.
nostromo אינו שרת שרואים בארגונים גדולים. בוחרים בו כשרוצים משהו מינימלי, ולכן הוא נוטה להופיע על מכונות שהוקמו למטרה צרה אחת: שרת פנימי קטן, ממשק לכלי שמישהו כתב, מכונה שהוקמה לניסוי ונשארה. בישראל הסיכוי שהוא מותקן על עמדה בבית נמוך. הסיכוי שהוא רץ על שרת ששכחו ממנו ועדיין עונה מהאינטרנט גבוה יותר, ואלה גם המכונות שאין להן מי שיעדכן אותן.
האם מנוצלת בפועל?
כן, ובפער זמן יוצא דופן. הרשומה פורסמה באוקטובר 2019, וב-7 בנובמבר 2024 היא נכנסה לקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, רשימת החולשות שידוע שתוקפים משתמשים בהן בשטח. המועד שנקבע לתיקון בגופים הפדרליים היה 28 בנובמבר 2024.
חמש השנים האלה אינן מפתיעות כאן, כי הדרך לנצל את החולשה פורסמה בפומבי. הרשומה מפנה לפרסום בPacket Storm ולמאגר כלי ניצול ל-nhttpd. מה שהכניסה לקטלוג הוסיפה אינו ידע חדש על החולשה אלא אישור שהשימוש בה נמשך.
מה עושים?
אם יש אצלכם שרת nostromo, שדרגו אותו ל-1.9.7 או לגרסה מאוחרת יותר. יומן השינויים של הפרויקט, שבו רשומות הגרסאות, נמצא באתר של nazgul.
הקושי האמיתי בחולשה כזאת הוא לדעת שהשרת בכלל קיים. סרקו את הכתובות שבבעלותכם, כולל פורטים שאינם 80 ו-443, וראו מה עונה; כותרת Server בתשובת HTTP מגלה בדרך כלל איזה שרת יושב בצד השני. מי שמחזיק שרתים בארגון יכול לבקש מצוות התקשורת רשימה של מה שמאזין כלפי חוץ.
עד שהשדרוג נעשה, חסמו גישה מהאינטרנט אל אותו שרת והשאירו אותו נגיש מהרשת הפנימית או דרך VPN בלבד. ואם מדובר במכונה שאין לה יותר תפקיד, וזה המצב הנפוץ בשרת כזה, הצעד הנכון הוא לכבות את השירות ולא לעדכן אותו.