RCE sobre Lambda
Lab: Custom
A continuación, se expone un caso de explotación sobre un entorno serverless totalmente cloud
El desarrollo de este ejercicio puede llegar a consumir recursos económicos dentro de las cuentas de AWS.
Sea el siguiente código lambda vulnerable:
import json
import subprocess
def execute_command(cmd: str) -> str:
# ejecuta el comando y captura la salida y los errores
try:
data = subprocess.Popen([cmd], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
output, errors = data.communicate()
except subprocess.SubprocessError as e:
# si hay algún error al ejecutar el c.omando, devuelve un mensaje de error
return f"Error al ejecutar el comando: {e}"
return output
def lambda_handler(event, context):
# extrae el comando de la solicitud HTTP
cmd = event.get('queryStringParameters', {}).get('cmd')
if not cmd:
# si no se proporcionó un comando, devuelve un mensaje de error
return {
'statusCode': 400,
'body': 'Debe proporcionar un comando para ejecutar.'
}
# ejecuta el comando
output = execute_command(cmd)
# construye una respuesta HTTP con la salida como cuerpo
return {
'statusCode': 200,
'body': json.dumps(output)
}
Después, crear una función lambda desde AWS y configurar el API Gateway, al finalizar AWS retorna una URL endpoint del estilo
someRandomName.execute-api.region.amazonaws.com/test/
Como se lee en el código, espera un parámetro "cmd" dentro de la URL y de este parámetro leerá un comando:

Las funciones lambda son serverless y trabajan bajo un entorno linux de un contenedor.

Al identificar la ejecución de comandos es recomendable ejecutar env
para visualizar las variables de entorno:

Normalmente, estas variables contienen las cadenas de credenciales relacionadas a un Rol de ejecución de una función, ya que lambda asume un rol para la ejecución del programa. Con estos datos, el siguiente paso es autenticarse y configurar el perfil en AWS CLI

En este punto como auditores, se procede a realizar una enumeración
Se recomienda el uso de las herramientas listadas en el apartado de enumeración automatizada de IAM del este blog.
Última actualización