
Pruebas de mutación en la validación de certificados X.509 en OpenSSL v.1.1.1h, basado en CVE-2021-3450.
Este repositorio implementa un experimento de pruebas de mutación basado en especificaciones, dirigido al comportamiento de validación de certificados X.509 en OpenSSL.
El experimento se basa en el operador de mutación:
MUT-BC-SS-01
que modifica la extensión BasicConstraints:
CA:TRUE → CA:FALSE
El objetivo es evaluar si la validación de certificados aplica correctamente los requisitos de RFC 5280 e investigar el comportamiento relacionado con la clase de vulnerabilidad 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
El experimento crea la siguiente cadena de certificados:
CA raíz (CA:TRUE)
│
▼
Intermedio mutante (CA:FALSE)
│
▼
Certificado subhoja
El certificado mutante se configura intencionadamente con:
basicConstraints = CA:FALSE
mientras que aún se utiliza para firmar otro certificado.
El entorno de validación evalúa si OpenSSL rechaza correctamente esta cadena inválida.
El experimento se probó en sistemas Linux utilizando:
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 los paquetes necesarios e instala automáticamente las dependencias faltantes.
Los paquetes requeridos incluyen:
./install_openssl111h.sh
Esto descarga, compila e instala OpenSSL 1.1.1h localmente en:
$HOME/openssl-1.1.1h-install
No se modifican los archivos del sistema de OpenSSL.
./environment.sh
Esto configura:
LD_LIBRARY_PATH
y verifica que se carguen las bibliotecas correctas de OpenSSL.
./generate_certs.sh
Esto genera:
y los almacena en:
certs/
./build.sh
./build_version3.sh
Esto compila:
src/poc.c
y produce:
./poc
en el directorio raíz del proyecto.
./run.sh
./run_version3.sh
o directamente:
./poc
Para eliminar completamente los artefactos generados:
rm -rf certs
rm -f poc
Para eliminar la instalación local de OpenSSL:
rm -rf $HOME/openssl-1.1.1h-install
rm -rf tls-test
Para limpiar las variables de entorno:
unset LD_LIBRARY_PATH
unset OPENSSL111H