#Race_Condition for #Use_After_Free
استفاده از آسیب پذیری Race Condition برای دستیابی به chunk آزاد شده ی یک بلاک حافظه Heap این امکان رو به هکر میده که به اصرار دسترسی دوباره خودش رو به Chunk مربوطه ایجاد کنه, از این روی میتوان گفت که این دو آسیب پذیری اگر در شرایط مناسب استفاده بشوند میتوانند موجب ارتقاء سطح دسترسی در سیستم عامل های اندروید شوند,
در تصویر پست مشاهده میشه که یک آرایه که همواره در حافظه Heap تعریف میشه, دارای ۲۰۴۸ اندازه با مقادیر صفر هستش و در ادامه تابع ()read اقدام به خواندن حافظه در سکشن info کرنل میکنه, این خوانده شدن در تابع ()trigger به واسطه آسیب پذیری زمان چک برای زمان اجرا که با مخفف TOCTOU هم شناخته میشه دسترسی به حافظه مربوطه حاصل میشه و هکر میتونه اقدامات بعدی رو انجام بده,
اگر در تابع ()reg_read شرط مبنی بر خواندن در اصل fd1 که دارای مقدار عددی و 1- هستش و اگر مساوی NULL دیده بشه یعنی محل خوانده شده همان محل رزرو شده Heap هستش, این هم نکته ای هستش که باید دقت بشه بهش...
CVE-2016-10296
@Unk9vvN
استفاده از آسیب پذیری Race Condition برای دستیابی به chunk آزاد شده ی یک بلاک حافظه Heap این امکان رو به هکر میده که به اصرار دسترسی دوباره خودش رو به Chunk مربوطه ایجاد کنه, از این روی میتوان گفت که این دو آسیب پذیری اگر در شرایط مناسب استفاده بشوند میتوانند موجب ارتقاء سطح دسترسی در سیستم عامل های اندروید شوند,
در تصویر پست مشاهده میشه که یک آرایه که همواره در حافظه Heap تعریف میشه, دارای ۲۰۴۸ اندازه با مقادیر صفر هستش و در ادامه تابع ()read اقدام به خواندن حافظه در سکشن info کرنل میکنه, این خوانده شدن در تابع ()trigger به واسطه آسیب پذیری زمان چک برای زمان اجرا که با مخفف TOCTOU هم شناخته میشه دسترسی به حافظه مربوطه حاصل میشه و هکر میتونه اقدامات بعدی رو انجام بده,
اگر در تابع ()reg_read شرط مبنی بر خواندن در اصل fd1 که دارای مقدار عددی و 1- هستش و اگر مساوی NULL دیده بشه یعنی محل خوانده شده همان محل رزرو شده Heap هستش, این هم نکته ای هستش که باید دقت بشه بهش...
CVE-2016-10296
@Unk9vvN
#Use_After_Free #Linux
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک struct با نام
اما در تابع اصلی یعنی
اما در ادامه شیُ مربوطه یعنی
این شیُ بواسطه تابع
@Unk9vvN
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک struct با نام
UAFME
یک تابع درونش بصورت void تعریف شده که از نوع اشاره گر هستش اما در ادامه دو تابع دیگه رو داریم با نام های ()good
و ()bad
که یک تابع ()print
درون هر کدوم تعریف شده و یک string رو قراره چاپ بکنهاما در تابع اصلی یعنی
()main
میبینیم که همون اول کار از ساختمان UAFME
یک شیُ ساخته میشه که بصورت اشاره گر بوده و حافظه رو بواسطه تابع ()malloc
رزرو کرده با اندازه ساختمان UAFME
اما در ادامه شیُ مربوطه یعنی
malloc1*
اشاره داره به تابع درون ساختمان یعنی vulnfunc
که مقدار تابع good
بهش پاس داده شده، در ادامه تابع ()vulnfunc
فراخوانی میشه، اینجا با این تابع که در حافظه Heap هستش تماس برقرار میشهاین شیُ بواسطه تابع
()free
آزاد شده است، اما در ادامه متغییر دومی که بصورت اشاره گر با نام malloc2*
تعریف شده که مقدار 0 رو داره و در ادامه تابع bad
بهش پاس داده شده، اینجا چون اندازه اشاره گر مربوطه به اندازه متغییر malloc2
هستش، به همون قسمت قبل در حافظه ارجاع داده شده.@Unk9vvN
#Unserialize #Use_After_Free #PHP_Internal
یکی از مواردی که در دوره تست نفوذ وب تیم تحقیقاتی Unk9vvN بهش بصورت ویژه پرداخت میشه، مبحث کشف آسیب پذیری های Binary مبتنی بر کامپایلر زبان PHP خواهد بود که بر بستر مقادیر Serialize امکان رخدادش وجود داره،
برای مثال در مقادیر Serialize شدن یک آرایه، امکان رزرو حافظه Heap بوجود خواهد آمد و از طرفی در مقادیر Serialize شده یک سمبل معادل اشاره گر Reference وجود داره که در تصویر ، در متغیر
بصورت خلاصه امکان رزور یک حافظه مبتنی بر تعریف ArrayObject وجود داره و امکان اینکه اون رو آزادش کنیم و بعد با استفاده از R بزرگ که نشان Reference هستش، به Element مورد تعریف حافظه Heap اشاره کرده و بنوعی آسیب پذیری Use After Free رو در حافظه بوجود بیاریم، این عملکرد اشتباه Garbage Collector هستش.
البته تا به امروز روش و تکنیک های متعددی در این مبحث مطرح شده که پیشنیاز فهمشون ، کتاب PHP Internals هستش، که ما بصورت مفصل در دوره تست نفوذ وب بخش Insecure Deserialization به این موضوع خواهیم پرداخت.
@Unk9vvN
یکی از مواردی که در دوره تست نفوذ وب تیم تحقیقاتی Unk9vvN بهش بصورت ویژه پرداخت میشه، مبحث کشف آسیب پذیری های Binary مبتنی بر کامپایلر زبان PHP خواهد بود که بر بستر مقادیر Serialize امکان رخدادش وجود داره،
برای مثال در مقادیر Serialize شدن یک آرایه، امکان رزرو حافظه Heap بوجود خواهد آمد و از طرفی در مقادیر Serialize شده یک سمبل معادل اشاره گر Reference وجود داره که در تصویر ، در متغیر
exploit$
اون انتهای مقادیر Serialize شده بصورت یک R بزرگ میبینیدشبصورت خلاصه امکان رزور یک حافظه مبتنی بر تعریف ArrayObject وجود داره و امکان اینکه اون رو آزادش کنیم و بعد با استفاده از R بزرگ که نشان Reference هستش، به Element مورد تعریف حافظه Heap اشاره کرده و بنوعی آسیب پذیری Use After Free رو در حافظه بوجود بیاریم، این عملکرد اشتباه Garbage Collector هستش.
البته تا به امروز روش و تکنیک های متعددی در این مبحث مطرح شده که پیشنیاز فهمشون ، کتاب PHP Internals هستش، که ما بصورت مفصل در دوره تست نفوذ وب بخش Insecure Deserialization به این موضوع خواهیم پرداخت.
@Unk9vvN