AWS - Steal Lambda Requests
Fluxo Lambda
Slicer é um processo fora do contêiner que envia invocações para o processo init.
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
bootstrap.py tem um loop recebendo invocações do processo init e chama o código dos usuários para lidar com eles (
/next
).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çõesPara 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
Encontrar uma vulnerabilidade de RCE.
Gerar um bootstrap malicioso (por exemplo, https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Executar o bootstrap malicioso.
Você pode facilmente realizar essas ações executando:
Para mais informações, consulte https://github.com/carlospolop/lambda_bootstrap_switcher
Referências
Última actualización