TL;DR

  • Prueba BOLA/IDOR en cada endpoint—es la vulnerabilidad #1 de API (OWASP API Security Top 10 2023)
  • Testing de JWT debe cubrir confusión de algoritmo, secretos débiles y manipulación de token—no solo expiración
  • Nunca aceptes API keys en URLs; verifica que rate limiting funcione por key, no solo por IP

Ideal para: APIs públicas, sistemas multi-tenant, APIs manejando datos sensibles (PII, financieros, salud)

Omitir si: APIs solo internas con clientes confiables, fase temprana de prototipado

Tiempo de lectura: 18 minutos

La seguridad de las APIs es fundamental en el desarrollo moderno. Este artículo complementa nuestra guía completa de API testing y profundiza en los aspectos de seguridad. Si trabajas con aplicaciones móviles, también te interesará nuestra guía sobre OAuth y JWT en testing móvil y las mejores prácticas de seguridad móvil.

Fundamentos Seguridad API

Testing seguridad API valida autenticación, autorización, validación entrada y mecanismos protección datos.

OWASP API Security Top 10

  1. Broken Object Level Authorization (BOLA/IDOR)
  2. Broken Authentication
  3. Broken Object Property Level Authorization
  4. Unrestricted Resource Consumption
  5. Broken Function Level Authorization

Testing OAuth 2.0

class OAuthFlowTester:
    def test_authorization_flow(self):
        # Paso 1: Obtener código autorización
        params = {
            'response_type': 'code',
            'client_id': self.client_id,
            'redirect_uri': 'http://localhost:3000/callback'
        }

        # Paso 2: Intercambiar código por token
        token_response = requests.post(self.token_url, data={
            'grant_type': 'authorization_code',
            'code': auth_code
        })

        assert 'access_token' in token_response.json()

Testing JWT

// JWT testing
const jwt = require('jsonwebtoken');

// Test JWT expirado
function testExpiredJWT() {
    const token = jwt.sign({ userId: 123 }, secret, { expiresIn: '-1s' });

    try {
        jwt.verify(token, secret);
        console.error('✗ JWT expirado fue aceptado!');
    } catch (err) {
        console.log('✓ JWT expirado correctamente rechazado');
    }
}

Testing API Keys

class APIKeyTester:
    def test_api_key_in_header(self, api_key):
        response = requests.get(
            f"{self.base_url}/api/data",
            headers={'X-API-Key': api_key}
        )
        assert response.status_code == 200

    def test_rate_limiting(self, api_key):
        for i in range(110):
            response = requests.get(url, headers={'X-API-Key': api_key})

        # Debe alcanzar rate limit
        assert 429 in responses

Testing Autorización (BOLA/IDOR)

def test_bola():
    # Token Usuario A
    token_a = 'user_a_token'

    # Intentar acceder recurso Usuario B
    response = requests.get(
        f'https://api.example.com/users/456/profile',
        headers={'Authorization': f'Bearer {token_a}'}
    )

    # Debe retornar 403 Forbidden
    assert response.status_code == 403

Enfoques Asistidos por IA

El testing de seguridad puede mejorarse con herramientas de IA para detección de vulnerabilidades y generación de pruebas.

Lo que la IA hace bien:

  • Generar payloads de pruebas de seguridad desde guías OWASP
  • Analizar especificaciones de API para gaps potenciales de autorización
  • Crear casos de prueba de inyección completos (SQL, NoSQL, XSS)
  • Identificar headers de seguridad faltantes en respuestas de API
  • Generar escenarios de manipulación de JWT

Lo que aún necesita humanos:

  • Entender contexto de negocio para identificar flujos de datos sensibles
  • Validar que controles de seguridad cumplan requisitos de compliance (GDPR, HIPAA, PCI-DSS)
  • Evaluar severidad de riesgo basado en impacto de negocio
  • Diseñar escenarios de ataque que combinen múltiples vulnerabilidades
  • Verificar que fixes de seguridad no rompan funcionalidad legítima

Prompts útiles:

Analiza esta especificación de API e identifica vulnerabilidades potenciales BOLA/IDOR.
Para cada endpoint que accede recursos específicos de usuario, genera casos de prueba
que verifiquen checks de autorización apropiados.
Genera una suite completa de pruebas de seguridad JWT incluyendo: ataques de confusión
de algoritmo, manejo de tokens expirados, manipulación de firma, y detección de
secretos débiles. Incluye implementaciones en Python y JavaScript.

Cuándo Invertir en Testing de Seguridad API

Testing de seguridad es esencial cuando:

  • APIs manejan datos sensibles (PII, financieros, registros de salud)
  • APIs públicas accesibles a desarrolladores terceros
  • Sistemas multi-tenant donde aislamiento de datos es crítico
  • APIs procesando pagos o autenticación
  • Requisitos de compliance (SOC2, HIPAA, PCI-DSS, GDPR)
  • Después de incidentes de seguridad o divulgaciones de vulnerabilidades

Considera enfoques más ligeros cuando:

  • APIs solo internas con controles de acceso a nivel de red
  • Prototipado temprano donde seguridad no está configurada aún
  • APIs de solo lectura retornando datos públicos
  • Entornos de desarrollo sin datos de producción
EscenarioEnfoque Recomendado
API pública con datos sensiblesSuite completa: OWASP Top 10, pen testing, escaneo automatizado
Microservicios internosTesting BOLA/IDOR, validación autenticación, pruebas básicas de inyección
Integración API tercerosEnfocarse en seguridad de credenciales, manejo de rate limit
Backend app móvilSeguridad JWT, almacenamiento de tokens, gestión de sesiones
Producto API B2BSeguridad API key, aislamiento de clientes, audit logging

Midiendo el Éxito

MétricaAntes de TestingObjetivoCómo Rastrear
Cobertura OWASP Top 10Desconocido100% testeadoChecklist de pruebas de seguridad
Vulnerabilidades BOLA/IDORDescubiertas en prod0 en prodReportes de pen test
Intentos de Bypass AutenticaciónNo monitoreado100% bloqueadosLogs WAF/API gateway
Detección de Ataques de InyecciónVariable< 1ms detecciónMonitoreo de seguridad
Tiempo para Remediar CríticosDías/Semanas< 24 horasTracking de incidentes

Señales de advertencia de que tu testing de seguridad no funciona:

  • Vulnerabilidades descubiertas por investigadores externos
  • Bypass de autenticación encontrado en producción
  • Filtraciones de datos o incidentes de acceso no autorizado
  • Fallas en auditorías de compliance
  • Ataques de inyección exitosos contra APIs
  • API keys o tokens expuestos en logs o URLs

Conclusión

Testing seguridad API es crítico para proteger datos sensibles y prevenir acceso no autorizado. Testear sistemáticamente mecanismos autenticación, controles autorización y validación entrada asegura que APIs resistan ataques comunes.

Ver También

Recursos Oficiales