تشریح آسیب پذیری ایکس اس اس بازتابی (reflected xss) در محصول Teampass password manager


در این گزارش قصد داریم به تشریح یک آسیب پذیری ایکس اس اس بازتابی (reflected xss) در محصول Teampass password manager که توسط تیم تست نفوذ وب اپلیکیشن شرکت راسپینا نت پارس کشف شده، بپردازیم. 
این آسیب پذیری با درجه حساسیت متوسط (1/6) از سوی MITRE کد آسیب‌پذیری (CVE-2022-26980)  را دریافت نموده و در پایگاه داده آسیب پذیری ملی آمریکا (NVD) در آدرس زیر فهرست شده است:
(https://nvd.nist.gov/vuln/detail/CVE-2022-26980)
از آنجایی که ورودی کاربر در سمت کلاینت به درستی کنترل نمی‌شود این امکان وجود دارد که بتوان کد مخربی را بر روی آدرسی که نسخه آسیب پذیر نرم‌افزار Team pass password manager نصب شده در مسیر index.php بارگذاری و اجرا کرد. در این پست به تشریح بهره‌برداری از آسیب پذیری موجود بر رویPassword Manager  Teampass نسخه 2.1.26 می‌پردازیم.  
آسیب پذیری یا باگ Reflected XSS هنگامی رخ می‌دهد که وب اپلیکیشن، به روشی ناامن اقدام به استفاده و پردازش بر روی داده‌های دریافتی از درخواست ها از سمت کاربر نماید. بنابراین زمانی که وب اپلیکیشن، داده‌های دریافتی از URL را به روشی ناامن نمایش دهد نفوذگر قادر خواهد بود از طریق ارسال لینک آلوده به قربانیان کاربران را به دام انداخته و اسکریپت‌هایی را روی مرورگر کاربران اجرا نماید.
در خصوص آسیب پذیری Reflected Cross-site scripting که بر روی آدرس هدف مورد نظر اعمال می‌شود می‌توان گفت پس از لود شدن آدرس index.php مهاجم به کمک ابزار burp suite در هنگام بارگذاری آدرس هدف، ترافیک بین کلاینت و سرور را دریافت می‌کند. به این صورت که مهاجم ابزار burp suite را اجرا کرده و در قسمت proxy گزینه intercept را فعال می‌کند و سپس آدرس دامنه مورد نظر را در مرورگر ابزار برپ وارد کرده و در تب proxy ترافیک بین کلاینت و سرور را ضبط می‌کند. تصویر شماره 1 و 2  این موضوع را نشان می‌دهد. 
 

Vulnerable path traffic recording

تصویر شماره 1: ضبط ترافیک مسیر آسیب پذیر

Receiving traffic sent to the server

تصویر شماره 2: دریافت ترافیک ارسالی به سمت سرور

در این مرحله مهاجم درخواست مذبور را به کمک ابزار برپ تغییر داده و در انتهای آدرس index.php پیلود مخرب خود را که یک قطعه کد جاوا اسکریپت است وارد نموده و سپس درخواست را به سمت سرور ارسال می‌کند. این کار با فشردن دکمه forward انجام می‌شود. تصویر شماره 3 این موضوع را نشان می‌دهد. 

Injection of malicious JavaScript code

تصویر شماره 3 : تزریق کد جاوا اسکریپت مخرب

به عنوان نتیجه حمله در مرورگر شاهد اجرای کد مخربی خواهیم بود که فرد مهاجم وارد کرده است. تصویر شماره 4 گویای این مطلب است. 

اجرای کد مخرب در مرورگر قربانی

تصویر شماره 4: اجرای کد مخرب در مرورگر قربانی

برای رفع این آسیب‌پذیری توصیه می‌شود موارد زیر رعایت شوند:

• نرم‌افزار مورد استفاده به آخرین نسخه پایدار به روز رسانی شود.

• قبل از قرار گرفتن داده‌های ورودی کاربر، داخل تگ‌های شناخته شده، مانند> <span> ،<div> ،<body می‌بایست ابتدا داده‌های ورودی به درستی بررسی شده و در صورت معتبر بودن، بین تگ‌های مذکور قرار گیرند.

• با افزودن هدرهای امنیتی  HTTPکه در ذیل به تعریف آنها پرداخته شده است، می‌توان از این آسیب‌پذیری جلوگیری نمود.

• :X-XSS-Protection از این هدر برای جلوگیری از حملات  Cross-Site Scripting (XSS)استفاده می‌شود.

• در نظر گرفتن محل مناسب، جهت ذخیره سازی داده‌های ورودی کاربر، داخل بدنه اصلی سایت، الزامی است. اگر این داده‌ها به درستی در جای مناسب ذخیره نشوند، امکان رخ دادن آسیب‌پذیری، XSS افزایش می‌یابد. برای مثال:

 اطلاعات وارد شده توسط کاربر نباید بین تگ‌های شناخته شده مانند> <style>،<script و غیره قرار گیرد. 

• داده‌هایی که حاوی نمادهای % ، *، +، -، / ، ;، < ، =، >،  ^ هستند. قبل از قرار گرفتن در محل مورد نظر، می‌بایست از مخرب نبودن آن‌ها اطمینان حاصل نمود.