Saltearse al contenido

Seguridad serverless

Serverless (AWS Lambda, Azure Functions, GCP Cloud Functions/Run) ejecuta código sin gestionar servidores. Para el atacante, cada función es una pequeña superficie con sus propias debilidades: secretos en variables de entorno, un rol/identidad con permisos que se pueden abusar, dependencias vulnerables, e inyección si procesa entrada no confiable. Y como las funciones suelen tener permisos cloud, comprometer una es a menudo el salto hacia el resto de la cuenta.

Una función no es “solo código”: corre con una identidad (rol de ejecución) que tiene permisos sobre otros recursos cloud. Si abusas de la función (inyección, dependencia vulnerable) o simplemente lees sus secretos, heredas esos permisos → escalada y movimiento lateral (ver Abuso de IAM y escalada de privilegios).

# las funciones guardan config/secretos en env vars (práctica común e insegura)
aws lambda get-function-configuration --function-name X # muestra Environment.Variables
# dentro de la función: printenv / os.environ -> API keys, DB creds, tokens
# la función corre con un rol IAM -> sus credenciales están en el entorno
# AWS: AWS_ACCESS_KEY_ID/SECRET/SESSION_TOKEN en las variables de entorno de la función
# si consigues RCE en la función (inyección) -> robas esas credenciales -> cloud-iam
# la función procesa eventos (HTTP, colas, S3...); si no valida:
command injection, SSRF (-> metadata/otros servicios), path traversal, deserialización
# una función tras API Gateway es una webapp -> aplican los ataques de la sección Web
# paquetes npm/pip vulnerables en el bundle de la función
# permisos de despliegue (crear/actualizar funciones) -> backdoor o PassRole (cloud-iam)
# con lambda:CreateFunction + iam:PassRole sobre un rol admin:
# creas una función que corre como admin y ejecuta tu código (ver cloud-iam)
# AWS
aws lambda list-functions ; aws lambda get-function --function-name X # código + config
# Azure
az functionapp list ; revisar application settings (secretos)
# GCP
gcloud functions list ; gcloud functions describe X ; gcloud run services list
  • Secretos fuera del código/env: usar Secrets Manager/Key Vault/Secret Manager, no variables de entorno en claro.
  • Mínimo privilegio en el rol de ejecución: que la función solo pueda lo que necesita (limita el daño de un compromiso).
  • Validar toda la entrada del evento (inyección, SSRF); escanear dependencias (SCA) y el bundle.
  • No conceder CreateFunction+PassRole juntos a identidades no admin; revisar permisos de despliegue.
  • Logging (CloudWatch/App Insights/Cloud Logging) y límites de tiempo/recursos; WAF delante de funciones HTTP.
  • Enumerar funciones y su configuración (código + env vars)
  • Secretos en variables de entorno
  • Rol/identidad de ejecución y sus permisos (Abuso de IAM y escalada de privilegios)
  • Inyección/SSRF si procesa entrada no confiable
  • Credenciales del rol robables vía RCE en la función
  • Dependencias vulnerables en el bundle
  • PassRole + CreateFunction → escalada
  • Funciones HTTP tratadas como webapp (sección Web)