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
practice-22-23 — análise CVE-2017-9608 | Kitploit
Ferramentas/GitHubGitHub/lacinquette/practice-22-23
Segurança de ContêineresAnálise de VulnerabilidadesExploraçãoFuzzingAnálise de BináriosAprendizado e Educação
GitHublacinquette/practice-22-23

practice-22-23

análise CVE-2017-9608

Ver Repositório
6há 3 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

Projeto

Para executar: ./script.sh

Repositório no GitHub - https://github.com/LaCinquette/practice-22-23

Andamento

  1. Para buscar uma vulnerabilidade, escolhi o projeto FFmpeg. Encontrei nele um commit, que atendia aos requisitos, a saber:

    • Correspondia ao tipo CWE-476 - desreferenciamento de ponteiro nulo
  2. Criei um Dockerfile, no qual:

    1. Escolhi como imagem base Ubuntu 22.04
    2. Configurei DEBIAN_FRONTEND=nointeractive para evitar interação com a linha de comando durante a instalação de pacotes e outros comandos
    3. Instalei as dependências necessárias listadas na wiki oficial
    4. Preparo o ambiente de trabalho (pasta workdir)
    5. Baixo, descompacto e movo o commit com a vulnerabilidade ainda não corrigida para o ambiente de trabalho
    6. Executo a compilação do programa usando a ferramenta make
    7. Crio o script copy_out.sh, que procura o arquivo objeto necessário com o erro e o copia para o diretório workspace/out
    8. Deixo uma instrução para executar o script copy_out.sh, que deve ser executada ao iniciar o contêiner
  3. Para automação, crio o script script.sh, que constrói a imagem e inicia o contêiner, do qual então copio o arquivo e o movo para o diretório atual:

    1. Removo a pasta atual out (se existir)
    2. Construo a imagem com o nome ffmpeg_image
    3. Inicio o contêiner baseado na imagem construída, onde passo os seguintes parâmetros:
      • --rm para remoção automática do contêiner após a conclusão
      • -v $PWD/out:/workspace/out para montar um diretório temporário, através do qual o arquivo objeto é transferido para o host
    4. Copio o arquivo necessário da pasta out
    5. Removo a pasta out

Análise da Vulnerabilidade

Fontes:

  • Commit com o erro corrigido
  • Página no GitHub sobre a vulnerabilidade
  • Carta do pesquisador de segurança sobre a vulnerabilidade

Análise:

Problema:

  1. Usando o comando ffmpeg -c:v dnxhd -i poc.mov -y output.ts, um arquivo .mov especialmente criado é fornecido como entrada ao programa
  2. Para analisar o formato DNxHD, a função dnxhd_parse é chamada no arquivo dnxhd_parser
  3. Esta, por sua vez, chama a função dnxhd_find_frame_end (no mesmo arquivo), que sob certas condições não encontra o final e retorna um número negativo, que não é um código de erro
  4. Esse número, junto com outros parâmetros, é então passado para a função ff_combine_frame (localizada no arquivo parser) para combinar os quadros
  5. Como esse número não é um código de erro, ff_combine_frame o interpreta como um deslocamento e tenta ler novamente esses bytes no buffer, mas como o buffer está vazio nesse momento, ocorre uma desreferência de ponteiro nulo, resultando em uma falha de segmentação (Segmentation fault)

Em assembly:

0x08000d4e - início da seção

  1. movsxd rcx, dword [rbx + 0xc]

    No registrador rcx, obtemos a referência para pc->buffer

  2. add rcx, rdi

    Adicionamos next a pc->buffer

  3. add rcx, qword [rbx]

    Adicionamos pc->last_index a next e pc->buffer

  4. movzx edi, byte [rcx]

    Calculamos o byte no endereço rcx, mas como pc->buffer é inicialmente null, pegamos um Segmentation fault

Solução:

Prevenir o acesso a uma região de memória não alocada, tratando corretamente o caso excepcional. Ao detectar um número negativo de bytes restantes, continuar o processamento do arquivo pulando o ciclo.

Baixar ferramenta