mediumCWE-840A04:2021

Diseño Inseguro

La arquitectura de la aplicación tiene fallas de seguridad fundamentales — lógica de negocio en el cliente, falta de validación server-side o sin modelado de amenazas.

Cómo Funciona

El diseño inseguro es diferente de bugs de implementación — es una falla en la arquitectura misma. Patrones comunes incluyen poner lógica de autorización solo en el frontend (condicionales React), depender de validación client-side sin checks server-side, o diseñar flujos que pueden ser abusados (como intentos ilimitados de password reset). Ninguna implementación perfecta puede arreglar un diseño fundamentalmente inseguro.

Código Vulnerable
// React component — auth check only in frontend
{user.role === 'admin' && (
  <button onClick={deleteAllUsers}>
    Delete All Users
  </button>
)}
Código Seguro
// API route — auth check on the server
app.delete('/api/users', async (req, res) => {
  if (req.auth.role !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' });
  }
  await db.users.deleteMany();
});

Ejemplo Real

La función Find Friends de Snapchat (2014) tenía un diseño inseguro que permitía a atacantes enumerar todos los números de teléfono haciendo brute-force a la API. 4.6 millones de usernames y teléfonos se filtraron porque la API no tenía rate limiting por diseño.

Cómo Prevenirlo

  • Siempre valida autorización en el servidor, nunca solo en el frontend
  • Implementa rate limiting en operaciones sensibles
  • Usa modelado de amenazas durante la fase de diseño
  • Aplica defensa en profundidad — múltiples capas de seguridad

Tecnologías Afectadas

Node.jsReactNext.jsPythonGoJavaPHP

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas