آسیب‌پذیری بحرانی در محصولات Jenkins

آسیب‌پذیری بحرانی در محصولات Jenkins

تاریخ ایجاد

Jenkins، یک ابزار متن‌باز است که برای توسعه، استقرار و اتوماسیون پروژه‌ها مورد استفاده قرار می‌گیرد. شرکت Jenkins در خصوص یک ‫آسیب‌پذیری بحرانی در «وب‌سرور Jetty» که می‌تواند منجر به memory corruption و همچنین افشای اطلاعات محرمانه شود، هشدار داد. این آسیب‌پذیری بحرانی با شناسه CVE-2019-17638 و شدت 9.4 شناخته می‌شود و بر نرم‌افزار Eclipse Jetty نسخه‌های 9.4.27.v20200227 تا 9.4.29.v20200521 اثر می‌گذارد.
Jenkins که از طریق یک رابط خط فرمان به نام Winstone از Jetty استفاده می‌کند، به عنوان سرور HTTP و servlet در هنگام استفاده از java -jar jenkins.war عمل می‌کند. بدین ترتیب Jenkins هنگام استفاده از هر یک از نصب کننده‌ها یا بسته‌ها اجرا می‌شود، اما هنگام استفاده از Servlet Container مانند Tomcat، اجرا نخواهد شد. این آسیب‌پذیری ممکن است به یک مهاجم بدون نیاز به احراز هویت امکان دسترسی به سرآیندهای مربوط به پاسخHTTP که ممکن است حاوی اطلاعات حساسی باشند، فراهم می‌کند. به نظر می‌رسد این نقض که بر Jetty و هسته Jenkins تأثیر می‌گذارد، در Jetty نسخه 9.4.27 نیز وجود داشته است که مکانیزمی برای کنترل سرآیندهای بزرگ پاسخ HTTP و جلوگیری از سرریز بافر به آن اضافه شده است.
برای رفع این مشکل، Jetty جهت تولید خطای HTTP 431، سرآیند پاسخ HTTP را دو بار به داخل بافر وارد می‌کند که این مسئله منجر به memory corruption و افشای اطلاعات خواهد شد. به دلیل این نوع انتشار دوگانه، دو thread می‌توانند همزمان یک بافر را از مخزن بدست آورند و باعث می‌شود یک درخواست، به پاسخ درخواست داده شده توسط thread دیگر دسترسی داشته باشد، که این پاسخ ممکن است شامل شناسه نشست‌ها، اعتبارنامه‌های احراز هویت و سایر اطلاعات حساس باشد.
هنگامی که thread اول قصد دارد از ByteBuffer برای نوشتن داده‌های پاسخ 1 استفاده کند، thread دوم، ByteBuffer را با داده‌های پاسخ پر می‌کند. سپس thread اول نوشتن بافر که اکنون حاوی داده‌های پاسخ2 است را جهت مشاهده پاسخ که می‌تواند حاوی داده‌های حساس متعلق به کلاینت دوم باشد، ادامه می‌دهد.
memory corruption این امکان را برای کلاینت فراهم می‌کند که بین نشست‌ها حرکت کند و از این طریق به حساب‌های کاربری دیگر دسترسی داشته باشد، زیرا کوکی‌های احراز هویت از پاسخ یک کاربر به یک کاربر دیگر ارسال شده است و کاربر A می‌تواند در جلسه کاربر B پرش کند.
این آسیب‌پذیری که در ماه گذشته در Jetty 9.4.30.v20200611 منتشر شده بود، وصله شد. Jenkins این نقص را در برنامه‌های خود در Jenkins 2.243 و Jenkins LTS 2.235.5 وصله کرده است. به کاربران Jenkins توصیه می‌شود به منظور کاهش نقض corruption در بافر، هر چه سریع‌تر نرم‌افزار خود را به آخرین نسخه به‌روزرسانی کنند.
منبع:

[1] https://amp.thehackernews.com/thn/2020/08/jenkins-server-vulnerability.html
[2] https://nvd.nist.gov/vuln/detail/CVE-2019-17638