mediumCWE-942OWASP A05:2021

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.

Código Vulnerable
// 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 = ["*"]
  }
}
Código Seguro
// 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

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas