در نسخههای 2.0.0 تا پیش از 2.2.0 فریمورک Dancer2 برای زبان Perl، یک نقص امنیتی شناسایی شده است که میتواند منجر به اجرای مسیرهایی (Routes) شود که پیشتر توسط یک Dying Hook رد شده بودند.
تحلیل فنی مشکل
این آسیبپذیری در نحوه مدیریت استثناها در متد compile_hooks رخ میدهد. زمانی که یک Hook با خطا مواجه شده و متوقف میشود (Die)، رویداد core.app.hook_exception فعال میگردد. در ادامه، اگر Hook شکستخورده، خودِ مدیریتکننده استثنا (Exception Handler) نباشد، متد cleanup فراخوانی میشود.
مکانیسم اکسپلویت
مشکل اصلی زمانی رخ میدهد که Handler مربوطه پاسخ (Response) را متوقف (Halt) کند. در این حالت، عملیات Cleanup متوقف نشده و باعث میشود درخواست (Request)، پاسخ و Session که دیسپچر (Dispatcher) هنوز آنها را نخوانده است، دور ریخته شوند. در نتیجه، مسیری که در ابتدا توسط سیستم رد شده بود، به اشتباه اجرا میگردد.
راهکار اصلاحی
برای جلوگیری از این رفتار، Handler باید شیء Response را با فراخوانی متد halt به طور کامل متوقف کند تا از اجرای غیرمنتظره مسیرهای رد شده جلوگیری شود. توصیه میشود تمامی مدیران سیستم و توسعهدهندگانی که از این فریمورک استفاده میکنند، سریعاً به نسخه 2.2.0 یا بالاتر ارتقا دهند.