-
Y yossiz התייחס לנושא זה ב
-
@nigun אמר בניתוח חולשת PwnKit (תגובות):
לא הבנתי מה נמצא בargv[0] כשאני מריץ pkexec בשורת הפקודה בלי פרמטר
שם הקובץ.
-
@nigun
יש מוסכמה, שמי שמריץ את התוכנה שם ב-argv[0]
את השם של הקובץ של התוכנה, כלומר אם אתה מריץpkexec
מתוךbash
אזbash
(בתור תוכנה שמכבדת את המוסכמה הזו) תכניס את המילהpkexec
ב-argv[0]
.אבל חשוב להבין שזו רק מוסכמה. אין משהו שמחייב את זה. אפשר להכניס שם מחרוזת אקראית, או אפשר להכניס שם null pointer שמסמן את סוף מערך ה-argv.
ניצול החולשה מסתמכת על זה שהכנסת שם הקובץ הוא אופציונאלי.
אגב, משהו מעניין,
יש הרבה פקודות שמנצלים מוסכמה זו כדי שתוכל לקבל התנהגויות שונות מאותה פקודה, ההתקנה של הפקודה מתקינה כמה קישורים לאותו קובץ (hardlinks) ולכל אחד שם שונה, והפקודה מחליטה לפי השם ב-
argv[0]
איך להתנהג.
דוגמה לזה הוא busybox -
@musicode אתה מתייחס למילים אלו שלי:
אחד מהתפקידים המרכזיים של מערכת הפעלה, זה לנהל את הגישה למשאבים משותפים.
אסביר את כוונתי:
כל משאב שהוא לא ייחודי לתהליך זה, אלא משותף בין כל התהליכים.
למשל דיסק הקשיח (או קבצים ששוכנים עליו), המסך, כרטיס הרשת, ובעצם רוב החומרה של המחשב.
דוגמה יחידה של משאב לא משותף שאני מצליח לחשוב עליה, זה זכרון הראם, כי לכל תהליך יש מרחב זיכרון משלה. לכן גישה לזכרון הראם לא חייבת את גישור מערכת ההפעלה. (הנושא לא כל כך שחור/לבן כי יש איזשהו התערבות של מערכת ההפעלה, אבל זה כבר גולש לנושאים אחרים...)מקווה שזה יותר ברור עכשיו. תודה על ההערה.
-
@yossiz אמר בניתוח חולשת PwnKit:
תשתמשו בשפות בטוחות. בשפה אחרת באג זה היה נשאר באג, ולא היה מגיע לכדי חולשה.
לא הבנתי, זה שזה הגיע לחולשה זה מעלה או חיסרון? ובאיזה שפה מדובר פה? סליחה על הבורות.
@צדיק-תמים החולשה קיימת בתוכנה שנכתבה בשפת C. שפת C היא שפה "לא בטוחה". מה שזה אומר לענינינו הוא שאין בדיקות בסביבת הריצה אם גלשת מעבר לסוף מערך. לכן מה שהתחיל כבאג (גלישה מעבר לסוף המערך) הפך לחולשה (אפשרות להזריק משתנה סביבה מסוכנת) ואקספלויט (שמאפשר קבלת הראשות רוט).
בשפה אחרת (למשל JS, אומנם JS לא מתאים לתוכנות מסוג זה, אבל יש שפות בטוחות אחרות שמתאימים, בראשם RUST), הבאג היה נשאר באג, ומה שהיה קורה היה או (במקרה הכי טוב) שגיאה בזמן הידור או שגיאה בזמן ריצה.
-
pkexec תיקח תוצאה זו ותכניס אותה חזרה ל... משתנה הסביבה הראשונה. יוצא שהצלחנו להזריק משתנה הסביבה לא בטוחה לתוך התהליך. משתנה הסביבה נראית כך עכשיו: GCONV_PATH=./xxx:.
לא הבנתי למה?
-
@yossiz אמר בניתוח חולשת PwnKit (תגובות):
@www על איזה חלק בדיוק אתה שואל?
איפה ראינו שהוא מחזיר את התוצאה למשתנה הסביבה הראשון?
-
D dovid העביר נושא זה מ-תכנות ב-