#React Server Components to #RCE
بی مقدمه میرم سراغ ابعاد فنی، خب در ویژگی React Server Components که Next.js هم با نام App Router از آن استفاده میکند، یک پروتکل با نام Flight وجود دارد که وظیفه اجرای درخواست های سمت کاربر در خصوص Components هایی که در سمت سرور وجود دارد را داشته و بعد از Render کردن میبایست نتیجه را به سمت کاربر دوباره بازگشت دهد.
یعنی وقتی سمت کاربر نیاز به انجام یک Server Function دارد آنرا بصورت Serialize به سمت سرور ارسال کرده و RSC اقدام به Deserialize کردن Payload ارسالی میکند، که در تصویر پست جایی که
حالا مهاجم نیاز دارد تا به توابعی دسترسی پیدا کند که امکان دادن کد به آنها را دارد، برای اینکار از Prototype Pollution استفاده کرده که به معنی مخدوش کردن نمونه اولیه است، یعنی مهاجم یک
POC
@Unk9vvN
بی مقدمه میرم سراغ ابعاد فنی، خب در ویژگی React Server Components که Next.js هم با نام App Router از آن استفاده میکند، یک پروتکل با نام Flight وجود دارد که وظیفه اجرای درخواست های سمت کاربر در خصوص Components هایی که در سمت سرور وجود دارد را داشته و بعد از Render کردن میبایست نتیجه را به سمت کاربر دوباره بازگشت دهد.
یعنی وقتی سمت کاربر نیاز به انجام یک Server Function دارد آنرا بصورت Serialize به سمت سرور ارسال کرده و RSC اقدام به Deserialize کردن Payload ارسالی میکند، که در تصویر پست جایی که
FlightReplayServer قرار دارد مقادیر سمت کاربر بواسطه تابع requireModule(metadata) در حال دریافت است بدون هیچ چک امنیتی!حالا مهاجم نیاز دارد تا به توابعی دسترسی پیدا کند که امکان دادن کد به آنها را دارد، برای اینکار از Prototype Pollution استفاده کرده که به معنی مخدوش کردن نمونه اولیه است، یعنی مهاجم یک
property برای PP حساسی مانند Function تعریف میکند که یک کد RCE است و RSC هم هیچگونه تصدیق امنیتی روی property انجام نمیدهد.POC
@Unk9vvN