
Laboratório educacional para estudar CVE-2014-0160 (Heartbleed) e inconsistências de enquadramento no manuseio de heartbeat TLS.
Laboratório educacional para estudar a vulnerabilidade Heartbleed
(CVE-2014-0160) usando um ambiente OpenSSL real vulnerável dentro do Docker.
Este projeto reproduz um servidor TLS vulnerável usando OpenSSL 1.0.1f e implementa um cliente raw TLS heartbeat customizado para demonstrar como pacotes heartbeat malformados podem desencadear divulgação de memória.
O laboratório foi criado para fins educacionais e de pesquisa, especialmente para estudar:
heartbleed-lab/
├── client/
│ ├── attacker.py
│ └── Dockerfile
│
├── vulnerable/
│ ├── Dockerfile
│ └── server/
│
├── fixed/
│ ├── Dockerfile
│ └── server/
│
├── docs/
│ └── diagrams/
│
├── notes/
│
├── docker-compose.yml
├── .gitignore
└── README.md
heartbleed-client
↓
Docker internal network
↓
vulnerable-heartbleed
Onde:
heartbleed-client envia registros TLS brutosvulnerable-heartbleed executa OpenSSL 1.0.1fO servidor vulnerável usa:
openssl s_serverO ambiente é intencionalmente configurado para reproduzir o comportamento original do Heartbleed.
A implementação do cliente:
A implementação atual reproduz o comportamento original do Heartbleed enviando um pacote heartbeat malformado onde:
payload_length > real payload size
Exemplo:
Declared payload length: 0x4000
Real payload: 1 byte ("A")
O servidor vulnerável confia incorretamente no comprimento declarado e responde com conteúdos de memória além dos limites reais do payload.
sudo COMPOSE_HTTP_TIMEOUT=300 docker-compose up --build
sudo docker exec -it heartbleed-client bash
python attacker.py
[+] Sending malformed heartbeat
[+] Got TLS record: type=24 version=(3, 2) length=16384
[!!!] Heartbeat response received
Isso indica que o servidor vulnerável retornou conteúdos de memória além do payload legítimo do heartbeat.
Este projeto explora a relação entre:
Um dos principais interesses de pesquisa deste laboratório é comparar:
HTTP Request Smuggling
vs
TLS Heartbeat Parsing Failures
da perspectiva de:
Os próximos passos planejados incluem:
Este repositório existe exclusivamente para: