משתמש ב-WinRAR? הקפד לבצע תיקון נגד באגי ביצוע קוד אלה...

משתמש ב-WinRAR? הקפד לבצע תיקון נגד באגי ביצוע קוד אלה...

משתמש ב-WinRAR? הקפד לתקן נגד באגי ביצוע קוד אלה... PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

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

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

RAR, או WinRAR בצורת Windows העכשווית שלו, עזר להתמודד עם בעיה זו על ידי הצעת מה שנקרא נפחי התאוששות.

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

שמירת גלגל רזרבי בתא המטען/תא המטען

ככל הנראה, ארכיוני RAR עד וכולל גרסה 4 בשימוש מה שנקרא תיקון זוגיות; גרסאות חדשות יותר משתמשות במערכת תיקון שגיאות מורכבת יותר מבחינה חישובית אך חזקה יותר המכונה קודים של ריד-שלמה.

תיקון מבוסס זוגיות מסתמך על פעולת XOR, אותה נסמן כאן בסמל ⊕ (סימן פלוס בתוך עיגול).

XOR הוא קיצור של OR בלעדי, המציין "או X נכון או Y נכון, אבל לא שניהם בו זמנית", ובכך בעקבות זאת שולחן האמת, שאנו בונים על ידי הנחה ש-X ו-Y יכולים לקבל רק את הערכים 0 (false) או 1 (true):

אם X=0 ו-Y=0 אז X ⊕ Y = 0 (שני כוזבים עושים שקר) אם X=1 ו-Y=0 אז X ⊕ Y = 1 (אחד יכול להיות נכון, אבל לא שניהם) אם X=0 ו Y=1 ואז X ⊕ Y = 1 (אחד יכול להיות נכון, אבל לא שניהם) אם X=1 ו-Y=1 אז X ⊕ Y = 0 (זה חייב להיות כזה או אחר)

פונקציית XOR פועלת קצת כמו השאלה "האם תרצה קפה או תה?"

אם אתה אומר "כן", אז אתה צריך לבחור קפה לבד, או לבחור תה לבד, כי אתה לא יכול לשתות כוס אחת מכל אחד.

כפי שניתן להבין מטבלת האמת שלמעלה, ל-XOR יש את המאפיינים הנוחים X ⊕ 0 = X, ו X ⊕ X = 0.

כעת תארו לעצמכם שיש לכם שלושה נתחי נתונים המסומנים A, B ו-C, ואתם מחשבים נתח רביעי P על ידי XOR של A ו-B ו-C ביחד, כך P = (A ⊕ B ⊕ C).

בהתחשב בטבלת האמת שלמעלה, ובהתחשב בכך ש-XOR הוא מה שמכונה חִלוּפִי, כלומר ניתן להחליף את סדר הערכים בחישוב אם תרצה, כך X ⊕ Y = Y ⊕ Z, או A ⊕ B ⊕ C = C ⊕ B ⊕ A = B ⊕ C ⊕ A וכן הלאה, אנו יכולים לראות ש:

A ⊕ B ⊕ C ⊕ P = A ⊕ B ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ (C⊕C) = 0 ⊕ 0 ⊕ 0 = 0

עכשיו תראה מה קורה אם אחד מ-A, B או C הולך לאיבוד:

A ⊕ B ⊕ P = A ⊕ B ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ C = 0 ⊕ 0 ⊕ C = C <- הנתח החסר חוזר! A ⊕ C ⊕ P = A ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (C⊕C) ⊕ B = 0 ⊕ 0 ⊕ B = B <-הנתח החסר חוזר! B ⊕ C ⊕ P = B ⊕ C ⊕ (A ⊕ B ⊕ C) = (B⊕B) ⊕ (C⊕C) ⊕ A = 0 ⊕ 0 ⊕ A = A <- הנתח החסר חוזר!

כמו כן, אם P אבד, נוכל להתעלם ממנו כי אנו יכולים לחשב A ⊕ B ⊕ C בכל מקרה.

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

שגיאת שחזור השגיאה

ובכן, לאחר מה שאנו מניחים שלא הבחינו בו שנים רבות, באג מדובב כעת CVE-2023-40477 עלה על פני השטח ב-WinRAR.

באג זה יכול להיגרם (למרבה האירוניה, אולי) כאשר המוצר עושה שימוש במערכת שחזור נתונים זו.

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

זה מוביל לניצול הצפת מאגר פגיעות.

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

הבאג הזה לא קיבל ציון חומרה של 10/10 ב"סקאלת הסכנות" של CVSS, והגיע ל-7.8/10 בטענה שלא ניתן לנצל את הפגיעות ללא סיוע כלשהו מהמשתמש שאליו מתמקדים.

באג את השני

מעניין לציין שבאג אבטחה שני תוקן במהדורת WinRAR האחרונה, ולמרות שזה נשמע פחות בעייתי מהפגם CVE-2023-40477 שהוזכר לעיל, TechCrunch מציע שהוא נוצל בחיים האמיתיים באמצעות ארכיונים ממולכדים "פורסם בלפחות שמונה פורומים ציבוריים [המכסים] מגוון רחב של נושאים הקשורים למסחר, השקעות ונושאים הקשורים למטבעות קריפטוגרפיים."

אנחנו לא יכולים למצוא מספר CVE עבור זה, אבל WinRAR מתאר את זה בפשטות כך:

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

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

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

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

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

מה לעשות?

אם אתה משתמש WinRAR, ודא שאתה ב- הגרסה העדכנית ביותר, שהוא 6.23 בזמן כתיבת שורות אלה [2023-08-23T16:30Z]

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

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

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

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

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

...אז אולי זה הזמן לחשוב על זה.

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

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


בול זמן:

עוד מ ביטחון עירום