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
// 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
// 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
// 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
// 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
}