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:

lambda.py
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