اسیب پذیری Bash
محقق امنیتی استفان چازیلاس، آسیب*پذیری بحرانی را در نرم*افزار Bash، کشف کرده است که پیرامون نحوه*ی عمل*کرد متغیرهای محیطی می*باشد.
این آسیب*پذیری با شناسه*ی CVE-2014-6271 معرفی شده است و در تمام توزیع*های لینوکس از جمله توزیع دبیان وجود دارد و به*گفته*ی کارشناسان امنیتی این آسیب*پذیری به*اندازه*ی آسیب*پذیری Heartbleed مهم و پرخطر است و می*تواند تاثیر بسیار شگفتی در دنیای اینترنت داشته باشد.
bash مخفف عبارت Bourne again shell ابزاری شبیه به شِل در سامانه*های یونیکسی است که احتمالاً محبوب*ترین ابزار کاربران لینوکس نیز می*باشد.
در سامانه*عامل*های لینوکسی، متغیر*های محیطی راهی را برای تاثیر*گذاری در رفتار یک نرم*افزار ایجاد می*کنند، این متغیر*ها معمولاً دارای یک نام و یک مقدار منتسب به نام هستند. در سامانه*عامل لینوکس، غالب نرم*افزار*ها در هنگام اجرا یک نسخه از بَش را در پشت صحنه اجرا می*کنند و از آن برای ارتباط با یک کاربر راه دور استفاده می*کنند.
آسیب*پذیری موجود در بَش به این مسئله مربوط است که متغیر*های محیطی می*توانند با مقادیر اولیه*ی مخربی قبل از صدا زدن نرم*افزار بَش ایجاد شوند. این متغیر*ها می*توانند به جای مقادیر مجاز شامل کد باشند که به محض اجرای بَش این کد نیز اجرا می*شود.
نام متغیر محیطی که حاوی کد است مهم نیست و تنها محتوا و یا مقدار این متغیر است که می*تواند مخرب باشد و به همین دلیل این آسیب*پذیری می*تواند در بسیاری از نرم*افزار*ها تاثیرگذار باشد، در ادامه برخی نرم*افزار*های مهم بررسی شده است*:
مانند همه*ی زبان*های برنامه*نویسی، بَش نیز دارای توابع است، اگرچه در بسیاری از مواقع کارایی این توابع به اندازه*ی زبان*های برنامه*نویسی سطح بالا نیست، ولی به*هرحال این احتمال وجود دارد که یک تابع به عنوان مقدار متغیر محیطی درج شود.
تعریف یک تابع به عنوان متغیر محیطی زمانی امکان*پذیر است که کد اضافی در انتهای تعریف تابع افزوده شود، مانند مثال زیر:
برای رفع چنین آسیب*پذیری لازم است توسعه*دهندگان در نرم*افزار*های خود این تضمین را ایجاد کنند که امکان افزودن کد اضافی در انتهای تابع وجود ندارد، بنابراین اگر کد مخرب بالا در یک بَش وصله*شده اجرا شود، خروجی مانند مثال زیر خواهد بود :
منبع : iransec.net/forums
محقق امنیتی استفان چازیلاس، آسیب*پذیری بحرانی را در نرم*افزار Bash، کشف کرده است که پیرامون نحوه*ی عمل*کرد متغیرهای محیطی می*باشد.
این آسیب*پذیری با شناسه*ی CVE-2014-6271 معرفی شده است و در تمام توزیع*های لینوکس از جمله توزیع دبیان وجود دارد و به*گفته*ی کارشناسان امنیتی این آسیب*پذیری به*اندازه*ی آسیب*پذیری Heartbleed مهم و پرخطر است و می*تواند تاثیر بسیار شگفتی در دنیای اینترنت داشته باشد.
bash مخفف عبارت Bourne again shell ابزاری شبیه به شِل در سامانه*های یونیکسی است که احتمالاً محبوب*ترین ابزار کاربران لینوکس نیز می*باشد.
در سامانه*عامل*های لینوکسی، متغیر*های محیطی راهی را برای تاثیر*گذاری در رفتار یک نرم*افزار ایجاد می*کنند، این متغیر*ها معمولاً دارای یک نام و یک مقدار منتسب به نام هستند. در سامانه*عامل لینوکس، غالب نرم*افزار*ها در هنگام اجرا یک نسخه از بَش را در پشت صحنه اجرا می*کنند و از آن برای ارتباط با یک کاربر راه دور استفاده می*کنند.
آسیب*پذیری موجود در بَش به این مسئله مربوط است که متغیر*های محیطی می*توانند با مقادیر اولیه*ی مخربی قبل از صدا زدن نرم*افزار بَش ایجاد شوند. این متغیر*ها می*توانند به جای مقادیر مجاز شامل کد باشند که به محض اجرای بَش این کد نیز اجرا می*شود.
نام متغیر محیطی که حاوی کد است مهم نیست و تنها محتوا و یا مقدار این متغیر است که می*تواند مخرب باشد و به همین دلیل این آسیب*پذیری می*تواند در بسیاری از نرم*افزار*ها تاثیرگذار باشد، در ادامه برخی نرم*افزار*های مهم بررسی شده است*:
- ForceCommand: ابزاری برای پیکربندی sshd به منظور ایجاد قابلیت*های اجرای محدودشده*ی فرمان برای کاربران راه دور است. آسیب*پذیری تازه *کشف*شده می*تواند محدودیت اجرای فرمان را دور بزند و امکان اجرای هر فرمانی را فراهم کند. بسیاری از مخزن*های نرم*افزاری Git و Subversion از یک شِل با این پیکربندی استفاده می*کنند. البته استفاده*ی معمولی از OpenSSH امکان سوء*استفاده از این آسیب*پذیری را برای مهاجم باز نمی*کند، چراکه در این حالت کاربر امکان اجرای همه*ی فرمان*ها را دارد.
- کارگزار*های Apache: در صورتی که این کارگزارها با از mod_cgi و mod_cgid استفاده کنند در مقابل این آسیب*پذیری مصون نیستند، اسکریپت*های CGI معمولاً یا در بَش توسعه پیدا کرده*اند و یا یک شِل جدید برای اجرا باز می*کنند.
- اسکریپت*های PHP: این اسکریپت*ها با متغیر mpd_php حتی اگر برای اجرا یک شِل جدید باز کنند منجر به سوء*استفاده از این آسیب*پذیری نخواهند شد.
- سرویس*گیرندگان DHCP: این سرویس*گیرندگان برای پیکربندی سامانه باید یک اسکریپت شِل را اجرا کنند که متغیر*های آن می*تواند از یک کارگزار که به صورت بالقوه آلوده شده است گرفته شود. که در نهایت منجر به اجرای فرمان*های مخرب در ماشین سرویس*گیرنده می*شود.
مانند همه*ی زبان*های برنامه*نویسی، بَش نیز دارای توابع است، اگرچه در بسیاری از مواقع کارایی این توابع به اندازه*ی زبان*های برنامه*نویسی سطح بالا نیست، ولی به*هرحال این احتمال وجود دارد که یک تابع به عنوان مقدار متغیر محیطی درج شود.
تعریف یک تابع به عنوان متغیر محیطی زمانی امکان*پذیر است که کد اضافی در انتهای تعریف تابع افزوده شود، مانند مثال زیر:
کد PHP:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"vulnerablethis is a test
کد PHP:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"bash: warning: x: ignoring function definition attemptbash: error importing function definition for `x'this is a test
کامنت