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.
Por qué son un objetivo
Sección titulada «Por qué son un objetivo»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).
Vectores de ataque
Sección titulada «Vectores de ataque»Secretos en variables de entorno
Sección titulada «Secretos en variables de entorno»# 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, tokensAbuso del rol de ejecución
Sección titulada «Abuso del rol de ejecución»# 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-iamInyección y entrada no confiable
Sección titulada «Inyección y entrada no confiable»# 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 WebDependencias vulnerables y despliegue
Sección titulada «Dependencias vulnerables y despliegue»# paquetes npm/pip vulnerables en el bundle de la función# permisos de despliegue (crear/actualizar funciones) -> backdoor o PassRole (cloud-iam)PassRole / crear funciones (escalada)
Sección titulada «PassRole / crear funciones (escalada)»# 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)Enumeración
Sección titulada «Enumeración»# AWSaws lambda list-functions ; aws lambda get-function --function-name X # código + config# Azureaz functionapp list ; revisar application settings (secretos)# GCPgcloud functions list ; gcloud functions describe X ; gcloud run services listPara la defensa
Sección titulada «Para la defensa»- 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+PassRolejuntos 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.
Checklist de prueba
Sección titulada «Checklist de prueba»- 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)