
Fuzzing aprimorado para tmux usando OSS-Fuzz. Inclui harnesses personalizados `cmd-fuzzer` e `argument-fuzzer` para melhor cobertura de código e uma PoC para `CVE-2020-27347`.
Software Security @ EPFL, Primavera de 2025
Neste laboratório, aprimoramos os esforços de fuzzing para o multiplexador de terminais tmux dentro da infraestrutura OSS-Fuzz do Google. Primeiro, estabelecemos uma linha de base avaliando a cobertura de linhas do harness input-fuzzer existente, tanto com quanto sem seu corpus de sementes fornecido, observando coberturas iniciais comparáveis. Em seguida, identificamos duas regiões de código significativas no tmux pouco exercitadas pelo fuzzer de linha de base. Para lidar com essas lacunas de cobertura, desenvolvemos e avaliamos dois novos harnesses de fuzzing direcionados, cmd-fuzzer e argument-fuzzer, demonstrando sua capacidade de melhorar a cobertura nessas áreas anteriormente subtestadas. Como essas melhorias de fuzzing não revelaram novas vulnerabilidades críticas dentro do prazo do projeto, nossa análise de crashes concentrou-se em uma vulnerabilidade histórica conhecida. Desenvolvemos uma prova de conceito (PoC) para o CVE-2020-27347 (um buffer overflow baseado em pilha), analisamos sua causa raiz, discutimos a correção implementada e avaliamos suas implicações de segurança.
Este projeto teve como objetivo aplicar e aprimorar técnicas de fuzzing no multiplexador de terminais open-source tmux, utilizando o framework OSS-Fuzz. O projeto abrangeu várias etapas principais:
Avaliação da Linha de Base (Parte 1):
input-fuzzer existente para o tmux.Análise de Lacunas de Cobertura (Parte 2):
tmux que não são adequadamente exercitadas pelo input-fuzzer.arguments.c) e na lógica de análise/execução de comandos (cmd-parse.c, módulos cmd-*.c) como áreas-chave para melhoria.Melhoria do Fuzzer (Parte 3):
argument-fuzzer: Projetado especificamente para testar a lógica de análise de argumentos de linha de comando em arguments.c.cmd-fuzzer: Projetado para testar os caminhos de análise e execução de comandos, visando cmd-parse.c e vários módulos cmd-*.c.Análise de Crash (Parte 4):
tmux (CVE-2020-27347) foi selecionada para análise aprofundada.A submissão final está organizada da seguinte forma (dentro do diretório submission/):
submission/
├── README.md # Este arquivo
├── part_1/ # Arquivos da Parte 1: Avaliação da Linha de Base
│ ├── oss-fuzz.diff # Diff para remover corpus de sementes do input-fuzzer
│ ├── project.diff # (Provavelmente vazio ou menor para a Parte 1)
│ ├── remove_seed_corpus.patch # O arquivo de patch real usado
│ ├── report/ # Relatórios de cobertura HTML para o input-fuzzer
│ │ ├── w_corpus/
│ │ └── wo_corpus/
│ ├── run.w_corpus.sh # Script para executar o input-fuzzer com corpus
│ └── run.wo_corpus.sh # Script para executar o input-fuzzer sem corpus
├── part_3/ # Arquivos da Parte 3: Melhorias do Fuzzer
│ ├── coverage_noimprove/ # Cobertura da linha de base (ex.: do input-fuzzer sem corpus)
│ │ └── ...
│ ├── improve1/ # Melhoria 1: argument-fuzzer
│ │ ├── coverage_improve1/ # Relatório de cobertura para argument-fuzzer
│ │ ├── oss-fuzz.diff # Mudanças de configuração do OSS-Fuzz para argument-fuzzer
│ │ ├── project.diff # Mudanças no tmux para argument-fuzzer (ex.: novos .cc, Makefile.am)
│ │ └── run.improve1.sh # Script para executar argument-fuzzer
│ └── improve2/ # Melhoria 2: cmd-fuzzer
│ ├── coverage_improve2/ # Relatório de cobertura para cmd-fuzzer
│ ├── oss-fuzz.diff # Mudanças de configuração do OSS-Fuzz para cmd-fuzzer
│ ├── project.diff # Mudanças no tmux para cmd-fuzzer
│ └── run.improve2.sh # Script para executar cmd-fuzzer
├── part_4/ # Arquivos da Parte 4: Análise de Crash (CVE-2020-27347)
│ ├── environment/ # Ambiente Docker para PoC
│ │ ├── Dockerfile
│ │ ├── run_tmux_cve_test.sh # Lógica central do teste PoC
│ │ ├── test_fixed.sh
│ │ └── test_vulnerable.sh
│ └── run.poc.sh # Script para construir imagem Docker e executar testes PoC
└── report.pdf # O relatório completo do projeto
(Nota: O diretório scripts/ contendo _run_fuzz_core.sh é um auxiliar e faria parte da raiz se este README estivesse na raiz real do projeto ao lado de submission/)
Todas as campanhas de fuzzing e a reprodução do PoC do CVE são projetadas para serem executadas em ambientes Docker orquestrados por scripts shell.
Todas as campanhas de fuzzing e a reprodução do PoC do CVE são projetadas para serem executadas em ambientes Docker orquestrados por scripts shell.
Pré-requisitos:
bash e cliente git.[email protected] se os scripts precisarem clonar o oss-fuzz (eles tentarão clonar se oss-fuzz/ não for encontrado na raiz do projeto). Alternativamente, você pode pré-clonar https://github.com/google/oss-fuzz.git na raiz do projeto.Arquitetura Geral dos Scripts:
O projeto usa um script centralizado, scripts/_run_fuzz_core.sh (não incluído no diretório submission/, mas parte da estrutura geral do projeto que este README pressupõe). Scripts executores individuais localizados em submission/part_1/, submission/part_3/improve1/, submission/part_3/improve2/ e submission/part_4/ são responsáveis por:
oss-fuzz.diff específicos da execução a uma cópia limpa do repositório oss-fuzz (esperado estar em ../../oss-fuzz em relação à maioria dos scripts executores).PROJECT, HARNESS, LABEL, caminhos para patches específicos do projeto e diretórios de saída)._run_fuzz_core.sh, que então lida com:
tmux).submission/.Executando os Scripts:
Geralmente, recomenda-se executar os scripts a partir do diretório raiz do projeto para garantir a resolução correta de caminhos relativos para oss-fuzz/ e os diretórios de saída.
1. Parte 1: Avaliação da Linha de Base (input-fuzzer)
Esses scripts avaliam o input-fuzzer existente para o tmux.
# A partir do diretório raiz do projeto:
./submission/part_1/run.w_corpus.sh # Executa o input-fuzzer com o corpus de sementes padrão
./submission/part_1/run.wo_corpus.sh # Executa o input-fuzzer sem corpus de sementes