highCWE-639API1:2023

Broken Object Level Authorization (BOLA)

Los endpoints de API no verifican que el usuario que hace el request es dueño del recurso al que accede — permitiendo a atacantes acceder a datos de otros usuarios cambiando IDs.

Cómo Funciona

BOLA es el equivalente API de IDOR. Los endpoints reciben identificadores de objetos (IDs) en requests pero no verifican que el usuario autenticado tenga permiso para acceder a ese objeto específico. Un atacante simplemente cambia el ID en el request para acceder a datos de otro usuario. Es la vulnerabilidad API #1 porque es extremadamente común y fácil de explotar — solo incrementa el ID en la URL o body del request.

Código Vulnerable
// GET /api/orders/:id
app.get('/api/orders/:id', auth, async (req, res) => {
  const order = await Order.findById(req.params.id);
  res.json(order); // No ownership check!
});
Código Seguro
// GET /api/orders/:id
app.get('/api/orders/:id', auth, async (req, res) => {
  const order = await Order.findOne({
    _id: req.params.id,
    userId: req.user.id // Ownership check
  });
  if (!order) return res.status(404).json({ error: 'Not found' });
  res.json(order);
});

Ejemplo Real

En 2023, una vulnerabilidad BOLA en la API de una telecom importante de EEUU permitió a atacantes acceder a datos de cualquier cliente cambiando el número de cuenta en requests API. Más de 37 millones de registros de clientes fueron expuestos.

Cómo Prevenirlo

  • Siempre incluye propiedad del usuario en queries a base de datos
  • Usa UUIDs en vez de IDs secuenciales para dificultar adivinación
  • Implementa middleware de autorización que verifique propiedad del objeto
  • Escribe tests de integración que verifiquen que acceso cruzado está bloqueado

Tecnologías Afectadas

Node.jsPythonGoJavaPHPC#

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas