کشف آسیب‌پذیری در فریم‌ورک LangChain-AI

کشف آسیب‌پذیری در فریم‌ورک LangChain-AI

تاریخ ایجاد

LangChain چارچوبی است که جهت ساده‌سازی ایجاد برنامه‌ها با استفاده از مدل‌های زبانی بزرگ (LLM) طراحی شده ‌است. به عنوان یک چارچوب ادغام مدل‌های زبانی، موارد استفاده LangChain تا حد زیادی با موارد استفاده از مدل‌های زبان به طور کلی، از جمله تجزیه و تحلیل اسناد و خلاصه‌سازی، ربات‌های گفتگو، و تجزیه و تحلیل کد همپوشانی دارند.
LangChain به مدل‌های زبانی LLM اجازه می‌دهد که بر اساس به‌روزترین داده‌های قابل دسترسی آنلاین پاسخ‌هایی ایجاد کنند و فرآیند سازمان‌دهی حجم وسیعی از داده‌ها را ساده می‌کند تا دسترسی LLMها به داده‌ها سریع‌تر شود. به این ترتیب LangChain توسعه‌دهندگان را در ساخت برنامه‌های کاربردی پویا و پاسخگو به داده یاری می‌رساند.
آسیب‌پذیری با شناسه‌ی CVE-2024-3571 و شدت متوسط و امتیاز CVSS 6.5 در این فریمورک کشف شده‌ است. langchain به دلیل عدم اعمال محدودیت مناسب نام مسیر به یک دایرکتوری محدودشده در عملکرد  LocalFileStore، در برابر حمله پیمایش مسیر (path/directory traversal) آسیب‌پذیر است.
Path Traversal از جمله آسیب‌پذیری‌های Server-Side یا سمت سرور به شمار می‌رود و وجود این نقص، به معنی آسیب‌پذیری برنامه در مرحله‌ی Authorization یا اعطای دسترسی می‌باشد. وقتی که یک وب‌سایت، دچار این آسیب‌پذیری می‌شود، امکان دسترسی به مسیر‌ها و پوشه‌های وب‌سرور، در سمت کاربر (Client-Side) به وجود می‌آید. با این شرایط، در صورتی که وب‌سایت توسط یک مهاجم مورد حمله قرار بگیرد، به واسطه‌ی وجود این نقص، مهاجم امکان دسترسی به پوشه‌ها و مسیرهایی را پیدا می‌کند که حاوی اطلاعاتی مهم از سرور ‌سایت آسیب‌پذیر می‌باشند و در بعضی شرایط، مهاجم امکان ایجاد تغییر در این اطلاعات را هم خواهد داشت که می‌تواند موجب گرفتن دسترسی کامل سیستم سرور توسط مهاجم شود.
نقص فریمورک Lang chain، در نحوه‌ی مدیریت دایرکتوری‌ها ‌است و در نتیجه‌ی عملکرد توابع mset و mget بروز پیدا می‌کند، جایی که ورودی ارائه‌شده توسط کاربر به اندازه کافی فیلتر نشده ‌است و امکان دسترسی به دایرکتوری‌های دلخواه توسط مهاجم را فراهم می‌آورد.
 

شکل 1: قسمتی از کد منبع LangChain

شکل 1: قسمتی از کد منبع LangChain


با توجه به کد منبع(شکل ۱)، کاربر می‌تواند یک نمونه LocalFileStore ایجاد کرده و روی آن عملیات انجام دهد. انتظار می‌رود که اگر کاربر مکان فعالیت LocalFileStore را در یک مسیر مشخص مانند cache./ مشخص کند، باید تنظیم یا دریافت مقادیر فقط از آن دایرکتوری ممکن باشد. با این حال، اگر به باقی کد منبع LocalFileStore توجه کنیم میبینیم که اینطور نیست.
 

شکل 2: توابع mget و mset

شکل 2: توابع mget و mset


مطابق شکل۲، mset و mget یک جفت کلید و مقدار (key-value) می‌گیرند، مسیر کامل کلید را دریافت می‌کنند و اگر مسیر معتبری باشد، نام فایل را به عنوان کلید و محتوای فایل را به عنوان مقدار(value) تنظیم می‌کنند. به این ترتیب، مهاجم می‌تواند از این قابلیت برای خواندن/نوشتن هر فایلی در فایلسیستم استفاده کند.
مهاجم می‌تواند از این آسیب‌پذیری نه تنها برای سرقت اطلاعات بسیار حساس از هرنقطه‌ای در سیستم استفاده کند، بلکه به طور بالقوه سرور را با رونویسی فایل‌های حساس که به مهاجم اجازه‌ی دسترسی به سیستم میزبان را می‌دهد، تسخیر کند. همچنین این آسیب‌پذیری امکان اجرای کد از راه دور را نیز فراهم‌ می‌کند.

توصیه‌های امنیتی
توصیه می‌شود برای مسیر/دایرکتوری محدودیت‌هایی اضافه شود تا LocalFileStore فقط در یک مکان امن در فایل‌سیستم راه‌اندازی شود. همچنین محدود کردن عملکرد‌های set-get-delete به نحوی که فقط در محدوده مسیر اصلی LocalFileStore کار کنند و هنگام خواندن، نوشتن یا حذف یک فایل، پیمایش مسیر ممکن نباشد نیز مفید خواهد بود.

منابع خبر:


[1] https://nvd.nist.gov/vuln/detail/CVE-2024-3571
[2] https://huntr.com/bounties/2df3acdc-ee4f-4257-bbf8-a7de3870a9d8