یک آسیبپذیری امنیتی در کتابخانه django-haystack در نسخههای تا 3.3.0 شناسایی شده است که امکان اجرای کد از راه دور (Remote Code Execution یا RCE) را فراهم میکند. این نقص امنیتی در تابع _to_python در فایل haystack/backends/elasticsearch_backend.py و در بخش مدیریت تگ more_like_this قرار دارد.
جزئیات فنی و مکانیسم حمله
در این آسیبپذیری، دستکاری آرگومان result_class منجر به خنثیسازی نادرست دستورات در کدهای ارزیابیشده به صورت پویا (Dynamically Evaluated Code) میشود. در واقع، یک رشته تحت کنترل مهاجم در مسیر Deserialization نتایج به تابع eval() ارسال شده و در محیط پردازش اپلیکیشن Django اجرا میگردد.
شرایط بهرهبرداری (Exploitation)
بهرهبرداری از این نقص امنیتی به صورت کلی نیست و نیازمند شرایط خاصی است:
- استفاده از بکاند Elasticsearch.
- تعریف حداقل یک
SearchFieldبا یک نام مستعار (Alias) برایindex_fieldnameکه با نام منطقی فیلد متفاوت باشد. - توانایی تزریق یک Payload مخرب به آن فیلد مستعار و بازگرداندن آن در یک جستجوی بعدی (حمله از نوع Second-order یا Stored Injection).
راهکار اصلاحی
برای رفع این مشکل، توصیه میشود تمامی کاربران این کتابخانه سریعاً به نسخه 3.4.0 ارتقا دهند. این نسخه شامل پچ اصلاحی لازم برای بستن این حفره امنیتی است.