یک آسیبپذیری با شدت بالا (High) در تابع quote() متعلق به کتابخانه shell-quote شناسایی شده است که میتواند منجر به اجرای دستورات دلخواه (Arbitrary Command Execution) در محیطهای مختلف Shell شود.
جزئیات فنی آسیبپذیری
این نقص امنیتی زمانی رخ میدهد که تابع quote() یک توکن از نوع { comment } را پردازش میکند. در این حالت، خروجی با کاراکتر # شروع شده و باقیمانده خط را به عنوان کامنت در نظر میگیرد. این رفتار باعث میشود که علامت نقلقول (Quote) ابتدایی در توکنهای رشتهای بعدی نادیده گرفته شود.
اگر در رشتههای بعدی یک کاراکتر پایان خط (Line Terminator) مانند n، r یا استانداردهای U+2028 و U+2029 وجود داشته باشد، اثر کامنت در همان نقطه پایان مییابد و باقیمانده رشته به عنوان ورودی مستقیم Shell تفسیر و اجرا میشود.
سناریوی حمله (PoC)
به عنوان مثال، اجرای کد زیر در محیطهای sh، bash، dash، ksh و zsh منجر به اجرای دستور id میشود:
quote(['echo', 'ok', { comment: 'x' }, 'anid;#'])
در این سناریو، کاراکتر n باعث خروج از حالت کامنت شده و دستور id مستقیماً توسط Shell اجرا میگردد.
تأثیرات و محیطهای آسیبپذیر
این آسیبپذیری تمامی سیستمهایی که از این کتابخانه برای ایمنسازی ورودیهای Shell استفاده میکنند را تحت تأثیر قرار میدهد. با توجه به اینکه این نقص در اکثر Shellهای رایج لینوکس و یونیکس قابل بازتولید است، ریسک اجرای کد از راه دور (RCE) در برنامههای آسیبپذیر بسیار بالا ارزیابی میشود.