highCWE-284A01:2021

Control de Acceso Roto

Los usuarios pueden actuar fuera de sus permisos, accediendo a datos de otros usuarios o funcionalidad admin sin verificaciones de autorización.

Cómo Funciona

El control de acceso roto ocurre cuando una aplicación no verifica las restricciones sobre lo que un usuario autenticado puede hacer. Un atacante puede modificar la URL, request de API o estado interno para acceder a recursos no autorizados. Por ejemplo, cambiar /api/users/123 a /api/users/456 para ver el perfil de otro usuario. Esto se conoce como IDOR (Insecure Direct Object Reference). El servidor confía en el ID que envía el usuario sin verificar propiedad.

Código Vulnerable
app.get('/api/users/:id', async (req, res) => {
  const user = await db.users.findById(req.params.id);
  res.json(user);
});
Código Seguro
app.get('/api/users/:id', async (req, res) => {
  const user = await db.users.findById(req.params.id);
  if (!user || user.id !== req.auth.userId) {
    return res.status(403).json({ error: 'Forbidden' });
  }
  res.json(user);
});

Ejemplo Real

En 2019, First American Financial expuso 885 millones de registros por una vulnerabilidad IDOR. Cambiar un solo número en la URL permitía acceder a documentos hipotecarios, números de seguro social y datos bancarios de cualquier cliente.

Cómo Prevenirlo

  • Siempre verifica la propiedad del recurso en el servidor
  • Usa IDs de sesión en vez de IDs proporcionados por el cliente
  • Implementa control de acceso basado en roles (RBAC)
  • Deniega acceso por default — requiere grants explícitos

Tecnologías Afectadas

Node.jsReactNext.jsPythonGoJavaPHPC#

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas