
Exploit em Python para CVE-2018-15133, que permite execução remota de código em aplicações Laravel vulneráveis através de desserialização insegura de sessões criptografadas usando uma APP_KEY conhecida.
Este script Python implementa um exploit de execução remota de código (RCE) para aplicações Laravel vulneráveis através de desserialização insegura, baseando-se na vulnerabilidade CVE-2018-15133.
O exploit aproveita uma vulnerabilidade no Laravel (versões 5.5.40 e anteriores, e 5.6.0 a 5.6.29) onde as sessões cifradas são automaticamente desserializadas sem validação adequada. Com acesso à chave APP_KEY do Laravel, um atacante pode cifrar payloads maliciosos que serão desserializados e executados no servidor.
O Laravel utiliza um mecanismo de cifragem simétrica para as sessões com três componentes:
IV (Initialization Vector): Vetor de inicialização aleatório gerado para cada sessão
Value: Valor cifrado usando AES-128-CBC ou AES-256-CBC
MAC: Código de autenticação de mensagem (HMAC-SHA256) calculado sobre IV + value + APP_KEY
Recebe três parâmetros de entrada: a chave APP_KEY do Laravel em base64, o comando a executar e o domínio alvo
Invoca a ferramenta PHPGGC com a gadget chain Laravel/RCE5 para gerar uma cadeia de objetos PHP maliciosos
Constrói o comando do sistema operacional que será executado no servidor vítima (exemplo: system('whoami');)
Gera o payload serializado PHP que contém os gadgets encadeados
Decodifica o payload de base64 para formato binário
Processa a chave APP_KEY removendo o prefixo "base64:" se existir
Completa o padding necessário para que a chave seja base64 válido
Decodifica a chave de base64 para bytes
Gera um vetor de inicialização (IV) aleatório de 16 bytes
Cifra o payload usando AES no modo CBC com a chave e o IV
Aplica padding PKCS7 ao payload antes da cifragem
Codifica o IV em base64
Codifica o ciphertext (payload cifrado) em base64
Concatena IV e value em base64 como mensagem para o HMAC
Calcula o MAC usando HMAC-SHA256 sobre a mensagem concatenada com a chave como segredo
Constrói um objeto JSON com três campos: iv, value e mac
Codifica o JSON completo em base64
Constrói uma requisição HTTP usando curl com o payload no cookie laravel_session
Envia a requisição ao domínio alvo
O servidor Laravel recebe o cookie e decodifica o base64
Laravel verifica a integridade do MAC contra o IV e value recebidos
Laravel decifra o conteúdo usando AES-CBC com sua APP_KEY
Laravel desserializa automaticamente o conteúdo decifrado
PHP invoca as funções mágicas __destruct() ou __wakeup() dos objetos desserializados
Desencadeia-se a cadeia de gadgets que culmina em call_user_func() ou eval()
O comando do sistema operacional é executado no servidor
O exploit utiliza cadeias de gadgets que encadeiam chamadas a funções mágicas do PHP:
Durante a desserialização, o PHP invoca automaticamente __destruct() ou __wakeup(), iniciando a cadeia que culmina em eval() executando código arbitrário.
Requisitos Prévios Para que o exploit funcione, o atacante precisa:
A chave APP_KEY do Laravel (obtida mediante filtração de variáveis de ambiente, buckets S3 expostos, código fonte, etc.)
Versão vulnerável do Laravel com desserialização habilitada por padrão
PHPGGC instalado no diretório ./phpggc/ https://github.com/ambionics/phpggc
Exemplo de Uso
python exploit.py "base64:dGhpc2lzYXNlY3JldGtleQ==" "whoami" "http://target.htb"
Este comando gerará um payload serializado que executará whoami quando o Laravel desserializar a sessão.