XSS ذخیرهشده از طریق آپلود فایل SVG
چرا یک "آپلود عکس" میتواند به اجرای جاوااسکریپت منجر شود.
فایلهای SVG در واقع فایلهای XML هستند و میتوانند تگ <script> یا attributeهای event-handler (مثل onload) داشته باشند. اگر سرور این فایل را مستقیماً (نه بعد از rasterize کردن به PNG) تحویل دهد و مرورگر آن را بهعنوان SVG رندر کند، جاوااسکریپت داخل آن اجرا میشود — یک XSS ذخیرهشده، فقط از طریق «آپلود یک عکس».
نحوهی شناسایی
- یک فایل SVG حاوی
<script>alert(document.domain)</script>آپلود کنید. - آن را مستقیم در مرورگر باز کنید و ببینید آیا اجرا میشود.
راهحل
فایلهای SVG آپلودی باید یا به یک فرمت rasterized تبدیل شوند، یا با یک sanitizer SVG معتبر پاکسازی شوند تا تگهای اسکریپت و event-handler حذف شوند.