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
codeql-buffer-overflow-variant — Variante sintética de estouro de buffer de pilha CWE-120 de CVE-2020-8597 (pppd EAP) como um alvo de análise estática CodeQL | Kitploit
Ferramentas/GitHubGitHub/anna-kravets/codeql-buffer-overflow-variant
Análise EstáticaAnálise Estática de Código (SAST)Análise de VulnerabilidadesAnálise de Código
GitHubanna-kravets/codeql-buffer-overflow-variant

codeql-buffer-overflow-variant

Variante sintética de estouro de buffer de pilha CWE-120 de CVE-2020-8597 (pppd EAP) como um alvo de análise estática CodeQL

Ver Repositório

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
há 5 diasAinda não revisado

codeql-buffer-overflow-variant

Um programa C deliberadamente vulnerável, com cerca de 130 linhas, usado como alvo de análise estática com CodeQL. Ele reproduz a classe de bug da CVE-2020-8597 — o estouro de buffer de pilha rhostname do EAP do pppd (CWE-120) — em um programa que não compartilha nenhum dos nomes de funções, profundidade de chamada ou estrutura de despacho do pppd.

O objetivo é um teste de generalidade: uma consulta CodeQL escrita para detectar o bug do pppd também deve disparar neste programa, sem edições. Se isso ocorrer, a consulta expressa a classe de bug, e não o formato do código original.

Este programa é intencionalmente inseguro e existe apenas para análise. Não o implante. O bug que ele espelha é público (CVE-2020-8597, divulgada em 2020).

A classe de bug

Um comprimento derivado de um atacante é copiado para um buffer de tamanho fixo, sem nenhuma verificação que relacione esse comprimento ao tamanho do buffer.

Uma verificação de limites está presente — ela apenas verifica a coisa errada: o comprimento declarado é validado contra o quadro recebido (evitando uma leitura além do limite), mas nunca contra sizeof(dest) (que é o que evita a gravação além do limite). Essa é a mesma causa raiz da verificação morta vallen >= len + sizeof(rhostname) do pppd.

Estrutura vs. pppd (por que é uma variante real)

Ambos mantêm a única propriedade que torna isso fluxo de dados, e não grep: uma chamada indireta por meio de uma tabela de ponteiros de função entre a origem e o sink.

  • handle_hello() — vulnerável. memcpy(name, payload + 2, vlen) com vlen limitado pelo quadro, não por sizeof(name).
  • handle_echo() — seguro. Mesma forma de origem e sink, mas vlen também é limitado por sizeof(buf). Este é o controle negativo: a consulta deve disparar em handle_hello e permanecer silenciosa aqui.

Formato do quadro

Um datagrama UDP = um quadro:

root@kitploit:~
[ type : 1 ] [ length : 2, big-endian ] [ value : length bytes ]

type 0x01 → hello, 0x02 → echo. Um quadro hello com comprimento declarado entre 65 e ~2045 estoura name[64].

Compilar

root@kitploit:~
make            # gcc -Wall -Wextra -O0 -g -o tlv_server tlv_server.c

Linux/POSIX (soquetes BSD). Compila sem avisos.

Criar um banco de dados CodeQL

O CodeQL rastreia uma compilação real, então compile a partir do estado limpo:

root@kitploit:~
make clean
codeql database create db --language=cpp --command="make"
# ou, sem a etapa clean:
codeql database create db --language=cpp --command="make -B"

Em seguida, execute a consulta da Parte 3 em db; ela deve relatar o memcpy em handle_hello e não o de handle_echo.

Baixar ferramenta
pppd / CVE-2020-8597este projeto
Origemread() no fd do PPPrecvfrom() em um socket UDP
Despachostruct protent *protocols[] global, correspondência linear por nº de protocoloconst struct frame_op ops[] local ao arquivo, correspondência linear por tag de 1 byte
Profundidade até o sinkget_input → (*input) → eap_input → eap_requestdispatch_frame → (*handle) → handle_hello
Destinochar rhostname[256]char name[64]
Verificação erradavallen limitado por len do pacotevlen limitado por plen do quadro