CORS Mal Configurado en Almacenamiento Cloud
Tu bucket de S3 o GCS tiene CORS configurado con origin: '*' o AllowedMethods: ['*'], permitiendo que cualquier sitio web lea las respuestas de tu almacenamiento y potencialmente acceda a datos privados.
Cómo Funciona
El CORS en almacenamiento cloud controla qué orígenes web pueden hacer requests cross-origin a tu bucket. Un origen wildcard (*) significa que cualquier sitio web puede hacer requests JavaScript a tu bucket y leer las respuestas. Si se combina con cualquier forma de acceso basado en credenciales (cookies firmadas, etc.), esto puede permitir que páginas controladas por atacantes roben datos de usuarios autenticados.
// MAL: config CORS de S3 permitiendo todos los orígenes y métodos (Terraform)
resource "aws_s3_bucket_cors_configuration" "example" {
bucket = aws_s3_bucket.example.id
cors_rule {
allowed_origins = ["*"] // cualquier origen
allowed_methods = ["GET", "PUT", "POST", "DELETE"] // todos los métodos
allowed_headers = ["*"]
}
}// BIEN: restringe a tu dominio específico de app y solo los métodos necesarios
resource "aws_s3_bucket_cors_configuration" "example" {
bucket = aws_s3_bucket.example.id
cors_rule {
allowed_origins = ["https://app.example.com"] // solo tu dominio
allowed_methods = ["GET", "PUT"] // solo lo que necesitas
allowed_headers = ["Content-Type", "Authorization"]
max_age_seconds = 3600
}
}Ejemplo Real
Varios productos SaaS de compartición de archivos tenían buckets S3 con CORS origin: '*' combinado con ACLs que permitían authenticated-read. Esto permitía que cualquier sitio web leyera archivos que los usuarios habían subido con la suposición de privacidad, haciendo silenciosamente requests cross-origin con credenciales desde una página maliciosa.
Cómo Prevenirlo
- Siempre especifica orígenes explícitos en tu configuración CORS — nunca uses '*' para buckets de almacenamiento que contengan datos privados
- Restringe AllowedMethods solo a lo que tu app realmente usa (generalmente GET, PUT — no DELETE ni POST)
- Configura un MaxAgeSeconds razonable para evitar el cacheo excesivo de respuestas preflight
- Para escenarios de carga, usa pre-signed URLs con condiciones específicas en lugar de políticas CORS abiertas
- Audita las configuraciones CORS de almacenamiento como parte de tu revisión de seguridad regular
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Bucket S3 con Acceso Público
criticalTu bucket de S3 es públicamente legible debido a un ACL público, configuración de Block Public Access deshabilitada o una política de bucket con wildcard — cualquiera en internet puede listar y descargar tus archivos.
SSRF a Metadata de Cloud
criticalTu app hace fetch de URLs proporcionadas por el usuario sin bloquear endpoints de metadata de cloud como 169.254.169.254, dejando a los atacantes robar tus credenciales cloud vía SSRF.
Credenciales AWS Hardcodeadas
criticalLas claves de acceso de AWS (que empiezan con AKIA) o las claves de acceso secretas están hardcodeadas en tu código fuente, dando a cualquiera que lea el código acceso completo a tu cuenta de AWS.
Política IAM Excesivamente Permisiva
highTu política IAM usa Action: '*' o Resource: '*', otorgando muchos más permisos de los necesarios y convirtiendo cualquier fuga de credenciales en una toma de control completa de la cuenta.