آسیب پذیری Code Injection

آسیب پذیری Code Injection


در این آسیب پذیری مهاجم تلاش می کند با استفاده از ضعف برنامه نویسی در مدیریت ورودی ها و همچنین عدم فیلتر گذاری مناسب بر روی ورودی، کد خود را به برنامه تزریق و اجرا نماید. این آسیب پذیری می تواند بالاترین سطح دسترسی که کاربر برنامه قادر به انجام آن می باشد را در اختیار مهاجم قرار دهد.

تفاوت Code Injection و Command Injection در این است که در آسیب پذیری Code Injection مهاجم می تواند کد خودش را در نرم افزار تزریق کند و در نهایت نرم افزار این کد را اجرا خواهد کرد، ولی در Command Injection مهاجم عملکرد پیش فرض نرم افزار که اجرای دستورات است را گسترش داده و Command خود را برای اجرا در کنار دستورات پیش فرض برنامه قرار می دهد و در حالت کلی عملیات تزریق کد مورد نیاز نمی باشد.

به طور مثال فرض کنید تابع eval به صورت زیر به کار رفته است.

$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

در صورت عدم وجود Validation مناسب مهاجم می تواند با استفاده از دستور زیر تنظیمات PHP را به صورت غیر مجاز مشاهده نماید.

/index.php?arg=1; phpinfo()

این مثال از سایت OWASP برداشته شده و به هیچ عنوان جنبه آموزشی ندارد و تنها مثالی است برای درک بهتر این آسیب پذیری.


چگونه این آسیب پذیری را رفع کنیم ؟


  • فیلتر کردن کاراکتر های زیر در ورودی کاربر در حالت کلی (بدون توجه به نوع سیستم عامل)
    |  ; & $ > < ' \  ! >> # 
    
  • فیلتر کردن کاراکتر های زیر در ورودی کاربر برای سیستم عامل ویندوز
    ( ) < > & * ‘ | = ? ; [ ] ^ ~ ! . ” % @ / \ : + , `
    
  • فیلتر کردن کاراکتر های زیر در ورودی کاربر برای سیستم عامل لینوکس
     { }  ( ) < > & * ‘ | = ? ; [ ]  $ – # ~ ! . ” %  / \ : + , ` 
    

برای مشاهده ی سایر آسیب پذیری ها، روی این لینک کلیک نمائید.