AWS - Abusing Lambda Extensions
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
As extensões Lambda aprimoram funções integrando-se a várias ferramentas de monitoramento, observabilidade, segurança e governança. Essas extensões, adicionadas via .zip archives usando camadas Lambda ou incluídas em implantações de imagem de contêiner, operam em dois modos: interno e externo.
Extensões internas se fundem com o processo de tempo de execução, manipulando sua inicialização usando variáveis de ambiente específicas de linguagem e scripts wrapper. Essa personalização se aplica a uma variedade de tempos de execução, incluindo Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1.
Extensões externas são executadas como processos separados, mantendo a alinhamento de operação com o ciclo de vida da função Lambda. Elas são compatíveis com vários tempos de execução, como Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1, e tempos de execução personalizados.
Para mais informações sobre como as extensões lambda funcionam, consulte a documentação.
Este é um resumo da técnica proposta neste post: https://www.clearvector.com/blog/lambda-spy/
Foi descoberto que o kernel Linux padrão no ambiente de execução Lambda é compilado com chamadas de sistema “process_vm_readv” e “process_vm_writev”. E todos os processos são executados com o mesmo ID de usuário, mesmo o novo processo criado para a extensão externa. Isso significa que uma extensão externa tem acesso total de leitura e gravação à memória heap do Rapid, por design.
Além disso, enquanto as extensões Lambda têm a capacidade de se inscrever em eventos de invocação, a AWS não revela os dados brutos para essas extensões. Isso garante que as extensões não podem acessar informações sensíveis transmitidas via a requisição HTTP.
O processo Init (Rapid) monitora todas as requisições de API em http://127.0.0.1:9001 enquanto as extensões Lambda são inicializadas e executadas antes da execução de qualquer código de tempo de execução, mas após o Rapid.
A variável AWS_LAMBDA_RUNTIME_API
indica o IP e o número da porta da API Rapid para processos de tempo de execução filhos e extensões adicionais.
Ao alterar a variável de ambiente AWS_LAMBDA_RUNTIME_API
para uma porta
à qual temos acesso, é possível interceptar todas as ações dentro do tempo de execução Lambda (man-in-the-middle). Isso é possível porque a extensão é executada com os mesmos privilégios que o Rapid Init, e o kernel do sistema permite a modificação da memória do processo, possibilitando a alteração do número da porta.
Como as extensões são executadas antes de qualquer código de tempo de execução, modificar a variável de ambiente influenciará o processo de tempo de execução (por exemplo, Python, Java, Node, Ruby) à medida que ele inicia. Além disso, extensões carregadas após a nossa, que dependem dessa variável, também passarão pela nossa extensão. Essa configuração poderia permitir que malware contornasse completamente as medidas de segurança ou extensões de registro diretamente dentro do ambiente de tempo de execução.
A ferramenta lambda-spy foi criada para realizar essa gravação de memória e roubar informações sensíveis de requisições lambda, outras requisições de extensões e até mesmo modificá-las.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)