cpp-httplibیک کتابخانه HTTP/HTTPS سبک، تکفایلی، مبتنی بر C++ 11 و چندسکویی است. در نسخههای قبل از 0.27.0، یک آسیبپذیری وجود دارد که به مهاجم اجازه میدهد هدرهای HTTP تحت کنترل خود را طوری تزریق کند که بر متادیتای قابلمشاهده برای سرور، ثبت لاگها و تصمیمات مربوط به احراز هویت (authorization) تأثیر بگذارد.
مهاجم میتواند هدرهایی با نامهای REMOTE_ADDR، REMOTE_PORT، LOCAL_ADDR و LOCAL_PORT را تزریق کند که این هدرها در تابع read_headers() در فایل httplib.h با دستور headers.emplace در multimap هدرهای درخواست ذخیره میشوند. سپس سرور بعداً متادیتای داخلی خودش را با همان نامهای هدر در تابع Server::process_request اضافه میکند، بدون اینکه نسخههای تکراری قبلی را حذف کند.
از آنجایی که تابع Request::get_header_value همیشه اولین مقدار ثبتشده برای یک کلید هدر را برمیگرداند )زمانی که (id == 0 و هدرهای ارسالشده توسط کلاینت قبل از هدرهای داخلی سرور پردازش میشوند، کدهای پاییندستی (downstream) که از این نامهای هدر استفاده میکنند، ممکن است ناخواسته از مقادیر تحت کنترل مهاجم استفاده کنند.
فایلها و بخشهای آسیبدیده:
- cpp-httplib/httplib.h
توابع read_headers، Server::process_request، Request::get_header_value، get_header_value_u64) - cpp-httplib/docker/main.cc
توابع get_client_ip، nginx_access_logger، nginx_error_logger
هدرهای HTTP تحت کنترل مهاجم در درخواستهای ورودی وارد multimap، Request.headers میشوند و سپس به کدهای ثبت لاگ که هدرهای فورواردشده را میخوانند منتقل میگردند. این موضوع امکان جعل IP، مسمومسازی لاگها (log poisoning) و دور زدن مجوزها (authorization bypass) از طریق تکنیک header shadowingرا فراهم میکند. این آسیبپذیری در نسخه 0.27.0 برطرف شده است.
محصولات آسیبپذیر
نسخههای قبل از 0.27.0،
توصیههای امنیتی
به کاربران توصیه میشود در صورت استفاده از این کتابخانه آن را به نسخه 0.27.0 بهروزرسانی نمایند.
منبع خبر
- 44
