کشف آسیب‌پذیری در کتابخانه cpp-httplib

کشف آسیب‌پذیری در کتابخانه cpp-httplib

تاریخ ایجاد

 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 به­روزرسانی نمایند.

منبع خبر