El error más peligroso en el desarrollo web moderno: permitir uploads inseguros o, peor aún, usar IAM keys dentro del código del frontend. Exponer tus credenciales de AWS en el navegador es la receta garantizada para un desastre de seguridad.

La solución «Gold Standard» para manejar archivos de usuario es utilizar Presigned URLs. Este patrón permite que el cliente suba archivos directamente a S3 con permisos limitados y temporales, sin que tu backend procese el archivo y sin exponer llaves secretas.

¿Cómo implementarlo correctamente?

Frontend: Envía metadatos (nombre, tipo, tamaño) a tu backend.
Backend: Verifica la sesión del usuario. Si es válida, usa el SDK de AWS para generar una URL firmada con permisos restringidos (solo PutObject).
Browser: Realiza un PUT o POST directo a esa URL firmada.
Ejemplo Práctico (Node.js SDK v3):

// Backend: Genera la URL con restricciones de política
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3");
const command = new PutObjectCommand({
    Bucket: "mi-bucket-seguro",
    Key: uploads/${userId}/${Date.now()}-archivo.jpg,
    ContentType: "image/jpeg"
});
// URL válida por solo 60 segundos
const signedUrl = await getSignedUrl(s3Client, command, { expiresIn: 60 });

Checklist de Mitigación:

✅ Block Public Access: Activa siempre el «Block All Public Access» a nivel bucket y cuenta.
✅ Least Privilege: El rol IAM que genera la firma solo debe tener permisos estrictos (s3:PutObject) y, si es posible, usar condiciones en la política para restringir prefijos o IPs.
✅ Validación de Política: En la política firmada, especifica el Content-Type y el Content-Length máximo para evitar inyecciones de archivos inesperados.
✅ CORS: Configura las reglas de CORS en el bucket de S3 para permitir únicamente las peticiones desde tu dominio.

El acceso debe ser siempre efímero y basado en identidad. Si tu backend no está validando quién sube qué, ya tienes una brecha abierta.

Categorías: AWS

Daniel Maldonado

¡Hola! Soy Daniel Maldonado, Sr. Analista de Seguridad Informática y me dedico al hacking desde hace más de 10 años.

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *