امروز داشتم کدم رو مینوشتم و چون داخل لوکال هاست بود و فعلا برای پروداکشن نبود، داخل فرانت اند ست کردم که ادرس API من باشه 0.0.0.0:8000 و خب بک اند هم روی لوکال در حال اجرا بود...
اما شب داشتم تست میکردم، دیدم کلا مروگر ارور ERR_EMPTY_RESPONSE میده بهم و منطقی نیست و برای همین یکم سرچ کردم... و رسیدم به آسیب پذیری 0.0.0.0 Day ( که البته ربطی به مشکل من هم نداشت و مشکل از افزونه proxy switcher بود ولی خب این هم موضع جالبی بود و خواستم راجبش بنویسم).
قبل از اینکه بریم سراغ این اسیب پذیری بهتر راجب PNA و CORS سرچ کنید( تو پست قبلی راجب CORS حرف زدیم و میتونید اونجا رو هم ببینید)
این آسیب پذیری مربوط میشه به خود مروگر ها و شرکت Oligo Security چند ماه پیش گزارشش رو داده، به هکر اجازه میده که روی مروگر های روز مره(مثل فایرفاکس، کروم، سافاری) بتونه از طریق یه وبسایت پابلیک با دور زدن PNA و CORS به سرویس های لوکال سمت کلاینت درخواست بفرسته و حتی بتونه دست رسی بگیره و... البته آسیب پذیری شامل ویندوز نمیشه چون دیفالت 0.0.0.0 ip رو بلاک میکنه و فقط برای لینوکس و مک هستش ( آسیب پذیری قرار تو ورژن های جدید مروگر ها به زودی فیکس بشه.)
ماجرا از اینجا شروع میشه که اگه یه هکر بیاد و یه وبسایت مخرب( فیشینگ *) رو بیاره بالا و شما برید داخل اون وبسایت، هکر میتونه از طریق مرورگر و جاوااسکریپت یه درخواست بفرسته به یه پورت روی ip 0.0.0.0 ( که اشاره میکنه به همه ip های موجود داخل اون شبکه) و حالا اگه یه سرویسی روی اون پورت در حال اجرا باشه ریکوست رو میتونه دریافت بکنه و درخواست رو هم انجام بده.
برای جلوگیری از همچین اتفاقی داخل مروگر ها قابلیت CORS و Private Network Access (PNA) رو داریم که نمیزاره یه سایت پابلیک بیاد ریکوست fetch بفرسته به شبکه داخلی ما و دیتا بگیره یا دست رسی پیدا بکنه و...
توی این آسیب پذیری درواقع هکر با fetch میاد یه ریکوئست http میفرسته با mode: no-cors و اینشکلی دیگه درخواست Preflight برای CORS ارسال نمیشه و مستقیم ریکوست از سمت وبسایت میره سمت سرویسی که رو سیستم در حال اجرا هستش ( تو مود non-cors ریسپانس سرور رو نمیتونیم ببینیم داخل مروگر ) و اینشکلی هکر میتونه مثلا اسکن بکنه پورت های ما رو و اگه بفهمه مروبط به سرویس خاص هستش و... شاید بتونه یه مشکل امنیتی ازش پیدا بکنه و مثل چیزی که تو مقاله بود دست رسی RCE (Remote Code Execution) بگیره و... که البته سخته..!!
علاوه بر CORS گفتیم PNA هم وجود داره، الان اگه اینجا ریکوست بفرستیم به localhost یا 127.0.0.1 و یه سری ip دیگه( تصویر پایین) این PNA جلوش رو میگیره و نمیزاره درخواست بره، اما داخل لیستی که PNA ازش جلوگیری میکنه ایپی 0.0.0.0 نیست و برای همین ترکیبش با mode: non-cors میتونه این باگ امنیتی رو بوجود بیاره .
البته کم کم فیکس میشه این مشکل و سخت هم هستش که همچین تارگتی پیدا کرد ولی در کل مشکلی هست که وجود داره، همونطور که داخل مقاله میگه بهتر به لوکال هاست اعتماد نکنیم چون لوکال !
مرسی که تا اینجا خوندید، چاکس ❤️
جزئیات کامل همراه با مثال و... اینجا قرار گرفته که میتونید بخونید:
https://www.oligo.security/blog/0-0-0-0-day-exploiting-localhost-apis-from-the-browser
اینجا هم یه سری نکته برای دولوپر ها گذاشتن که میتونیم داخل لوکال اپلیکیشن مون انجام بدیم تا از این نوع حمله ها جلوگیری کنیم: