?? CRITICAL OWASP #1

?? Broken Access Control

La vulnerabilidad más crítica según OWASP 2021. Ocurre cuando las restricciones sobre lo que los usuarios autenticados pueden hacer no se aplican correctamente, permitiendo acceso no autorizado a funciones o datos.

94%
Apps Afectadas
#1
Ranking OWASP
318k
Ocurrencias
34
CWEs Mapeados
?

�Qué es?

Broken Access Control ocurre cuando una aplicación no verifica correctamente si un usuario tiene permiso para realizar una acción o acceder a un recurso.

Esto puede manifestarse como:

  • Acceso a cuentas de otros usuarios modificando IDs en URLs (IDOR)
  • Elevación de privilegios (usuario normal ? admin)
  • Acceso a endpoints de API sin autenticación
  • Bypass de controles mediante manipulación de tokens/cookies
  • Acceso a archivos fuera del directorio permitido (Path Traversal)
??

�Como se Explota? (�ético)

?? Disclaimer �ético

Esta información es únicamente para propósitos educativos y pruebas de seguridad autorizadas. Nunca realices pruebas sin permiso explícito del propietario del sistema.

1. IDOR (Insecure Direct Object Reference)

Si una URL contiene un ID de usuario, intenta modificarlo:

HTTP Request ? Vulnerable
# URL original (tu perfil)
GET /api/users/123/profile

# Modificando el ID para acceder a otro usuario
GET /api/users/124/profile
GET /api/users/1/profile  # Posible admin

2. Forced Browsing

Acceder directamente a rutas administrativas:

URLs ? Vulnerable
# Rutas comunes de admin sin protección
/admin
/admin/dashboard
/api/admin/users
/api/v1/internal/config
/.env
/backup.sql

3. Manipulación de Roles

Modificar par�metros de rol en requests:

JSON ? Vulnerable
// Request original
{
  "username": "user123",
  "email": "user@example.com"
}

// Agregando campo de rol
{
  "username": "user123",
  "email": "user@example.com",
  "role": "admin",
  "isAdmin": true
}
???

Mitigación

? Principio de Menor Privilegio

Siempre deniega por defecto. El usuario solo debe tener acceso a lo estrictamente necesario.

Código Seguro (Node.js/Express)

JavaScript ? Seguro
// Middleware de autorización
const checkOwnership = async (req, res, next) => {
  const resourceId = req.params.id;
  const userId = req.user.id; // Del JWT verificado
  
  const resource = await Resource.findById(resourceId);
  
  // Verificar que el recurso pertenece al usuario
  if (!resource || resource.ownerId !== userId) {
    return res.status(403).json({ 
      error: 'Access denied' 
    });
  }
  
  next();
};

// Uso en rutas
app.get('/api/users/:id/profile', 
  authMiddleware, 
  checkOwnership, 
  profileController
);

Mejores Prácticas

  • Implementar control de acceso en el servidor, nunca confiar en el cliente
  • Usar UUIDs en lugar de IDs secuenciales predecibles
  • Validar permisos en cada request (no cachear decisiones de acceso)
  • Implementar rate limiting para prevenir enumeración
  • Loggear todos los intentos de acceso fallidos
  • Usar frameworks con controles de acceso probados (RBAC, ABAC)
??

CVEs Reales

CVE-2024-27198
JetBrains TeamCity Authentication Bypass
Permit�a crear usuarios admin sin credenciales mediante bypass de autenticación.
CVE-2023-42793
JetBrains TeamCity IDOR
IDOR que permit�a acceder a proyectos y configuraciones de otros usuarios.
CVE-2021-44228
Log4Shell (relaciónado)
Aunque es RCE, frecuentemente explotado para bypass de controles de acceso.
??

Labs Pr�céticos