העדכון שאתם לא יכולים להרשות לעצמכם לדלג עליו: סוף התמיכה ב-Office 2016 ו-Office 2019

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

ניתוח אבטחה של Rack Ruby Framework: CVE-2025-25184, CVE-2025-27111 ו-CVE-2025-27610

עַל יְדֵי OPSWAT
שתף את הפוסט הזה

באמצעות ניתוח אבטחה מקיף שבוצע על ידי OPSWAT חוקרי האבטחה Thai Do ו-Minh Pham של חברת Red Team זיהו מספר פגיעויות המשפיעות על מסגרת Rack Ruby, ובפרט CVE-2025-25184 , CVE-2025-27111 ו- CVE-2025-27610 .  

מאמר זה מספק סקירה מפורטת של פגיעויות אלו, עם דגש מיוחד על CVE-2025-27610. הוא בוחן את גורמי השורש, מעריך השפעות אפשריות ומתאר אסטרטגיות יעילות להפחתת הסיכון לאבטחת יישומים המסתמכים על מסגרת Rack. 

סקירה כללית של מתלה

Rack הוא ממשק מודולרי המחבר שרתי אינטרנט ליישומי אינטרנט מבוססי Ruby. הוא מתקן את האינטראקציה בין רכיבים אלה על ידי עטיפת בקשות ותגובות HTTP לקריאה אחת לשיטה, מפשט את תהליך הפיתוח ומקדם תאימות בין מסגרות ושרתים שונים.  

Rack משמשת מסגרות אינטרנט וספריות רבות של Ruby, כגון Ruby on Rails ו-Sinatra. הוא זמין כ-Ruby Gem. האימוץ הגלובלי הנרחב של Rack, עם יותר ממיליארד הורדות ברחבי העולם, מדגיש את תפקידו המרכזי במערכת האקולוגית של פיתוח Ruby. רכיבי תוכנה כגון Rack::Static ו-Rack::Sendfile משפרים את היעילות על ידי טיפול באספקת תוכן סטטי ואופטימיזציה של העברת קבצים. עקב שילוב נרחב זה, פגיעויות שהתגלו בתוך Rack מציגות השלכות אבטחה משמעותיות, שעלולות להשפיע על יישומים ומערכות רבים ברחבי העולם. 

גילוי פגיעויות אבטחה במדף

במהלך מחקר אבטחה שנערך לאחרונה על מסגרת תוכנת הביניים של Rack, OPSWAT החוקרים תאי דו ומין פאם זיהו מספר פגיעויות המהוות סיכוני אבטחה משמעותיים ליישומי אינטרנט מבוססי רובי:

  • CVE-2025-25184: חברת Thai Do גילתה פגיעות המאפשרת לתוקפים לבצע הזרקת יומנים באמצעות תווי CRLF (Carriage Return Line Feed), ובכך עשויה לתמרן רשומות יומן. 
  • CVE-2025-27111: מין פאם חשף פרצת אבטחה, המאפשרת לתוקפים להחדיר ולתפעל תוכן יומן באמצעות ערכי כותרת זדוניים. 
  • CVE-2025-27610: מין פאם זיהה גם פגיעות של Path Traversal, אשר עלולה לאפשר לתוקפים לקבל גישה בלתי מורשית לקבצים הממוקמים מחוץ לספריית הקבצים הסטטית הייעודית, מה שמהווה איום אבטחה משמעותי.

מבין הפגיעויות הללו, CVE-2025-27610 חמורה במיוחד, שכן היא עלולה לאפשר לתוקפים לא מאומתים לאחזר מידע רגיש, כולל קבצי תצורה, אישורים ונתונים סודיים, ובכך להוביל לדליפות נתונים. לפגיעות זו הוקצה ציון CVSS של 7.5, המסווג אותה כסיכון בעל חומרה גבוהה.

תרשים המציג את תהליך גילוי הפגיעויות במסגרת Rack Ruby

פגיעות של הכללת קבצים סטטיים ומקומיים ב-Rack::Static

הבנת Rack::Static 

Rack::Static היא תוכנת ביניים חיונית ביישומי Rack המשמשת בעיקר לשרת קבצים סטטיים כגון JavaScript, CSS ותמונות ביעילות. על ידי מינוף Rack::Static, מפתחים יכולים לשלב בצורה חלקה את הצגת התוכן הסטטי ביישומי Ruby מבלי להסתמך על תצורת שרת אינטרנט נוספת.  

בעת הגדרת Rack::Static, בולטות שתי אפשרויות חיוניות - :urls ו- :root . הבנה ושימוש נכון באפשרויות אלו מפשטים ומייעלים משמעותית את תהליך הגשת הקבצים הסטטיים. 

1. האפשרות :urls

האפשרות :urls מציינת אילו נתיבי URL אפליקציית Rack צריכה לטפל בהם כנכסים סטטיים. היא מסופקת כמערך של מחרוזות, שכל אחת מהן מייצגת קידומת נתיב שמפעילה טיפול סטטי בקבצים. 

לְדוּגמָה: 

צילום מסך של קוד הממחיש את תצורת האפשרות Rack::Static :urls ביישום Ruby

בתצורה זו, בקשות אל /images , /css , או /js נעצרות ומעובדות על ידי Rack::Static . כל קובץ התואם לנתיבים אלה יוגש ישירות ממערכת הקבצים. 

2. אפשרות :root

האפשרות :root מגדירה את ספריית הבסיס שממנה יוגשו הקבצים הסטטיים. ספרייה זו היא יחסית לספריית העבודה הנוכחית של יישום ה-Rack שלך. 

בהינתן הדוגמה הקודמת:

צילום מסך של קוד המציג את הגדרת האפשרות Rack::Static :root להצגת קבצים סטטיים

כאשר מתבצעת בקשה אל /assets/logo.png , Rack::Static מנסה להגיש את הקובץ הממוקם ב- public/assets/logo.png

דוגמה מעשית

יישום יעיל של Rack::Static דרך האפשרויות :urls ו- :root מספק שיטה מאורגנת ויעילה להגשת תוכן סטטי בתוך יישומי אינטרנט של Ruby: 

צילום מסך של קוד המתאר דוגמה מעשית של תצורת Rack::Static עבור תוכן סטטי

בתרחיש זה, בקשות ל-/assets/* ול-/favicon.ico יטופלו אוטומטית על ידי Rack::Static. כל הקבצים התואמים צריכים להימצא בספריית public/assets ובספריית public/favicon.ico בהתאמה. 

פרטים טכניים של CVE-2025-27610

במהלך ניתוח אבטחה מקיף של Rack::Static , גילה Minh Pham פגיעות משמעותית הקשורה לטיפול לא תקין באפשרות :root. באופן ספציפי, כאשר הפרמטר :root אינו מוגדר במפורש, Rack מגדיר ערך זה כברירת מחדל לספריית העבודה הנוכחית על ידי הקצאתה של הערך Dir.pwd, ובכך מייעד אותה באופן מרומז כספריית השורש של אפליקציית Rack. 

באופן משמעותי, Rack::Static משרשר ישירות נתיבי URL נכנסים עם ספריית :root שצוינה ללא אימות או ניקוי מספקים. כתוצאה מכך, אם האפשרות :root אינה מוגדרת או מוגדרת באופן שגוי ביחס לאפשרות :urls, תוקף לא מאומת עלול לנצל פגיעות זו באמצעות טכניקות חציית נתיבים כדי לגשת לקבצים רגישים מחוץ לספריית האינטרנט המיועדת. 

הסעיף הבא מספק ניתוח מפורט של תהליך טיפול הבקשות של Rack::Static, הממחיש בבירור כיצד ניתן לנצל פגיעות זו.

פגיעות של חציית נתיבים והכללת קבצים מקומיים ב-Rack::Static

כדי להבין לעומק את האופן שבו תוכנת הביניים Rack::Static מעבדת בקשות, מין פאם ערך ניתוח יסודי של קוד המקור של Rack. במהלך אתחול המחלקה Rack::Static, הוא ציין שאם האפשרות :root אינה מוגדרת במפורש, Rack::Static כברירת מחדל מגיש קבצים מספריית העבודה הנוכחית (Dir.pwd). כתוצאה מכך, השמטת אפשרות זו גורמת לכך שתוכנת הביניים תשתמש באופן מרומז בספרייה שממנה מופעלת היישום.

צילום מסך של קוד המציג את אתחול Rack::Static והקצאת ספריית :root כברירת מחדל
צילום מסך של קוד הממחיש את שיטת הקריאה Rack::Static המטפלת בבקשות HTTP

לאחר האתחול, נקבע שכאשר Rack::Static מקבל בקשת HTTP נכנסת, שיטת ה-call מופעלת.

צילום מסך של קוד המציג את Rack::Static מעביר סמכויות לשרת קבצים ל-Rack::Files.

לאחר מכן, Rack::Static מאציל את פעולת הגשת הקבצים ל-Rack::Files, אשר מנסה לאתר ולשרת את הקובץ בהתבסס על נתיב הקובץ שנבנה הנגזר מספריית :root שתצורתה נקבעה ומה-PATH_INFO שסופק על ידי המשתמש.

צילום מסך של קוד המתאר בניית נתיב קובץ ב-Rack::Static באמצעות :root ו-PATH_INFO

ראשית, על ידי הפעלת המתודות can_serve(path) ו- overwrite_file_path(path), תוכנת הביניים בוחנת את env["PATH_INFO"] כדי לקבוע האם הבקשה הנכנסת תואמת לאחת מקידומות ה-URL שהוגדרו (למשל, /static, /public). 

צילום מסך של קוד המציג שיטות לבדיקה והחלפה של נתיבי קבצים ב-Rack::Static

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

צילום מסך של קוד הממחיש שרשור נתיבי קבצים פגיע ב-Rack::Static

מין פאם גילה שבשל היעדר ניקוי או אימות נאותים בתהליך עבודה זה, אם ה-PATH_INFO שסופק על ידי המשתמש מכיל רצפי חציית ספריות, והאפשרות :root אינה מוגדרת במפורש, נתיב הקובץ שנבנה עלול להגיע למיקום מחוץ לספריית השורש המיועדת, דבר שעלול לחשוף קבצים רגישים.

הוכחת היתכנות CVE-2025-27610

כדי להדגים את הפגיעות הזו ב-Rack::Static, פיתחנו יישום אינטרנט מבוסס Ruby המשתמש בגרסה 3.1.10 של Rack. בתרחישים שבהם היישום אינו מגדיר במפורש את האפשרות :root, תוקף לא מאומת יכול לנצל פגיעות זו כדי לגשת לנתונים רגישים, כגון אישורים, קבצי תצורה או קבצי מסד נתונים, מה שעלול להוביל לפריצת נתונים משמעותית. 

אנא עיינו בסרטון הבא להדגמה מפורטת של ההשפעה המשמעותית הקשורה לפגיעות זו:

הפחתה והנחיה

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

MetaDefender Core שימוש במנוע SBOM יכול לזהות את הפגיעות הזו.

Core OPSWAT MetaDefender , מצוידת ב- SBOM מתקדמת ( Software יכולות (רשימת חומרים), מאפשרות לארגונים לנקוט בגישה פרואקטיבית להתמודדות עם סיכוני אבטחה. על ידי סריקת יישומי תוכנה והתלויות שלהם, MetaDefender Core מזהה פגיעויות ידועות, כגון CVE-2025-27610, CVE-2025-27111 ו-CVE-2025-25184, בתוך הרכיבים המפורטים. זה מאפשר לצוותי פיתוח ואבטחה לתעדף מאמצי תיקון נתונים, תוך הפחתת סיכוני אבטחה פוטנציאליים לפני שניתן לנצל אותם על ידי גורמים זדוניים. 

להלן צילום מסך של CVE-2025-27610, CVE-2025-27111 ו-CVE-2025-25184, אשר זוהו על ידי MetaDefender Core עם SBOM:

הצגת צילום מסך של לוח המחוונים MetaDefender Core גילוי פגיעויות במסגרת Rack Ruby

הישאר מעודכן עם OPSWAT !

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