لینک کوتاه مطلب : https://hsgar.com/?p=5975

آسیب پذیری پیمایش مسیر نسبی اجازه می‌دهد TZInfo::Timezone.get فایل های دلخواه را بارگیری کند

تأثیر

نسخه های تحت تأثیر

  • 0.3.60 و قبل از آن.
  • 1.0.0 تا 1.2.9 هنگام استفاده با منبع داده Ruby (tzinfo-data).

آسیب پذیری

با منبع داده Ruby (گوهر tzinfo-data برای tzinfo نسخه 1.0.0 و جدیدتر و داخلی در نسخه‌های قبلی)، مناطق زمانی در فایل‌های Ruby تعریف می‌شوند. در هر منطقه زمانی یک فایل وجود دارد. فایل های منطقه زمانی بارگذاری می شوند require بر اساس تقاضا. در نسخه های آسیب دیده، TZInfo::Timezone.get نمی تواند شناسه های منطقه زمانی را به درستی تأیید کند و به یک کاراکتر خط جدید در شناسه اجازه می دهد. با روبی نسخه 1.9.3 و بالاتر، TZInfo::Timezone.get را می توان برای بارگذاری فایل های ناخواسته با require، آنها را در فرآیند Ruby اجرا کنید.

به عنوان مثال، با نسخه 1.2.9، می توانید موارد زیر را برای بارگذاری یک فایل با مسیر اجرا کنید /tmp/payload.rb:

TZInfo::Timezone.get("foon/../../../../../../../../../../../../../../../../tmp/payload")

تعداد دقیق پیمایش های دایرکتوری والد مورد نیاز بسته به محل gem tzinfo-data متفاوت خواهد بود.

نسخه های TZInfo 1.2.6 تا 1.2.9 را می توان برای بارگیری فایل ها از خارج از مسیر بارگذاری Ruby ساخت. نسخه های تا و شامل 1.2.5 را فقط می توان برای بارگیری فایل ها از فهرست های موجود در مسیر بارگذاری ساخت.

به عنوان مثال، این می تواند در یک برنامه Ruby on Rails با استفاده از tzinfo نسخه 1.2.9 مورد سوء استفاده قرار گیرد، که امکان آپلود فایل را می دهد و دارای یک انتخابگر منطقه زمانی است که شناسه های منطقه زمانی دلخواه را می پذیرد. امتیاز و شدت CVSS بر این اساس تعیین شده است.

نسخه های 2.0.0 و جدیدتر آسیب پذیر نیستند.

وصله ها

نسخه‌های 0.3.61 و 1.2.10 دارای اصلاحاتی برای اعتبارسنجی صحیح شناسه‌های منطقه زمانی هستند.

توجه داشته باشید که نسخه 0.3.61 همچنان می‌تواند فایل‌های دلخواه را از مسیر بارگذاری Ruby بارگیری کند، اگر نام آنها از قوانین یک شناسه منطقه زمانی معتبر پیروی کند و فایل دارای پیشوندی باشد. tzinfo/definition در یک دایرکتوری در مسیر بارگذاری به عنوان مثال اگر /tmp/upload پس در مسیر بار قرار داشت TZInfo::Timezone.get('foo') می تواند یک فایل با مسیر بارگذاری کند /tmp/upload/tzinfo/definition/foo.rb. برنامه ها باید اطمینان حاصل کنند که فایل های غیرقابل اعتماد در یک فهرست در مسیر بارگذاری قرار نمی گیرند.

راه حل ها

به عنوان یک راه حل، شناسه منطقه زمانی را می توان قبل از ارسال به اعتبارسنجی کرد TZInfo::Timezone.get با اطمینان از مطابقت آن با عبارت منظم A[A-Za-z0-9+-_]+(?:/[A-Za-z0-9+-_]+)*z.

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.