Broken Object Level Authorization
Authorization Bypass Through User-Controlled Key
Es una vulnerabilidad de seguridad que ocurre cuando una aplicación no verifica adecuadamente que un usuario tenga permisos para acceder a un objeto específico que intenta manipular.
También conocida como "Authorization Bypass Through User-Controlled Key", esta vulnerabilidad permite a atacantes acceder o modificar recursos a los que no deberían tener acceso simplemente cambiando identificadores en las peticiones.
- Mecanismo de la vulnerabilidad
c
Usuario A → ID: 123 → Tiene acceso a recurso A
Usuario B → ID: 456 → No debería acceder a recurso AEjemplos
API vulnerable:
c
GET /api/orders/1001
Authorization: Bearer <token_usuario_B>Respuesta:
c
json
{
"order_id": 1001,
"user_id": 150,
"items": [...],
"total": 250.00
}Ataque:
c
# Usuario B (ID: 200) prueba IDs secuenciales
curl -H "Authorization: Bearer token_B" https://api.tienda.com/orders/1002
curl -H "Authorization: Bearer token_B" https://api.tienda.com/orders/1003Sistema Bancario - Transferencias entre cuentas
API vulnerable:
c
POST /api/transfer
Content-Type: application/json
Authorization: Bearer <token>
{
"from_account": "ACC123",
"to_account": "ACC456",
"amount": 1000
}Ataque:
c
POST /api/transfer
Content-Type: application/json
Authorization: Bearer <token_usuario_A>
{
"from_account": "ACC789", // Cuenta de otro usuario
"to_account": "ACC456",
"amount": 5000
}Escenarios Comunes de BOLA
- IDs Secuenciales
c
// PATRÓN DE ATAQUE COMÚN
// https://api.app.com/users/1
// https://api.app.com/users/2
// https://api.app.com/users/3- UUIDs Predecibles
c
# Aunque sean UUIDs, sin verificación son vulnerables
/document/123e4567-e89b-12d3-a456-426614174000
/document/123e4567-e89b-12d3-a456-4266141740013. Parámetros en Query Strings
http
GET /api/files?user_id=456 GET /api/invoices?company_id=789