Skip to content

Broken Object Property Level Authorizationes una categoría de vulnerabilidades que abarca dos subclases: Excessive Data Exposure y Mass Assignment.

Un punto de conexión API es vulnerable Excessive Data Exposuresi revela datos confidenciales a usuarios autorizados a los que no deberían tener acceso.

Por otro lado, un punto de conexión de API es vulnerable Mass Assignmentsi permite a los usuarios autorizados manipular propiedades de objetos confidenciales más allá de su ámbito autorizado, incluyendo la modificación, adición o eliminación de valores.

Es un fallo en el control de acceso a nivel de propiedades individuales dentro de objetos. Mientras que Broken Object Level Authorization se trata de acceder a objetos completos que no te pertencen, esta vulnerabilidad es más sutil: puedes acceder al objeto, pero a propiedades específicas dentro de él que no deberías.

Excessive Data Exposure

Ejemplos:

  • API de E-commerce
c
// Respuesta vulnerable - EXPONE DATOS SENSIBLES
{
  "id": 123,
  "nombre": "Proveedor A",
  "email": "contacto@proveedora.com",
  "telefono": "+1234567890",
  "margen_ganancia": 45,
  "costo_base": 15.50,
  "direccion_fiscal": "Calle Secreta 123"
}

// Respuesta segura - SOLO DATOS NECESARIOS
{
  "id": 123,
  "nombre": "Proveedor A",
  "calificacion": 4.5
}

Usuario normal puede ver márgenes de ganancia y costos base que deberían ser solo para administradores.

  • API de Red Social
c
// Respuesta vulnerable
{
  "usuario": {
    "id": 456,
    "username": "juan123",
    "email": "juan@email.com",
    "fecha_nacimiento": "1990-05-15",
    "direccion": "Av. Principal 456",
    "ultimo_acceso": "2024-01-15T10:30:00Z",
    "ip_registro": "192.168.1.100"
  }
}

Exposición de información personal sensible a otros usuarios.

Mass Assignment

Ejemplo

  • Actualización de Perfil de Usuario
c
// Endpoint vulnerable - PATCH /api/users/123
// Usuario manda:
{
  "nombre": "Juan Actualizado",
  "email": "juan@nuevoemail.com",
  "rol": "admin",           // Campo que no debería poder modificar
  "saldo": 1000,           // Campo sensible
  "verificado": true       // No debería auto-verificarse
}

// El backend acepta TODOS los campos sin filtrar
  • Sistema de Pedidos
c
// Usuario regular intenta modificar pedido
PATCH /api/orders/789
{
  "estado": "entregado",          // No debería poder cambiar estado
  "monto_total": 50,              // No debería modificar precio
  "fecha_entrega": "2024-01-20",  // No debería cambiar fechas
  "descuento_aplicado": 30        // No debería aplicar descuentos
}