
Teste de mutação na validação de certificados X.509 no OpenSSL v.1.1.1h, baseado no CVE-2021-3450.
Este repositório implementa um experimento de teste de mutação orientado por especificação, visando o comportamento de validação de certificados X.509 no OpenSSL.
O experimento é baseado no operador de mutação:
MUT-BC-SS-01
que modifica a extensão BasicConstraints:
CA:TRUE → CA:FALSE
O objetivo é avaliar se a validação de certificados aplica corretamente os requisitos da RFC 5280 e investigar o comportamento relacionado à classe de vulnerabilidade representada por CVE-2021-3450.
MUT-BC-SS-01/
│
│
├── configs/
│ ├── ca.cnf
│ └── leaf.cnf
│
├── src/
│ └── poc.c
| └── poc_fixed.c
│
├── check_prerequisites.sh
├── install_openssl111h.sh
├── environment.sh
├── generate_certs.sh
├── build.sh
├── run.sh
├── build_version3.sh
├── run_version3.sh
│
│
└── README.md
O experimento cria a seguinte cadeia de certificados:
Root CA (CA:TRUE)
│
▼
Mutant Intermediate (CA:FALSE)
│
▼
Subleaf Certificate
O certificado mutante é intencionalmente configurado com:
basicConstraints = CA:FALSE
enquanto ainda é usado para assinar outro certificado.
O harness de validação avalia se o OpenSSL rejeita corretamente esta cadeia inválida.
O experimento foi testado em sistemas Linux usando:
git clone https://github.com/dedellix/MUT-BC-SS-01.git
cd MUT-BC-SS-01
chmod +x *.sh
./check_prerequisites.sh
Este script verifica os pacotes necessários e instala automaticamente quaisquer dependências ausentes.
Os pacotes necessários incluem:
./install_openssl111h.sh
Isso baixa, compila e instala o OpenSSL 1.1.1h localmente em:
$HOME/openssl-1.1.1h-install
Nenhum arquivo de sistema do OpenSSL é modificado.
./environment.sh
Isso configura:
LD_LIBRARY_PATH
e verifica se as bibliotecas corretas do OpenSSL estão carregadas.
./generate_certs.sh
Isso gera:
e os armazena em:
certs/
./build.sh
./build_version3.sh
Isso compila:
src/poc.c
e produz:
./poc
no diretório raiz do projeto.
./run.sh
./run_version3.sh
ou diretamente:
./poc
Para remover completamente os artefatos gerados:
rm -rf certs
rm -f poc
Para remover a instalação local do OpenSSL:
rm -rf $HOME/openssl-1.1.1h-install
rm -rf tls-test
Para limpar as variáveis de ambiente:
unset LD_LIBRARY_PATH
unset OPENSSL111H