#Type_Juggling #Vulnerability
آیا در خصوص آسیب پذیری Type Juggling یا دستکاری نوع داده چیزی شنیده اید؟

همونطور که میدونید در PHP بصورت کلی نوع داده ها به سه دسته String و Number که شامل int و float و نوع سوم یعنی Boolean ها که به دو خروجی True و False تاکید داره, آسیب پذیری دستکاری نوع داده اونجایی خودنمایی میکنه که مثلا در Condition ها بجای استفاده از مقایسه یا Comparisons strict (===) از Comparisons loose (==) استفاده میشه,

این بدین معنیه که شرط هایی که برنامه نویسان به واسطه loose طراحی کردند رو با منطقی که در تصویر مقایسه ای loose Comparisons نشون داده شده میشه تغییر داد,برای مثال:

▪️TRUE: "0000" == int(0)
▪️TRUE: "0e12" == int(0)
▪️TRUE: "1abc" == int(1)
▪️TRUE: "0abc" == int(0)
▪️TRUE: "abc" == int(0) // !!

شرط های بالارو اگر بررسی دقیق کنید متوجه میشوید که تناقضی در ارسال پاسخ True در شرط های بالا دیده میشه که توضیح اون رو میسپارم به خودتون...

https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09
@Unk9vvN
#Type_Juggling for #CSRF_Protection Bypass
همونطور که میدونید در خصوص آسیب پذیری #CSRF یا درخواست جعلی مکانیزم های دفاعی وجود داره مانند #SameSite_Cookie و #Double_Submit_Cookie که قبلا راجبشون توضیحاتی داده شده،

https://t.me/Unk9vvN/880

نکته ای که در این پست میخوام بهش اشاره کنم اینه که با استفاده از آسیب پذیری #Type_Juggling میتوان مکانیزم های تولید توکن Nonce و در مجموع مکانیزم #Double_Submit_Cookie رو میتوان با ارسال مقادیر True دور زد، برای مثال در تصویر پست میبینید که هکر Condition آسیب پذیر رو که با استفاده از تابع ()strcmp که قراره دو هشی که یکی در سرور ذخیره هست رو با هشی که از پارامتر key-awesome دریافت میکنه رو مقایسه کنه که مشکل همینجاست که این مقایسه بصورت loose طراحی شده،

https://t.me/Unk9vvN/1049

و از اونجایی که میبایست جواب Condition بصورت Boolean باشه، هکر آمده و یک array به پارامتر key-awesome ارسال کرده و همین موضوع باعث شده مقدار hash$ برابر NULL قرار بگیره و همین موضوع خروجی تابع ()strcmp رو معادل NULL == 0 قرار بگیره و شرط برقرار و طبیعتا مکانیزم دور زده میشه...

@Unk9vvN
#Type_Juggling & #Object_Reference on #PHP_Object_Injection
جالب است بدانید که در خصوص پایلود پایلود ریزی مثلا مقادیر Serialize شده پارامتر کوکی هم میتوان در خصوص دور زدن مکانیزم احراز هویت اقدام به اکسپلویت کردن آسیب پذیری هایی مانند Type_Juggling کرد,

به کد آسیب پذیری سمت چپ بالا دقت کنید, بصورت واضح دیده میشه که کوکی تنظیم شده بر روی auth در پارامتر Cookie قراره که در تابع ()unserialize ترجمه و در شرط زیرین پارامترهای username و password رو با مقادیر متغیرات مقابل را مقایسه و در صورت صحیح بودن متغیر admin$ رو معادل True قرار میدهد

خب اولین نکته اینجاست که compare استفاده شده از نوع loose هست که به معنی در نظر نگرفتن نوع داده های مقایسه هست که همین موضوع موجب آسیب پذیری است

در تصویر پست سمت چپ پایین میبینید که یک آرایه تعریف شده با دو value که b:1 هستند به معنیه Boolean True که همین Value که یک DataType محصوب میشه موجب مقایسه True == String میشه و نتیجه آنکه خروجی Condition میشود True و به این صورت متغیر admin$ برابر True خواهد بود

آسیب پذیری سمت راست رو هم به خودتون میسپارم...

@Unk9vvN