הם גילו פגיעות ב-RubyGems.org שאפשרה להחליף חבילות

לאחרונה הוכרז כי זוהתה פגיעות קריטית במאגר החבילות RubyGems.org (הפגיעות כבר מקוטלגת תחת CVE-2022-29176), המאפשרת , ללא אישור מתאים, החלפה של חבילות של אנשים אחרים במאגר על ידי ייזום משיכה (yank) של חבילה לגיטימית והעלאת קובץ אחר עם אותו שם ומספר גרסה במקומה.

מוזכר כי הפגיעות נובעת מבאג במטפל הפעולה "yank" , אשר מתייחס לחלק השם שאחרי המקף כשם הפלטפורמה, מה שמאפשר ליזום הסרה של חבילות חיצוניות התואמות בחלק השם עד לתו המקף.

בפרט, בקוד של מטפל הפעולות "yank", הקריאה 'find_by!(full_name: "#{rubygem.name}-#{slug}")' שימשה לחיפוש חבילות, בעוד שהפרמטר "slug" הועבר לבעל החבילה כדי לקבוע את הגרסה שיש להסיר.

הבעלים של החבילה "rails-html" יכול היה לציין "sanitizer-1.2.3" במקום את גרסת "1.2.3", מה שיגרום לפעולה להחיל על "rails-html-sanitizer-1.2.3" חבילה ″ ממישהו אחר. »

ייעוץ אבטחה עבור Rubygems.org פורסם אתמול.

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

בואו נסתכל לעומק כדי לראות מה השתבש במהלך תהליך החילוץ. בתור אמתלה, בואו נדמיין תרחיש שבו אנו יוצרים אבן חן בשם "rails-html" מתוך כוונה להשיג גישה לא מורשית לאבן החן "rails-html-sanitizer" בשימוש נרחב.

מוזכר כי שלושה תנאים חייבים להתקיים על מנת לנצל בהצלחה את הפגיעות הזו:

  • ההתקפה יכולה להתבצע רק על מנות שיש להן תו מקף בשמן.
  • תוקף אמור להיות מסוגל למקם חבילת אבני חן עם חלק מהשם עד לדמות המקף. לדוגמה, אם ההתקפה היא נגד חבילת "rails-html-sanitizer", על התוקף לשים את חבילת "rails-html" משלו במאגר.
  • החבילה המותקפת חייבת נוצרה ב-30 הימים האחרונים או שלא עודכנה במשך 100 ימים.

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

הבעיה תוקנה באתר RubyGems.org ב-5 במאי , ולדברי המפתחים, הם טרם זיהו עקבות של ניצול הפגיעות ביומני הרישום במהלך 18 החודשים האחרונים. עם זאת, עד כה נערכה רק ביקורת שטחית, וביקורת מעמיקה יותר מתוכננת לעתיד.

נכון לעכשיו, אנו מאמינים שפגיעות זו לא נוצלה.

RubyGems.org שולח אימייל לכל בעלי אבני החן כאשר גרסת אבן שוחררת או מוסרת. לא קיבלנו דוא"ל תמיכה כלשהם מבעלי אבני חן המצביעים על כך שאבן החן שלהם נכרה ללא אישור.

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

כדי לאמת את הפרויקטים שלכם, מומלץ לנתח את היסטוריית הפעולות בקובץ Gemfile.lock פעילות זדונית מתבטאת בנוכחות שינויים בעלי אותו שם וגרסה, או שינוי פלטפורמה (לדוגמה, כאשר חבילה xxx-1.2.3 .1.2.3 מעודכן ל-xxx-XNUMX-xxx).

כפתרון נגד התחזות של חבילות נסתרות במערכות אינטגרציה רציפה או בעת פרסום פרויקטים, מומלץ למפתחים להשתמש ב-Bundler עם האפשרויות "--frozen" או "--deployment" כדי לאשר תלויות.

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


הוסף כמקור מועדף בגוגל