
Хранимый межсайтовый скриптинг в "usememos" через SVG
Это довольно просто: хранимый XSS через SVG — очень распространенный способ поиска межсайтового скриптинга в дикой природе, поэтому это было одной из первых вещей, которые я сделал.
Я развернул usememos через Pikapods, после чего перешел на главную страницу и создал учетную запись. С помощью этой учетной записи я создал «мысль»:
Затем я создал SVG-файл, содержащий следующий payload:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
</svg>
Этот payload выполняет JavaScript, что приводит к выводу document.domain (то есть просто показывает *.pikapod.net).
Я выбрал файл, в данном случае он назывался xss6.svg, после чего я мог «скопировать адрес изображения»:
Как вы заметили, XSS, к сожалению, не выполняется на главной странице. Я предпринял некоторые маневры, чтобы заставить его работать, но безуспешно. Таким образом, ввод скопированного URL-адреса приводит к всплывающему окну XSS, раскрывающему URL:
Подробнее об этой уязвимости читайте в моем блоге: https://tiem.io/cves/cve-2025-50738-stored-xss-via-svg/