AWS - Steal Lambda Requests
Flujo de Lambda
Slicer es un proceso fuera del contenedor que envía invocaciones al proceso init.
El proceso init escucha en el puerto 9001 exponiendo algunos endpoints interesantes:
/2018-06-01/runtime/invocation/next
– obtener el próximo evento de invocación/2018-06-01/runtime/invocation/{invoke-id}/response
– devolver la respuesta del controlador para la invocación/2018-06-01/runtime/invocation/{invoke-id}/error
– devolver un error de ejecución
bootstrap.py tiene un bucle que recibe invocaciones del proceso init y llama al código de los usuarios para manejarlas (
/next
).Finalmente, bootstrap.py envía la respuesta al init.
Ten en cuenta que bootstrap carga el código de usuario como un módulo, por lo que cualquier ejecución de código realizada por el código de los usuarios en realidad ocurre en este proceso.
Robar Solicitudes de Lambda
El objetivo de este ataque es hacer que el código de los usuarios ejecute un proceso malicioso bootstrap.py
dentro del proceso bootstrap.py
que maneja la solicitud vulnerable. De esta manera, el proceso bootstrap malicioso comenzará a comunicarse con el proceso init para manejar las solicitudes mientras el bootstrap legítimo está atrapado ejecutando el malicioso, por lo que no solicitará más solicitudes al proceso init.
Esta es una tarea sencilla de lograr, ya que el código del usuario se está ejecutando por el bootstrap.py
legítimo. Por lo tanto, el atacante podría:
Enviar un resultado falso de la invocación actual al proceso init, para que init piense que el proceso bootstrap está esperando más invocaciones.
Se debe enviar una solicitud a
/${invoke-id}/response
El invoke-id se puede obtener de la pila del
bootstrap.py
legítimo utilizando el módulo de python inspect (como se propone aquí) o simplemente solicitándolo nuevamente a/2018-06-01/runtime/invocation/next
(como se propone aquí).Ejecutar un
bootstrap.py
malicioso que manejará las próximas invocacionesCon fines de sigilo, es posible enviar los parámetros de las invocaciones de lambda a un C2 controlado por los atacantes y luego manejar las solicitudes como de costumbre.
Para este ataque, es suficiente obtener el código original de
bootstrap.py
del sistema o de github, agregar el código malicioso y ejecutarlo desde la invocación actual de lambda.
Pasos del Ataque
Encuentra una vulnerabilidad de RCE.
Genera un bootstrap malicioso (por ejemplo, https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Ejecuta el bootstrap malicioso.
Puedes realizar fácilmente estas acciones ejecutando:
Para obtener más información, visita https://github.com/carlospolop/lambda_bootstrap_switcher
Referencias
Última actualización