خواندن فایل سیستمی با یک External Entity ساده در XML
چگونه یک پارسر XML با پردازش DTD فعال، به ابزاری برای خواندن فایلهای دلخواه سرور تبدیل میشود.
اگر پارسر XML بهصورت پیشفرض DTD و external entity را پردازش کند، یک payload مثل زیر محتوای فایل /etc/passwd را در پاسخ XML بازمیگرداند:
<?xml version="1.0"?>\n<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>\n<foo>&xxe;</foo>
نحوهی شناسایی
- هر endpointی که XML میپذیرد (حتی اگر اصلیترین فرمت نباشد، مثل SOAP یا آپلود SVG) را با این payload تست کنید.
راهحل
غیرفعالکردن کامل پردازش DTD/external entity در تنظیمات پارسر XML (در اکثر زبانها این یک تنظیم ساده و مستند است)؛ این تنها دفاع واقعی و کافی است.