XML External Entities Injections (XXE)

دسته OWASP: MASVS-CODE: کیفیت کد

نمای کلی

تزریق موجودیت خارجی XML (XXE) یک حمله علیه برنامه‌هایی است که ورودی XML را تجزیه می‌کنند. یک حمله XXE زمانی اتفاق می‌افتد که ورودی XML نامعتبر با ارجاع به یک موجودیت خارجی توسط یک تجزیه‌کننده XML با پیکربندی ضعیف پردازش شود. این حمله می تواند برای صحنه سازی چندین حادثه، از جمله انکار سرویس، دسترسی به سیستم فایل، یا استخراج داده ها مورد استفاده قرار گیرد.

تاثیر

هنگامی که یک برنامه کاربردی یک سند XML را تجزیه می کند، می تواند هر نوع DTD (تعریف نوع سند، همچنین به عنوان موجودیت های خارجی) موجود در سند را پردازش کند. یک مهاجم می تواند با تزریق کد مخرب به عنوان DTD از این رفتار سوء استفاده کند. سپس این کد می‌تواند به بخش‌هایی از سیستم فایل دستگاه دسترسی داشته باشد که فقط برای برنامه قابل دسترسی است و احتمالاً حاوی داده‌های حساس است. علاوه بر این، این کد مخرب می‌تواند درخواست‌هایی را از دستگاه ارسال کند و به طور بالقوه اقدامات امنیتی محیطی را دور بزند.

در نهایت، اگر برنامه DTD ها را گسترش دهد، این می تواند وضعیتی را با تکرارهای متعدد موجودیت های ارجاع شده ایجاد کند، منابع دستگاه را تمام کند و منجر به انکار سرویس شود.

اقدامات کاهشی

DTD ها را غیرفعال کنید

امن ترین راه برای جلوگیری از XXE این است که همیشه DTD ها (موجودات خارجی) را به طور کامل غیرفعال کنید. بسته به تجزیه کننده مورد استفاده، روش می تواند شبیه به مثال زیر برای کتابخانه XML Pull Parser باشد:

جاوا

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

کاتلین

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

غیرفعال کردن DTD ها همچنین تجزیه کننده را در برابر حملات انکار سرویس ایمن می کند. اگر غیرفعال کردن DTD ها به طور کامل امکان پذیر نیست، موجودیت های خارجی و اعلان های نوع سند خارجی باید به روشی که مختص هر تجزیه کننده است غیرفعال شوند.

به دلیل تعداد زیاد موتورهای تجزیه XML در بازار، راه های جلوگیری از حملات XXE در موتورهای مختلف متفاوت است. ممکن است لازم باشد برای اطلاعات بیشتر به مستندات موتور خود مراجعه کنید.

پاکسازی ورودی را انجام دهید

برنامه باید دوباره پیکربندی شود تا به کاربران اجازه تزریق کد دلخواه در مقدمه سند XML را ندهد. این باید در سمت سرور تأیید شود، زیرا کنترل های سمت سرویس گیرنده را می توان دور زد.

از کتابخانه دیگری استفاده کنید

اگر کتابخانه یا روش مورد استفاده را نمی توان به شیوه ای امن پیکربندی کرد، باید روش دیگری در نظر گرفته شود. XML Pull Parser و SAX Parser هر دو می توانند به روشی ایمن پیکربندی شوند و DTD ها و موجودیت ها را مجاز نمی دانند.

منابع

،

دسته OWASP: MASVS-CODE: کیفیت کد

نمای کلی

تزریق موجودیت خارجی XML (XXE) یک حمله علیه برنامه‌هایی است که ورودی XML را تجزیه می‌کنند. یک حمله XXE زمانی اتفاق می‌افتد که ورودی XML نامعتبر با ارجاع به یک موجودیت خارجی توسط یک تجزیه‌کننده XML با پیکربندی ضعیف پردازش شود. این حمله می تواند برای صحنه سازی چندین حادثه، از جمله انکار سرویس، دسترسی به سیستم فایل، یا استخراج داده ها مورد استفاده قرار گیرد.

تاثیر

هنگامی که یک برنامه کاربردی یک سند XML را تجزیه می کند، می تواند هر نوع DTD (تعریف نوع سند، همچنین به عنوان موجودیت های خارجی) موجود در سند را پردازش کند. یک مهاجم می تواند با تزریق کد مخرب به عنوان DTD از این رفتار سوء استفاده کند. سپس این کد می‌تواند به بخش‌هایی از سیستم فایل دستگاه دسترسی داشته باشد که فقط برای برنامه قابل دسترسی است و احتمالاً حاوی داده‌های حساس است. علاوه بر این، این کد مخرب می‌تواند درخواست‌هایی را از دستگاه ارسال کند و به طور بالقوه اقدامات امنیتی محیطی را دور بزند.

در نهایت، اگر برنامه DTD ها را گسترش دهد، این می تواند وضعیتی را با تکرارهای متعدد موجودیت های ارجاع شده ایجاد کند، منابع دستگاه را تمام کند و منجر به انکار سرویس شود.

اقدامات کاهشی

DTD ها را غیرفعال کنید

امن ترین راه برای جلوگیری از XXE این است که همیشه DTD ها (موجودات خارجی) را به طور کامل غیرفعال کنید. بسته به تجزیه کننده مورد استفاده، روش می تواند شبیه به مثال زیر برای کتابخانه XML Pull Parser باشد:

جاوا

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

کاتلین

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

غیرفعال کردن DTD ها همچنین تجزیه کننده را در برابر حملات انکار سرویس ایمن می کند. اگر غیرفعال کردن DTD ها به طور کامل امکان پذیر نیست، موجودیت های خارجی و اعلان های نوع سند خارجی باید به روشی که مختص هر تجزیه کننده است غیرفعال شوند.

به دلیل تعداد زیاد موتورهای تجزیه XML در بازار، راه های جلوگیری از حملات XXE در موتورهای مختلف متفاوت است. ممکن است لازم باشد برای اطلاعات بیشتر به مستندات موتور خود مراجعه کنید.

پاکسازی ورودی را انجام دهید

برنامه باید دوباره پیکربندی شود تا به کاربران اجازه تزریق کد دلخواه در مقدمه سند XML را ندهد. این باید در سمت سرور تأیید شود، زیرا کنترل های سمت سرویس گیرنده را می توان دور زد.

از کتابخانه دیگری استفاده کنید

اگر کتابخانه یا روش مورد استفاده را نمی توان به شیوه ای امن پیکربندی کرد، باید روش دیگری در نظر گرفته شود. XML Pull Parser و SAX Parser هر دو می توانند به روشی ایمن پیکربندی شوند و DTD ها و موجودیت ها را مجاز نمی دانند.

منابع

،

دسته OWASP: MASVS-CODE: کیفیت کد

نمای کلی

تزریق موجودیت خارجی XML (XXE) یک حمله علیه برنامه‌هایی است که ورودی XML را تجزیه می‌کنند. یک حمله XXE زمانی اتفاق می‌افتد که ورودی XML نامعتبر با ارجاع به یک موجودیت خارجی توسط یک تجزیه‌کننده XML با پیکربندی ضعیف پردازش شود. این حمله می تواند برای صحنه سازی چندین حادثه، از جمله انکار سرویس، دسترسی به سیستم فایل، یا استخراج داده ها مورد استفاده قرار گیرد.

تاثیر

هنگامی که یک برنامه کاربردی یک سند XML را تجزیه می کند، می تواند هر نوع DTD (تعریف نوع سند، همچنین به عنوان موجودیت های خارجی) موجود در سند را پردازش کند. یک مهاجم می تواند با تزریق کد مخرب به عنوان DTD از این رفتار سوء استفاده کند. سپس این کد می‌تواند به بخش‌هایی از سیستم فایل دستگاه دسترسی داشته باشد که فقط برای برنامه قابل دسترسی است و احتمالاً حاوی داده‌های حساس است. علاوه بر این، این کد مخرب می‌تواند درخواست‌هایی را از دستگاه ارسال کند و به طور بالقوه اقدامات امنیتی محیطی را دور بزند.

در نهایت، اگر برنامه DTD ها را گسترش دهد، این می تواند وضعیتی را با تکرارهای متعدد موجودیت های ارجاع شده ایجاد کند، منابع دستگاه را تمام کند و منجر به انکار سرویس شود.

اقدامات کاهشی

DTD ها را غیرفعال کنید

امن ترین راه برای جلوگیری از XXE این است که همیشه DTD ها (موجودات خارجی) را به طور کامل غیرفعال کنید. بسته به تجزیه کننده مورد استفاده، روش می تواند شبیه به مثال زیر برای کتابخانه XML Pull Parser باشد:

جاوا

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

کاتلین

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

غیرفعال کردن DTD ها همچنین تجزیه کننده را در برابر حملات انکار سرویس ایمن می کند. اگر غیرفعال کردن DTD ها به طور کامل امکان پذیر نیست، موجودیت های خارجی و اعلان های نوع سند خارجی باید به روشی که مختص هر تجزیه کننده است غیرفعال شوند.

به دلیل تعداد زیاد موتورهای تجزیه XML در بازار، راه های جلوگیری از حملات XXE در موتورهای مختلف متفاوت است. ممکن است لازم باشد برای اطلاعات بیشتر به مستندات موتور خود مراجعه کنید.

پاکسازی ورودی را انجام دهید

برنامه باید دوباره پیکربندی شود تا به کاربران اجازه تزریق کد دلخواه در مقدمه سند XML را ندهد. این باید در سمت سرور تأیید شود، زیرا کنترل های سمت سرویس گیرنده را می توان دور زد.

از کتابخانه دیگری استفاده کنید

اگر کتابخانه یا روش مورد استفاده را نمی توان به شیوه ای امن پیکربندی کرد، باید روش دیگری در نظر گرفته شود. XML Pull Parser و SAX Parser هر دو می توانند به روشی ایمن پیکربندی شوند و DTD ها و موجودیت ها را مجاز نمی دانند.

منابع

،

دسته OWASP: MASVS-CODE: کیفیت کد

نمای کلی

تزریق موجودیت خارجی XML (XXE) یک حمله علیه برنامه‌هایی است که ورودی XML را تجزیه می‌کنند. یک حمله XXE زمانی اتفاق می‌افتد که ورودی XML نامعتبر با ارجاع به یک موجودیت خارجی توسط یک تجزیه‌کننده XML با پیکربندی ضعیف پردازش شود. این حمله می تواند برای صحنه سازی چندین حادثه، از جمله انکار سرویس، دسترسی به سیستم فایل، یا استخراج داده ها مورد استفاده قرار گیرد.

تاثیر

هنگامی که یک برنامه کاربردی یک سند XML را تجزیه می کند، می تواند هر نوع DTD (تعریف نوع سند، همچنین به عنوان موجودیت های خارجی) موجود در سند را پردازش کند. یک مهاجم می تواند با تزریق کد مخرب به عنوان DTD از این رفتار سوء استفاده کند. سپس این کد می‌تواند به بخش‌هایی از سیستم فایل دستگاه دسترسی داشته باشد که فقط برای برنامه قابل دسترسی است و احتمالاً حاوی داده‌های حساس است. علاوه بر این، این کد مخرب می‌تواند درخواست‌هایی را از دستگاه ارسال کند و به طور بالقوه اقدامات امنیتی محیطی را دور بزند.

در نهایت، اگر برنامه DTD ها را گسترش دهد، این می تواند وضعیتی را با تکرارهای متعدد موجودیت های ارجاع شده ایجاد کند، منابع دستگاه را تمام کند و منجر به انکار سرویس شود.

اقدامات کاهشی

DTD ها را غیرفعال کنید

امن ترین راه برای جلوگیری از XXE این است که همیشه DTD ها (موجودات خارجی) را به طور کامل غیرفعال کنید. بسته به تجزیه کننده مورد استفاده، روش می تواند شبیه به مثال زیر برای کتابخانه XML Pull Parser باشد:

جاوا

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

کاتلین

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

غیرفعال کردن DTD ها همچنین تجزیه کننده را در برابر حملات انکار سرویس ایمن می کند. اگر غیرفعال کردن DTD ها به طور کامل امکان پذیر نیست، موجودیت های خارجی و اعلان های نوع سند خارجی باید به روشی که مختص هر تجزیه کننده است غیرفعال شوند.

به دلیل تعداد زیاد موتورهای تجزیه XML در بازار، راه های جلوگیری از حملات XXE در موتورهای مختلف متفاوت است. ممکن است لازم باشد برای اطلاعات بیشتر به مستندات موتور خود مراجعه کنید.

پاکسازی ورودی را انجام دهید

برنامه باید دوباره پیکربندی شود تا به کاربران اجازه تزریق کد دلخواه در مقدمه سند XML را ندهد. این باید در سمت سرور تأیید شود، زیرا کنترل های سمت سرویس گیرنده را می توان دور زد.

از کتابخانه دیگری استفاده کنید

اگر کتابخانه یا روش مورد استفاده را نمی توان به شیوه ای امن پیکربندی کرد، باید روش دیگری در نظر گرفته شود. XML Pull Parser و SAX Parser هر دو می توانند به روشی ایمن پیکربندی شوند و DTD ها و موجودیت ها را مجاز نمی دانند.

منابع