Skip to main content
Critical

Ataque de Credential Stuffing

CategoríaAutenticación y AccesoOWASPA07:2021 – Fallos de Identificación y AutenticaciónPrimera aparición2013Tiempo de lectura8 minVerificado2026-03-10
DEFINICIÓN

Un ataque de credential stuffing es un ciberataque donde bots automatizados utilizan pares de usuario y contraseña robados de brechas de datos anteriores para obtener acceso no autorizado a cuentas de usuario en múltiples sitios web. A diferencia de la fuerza bruta, explota la práctica común de los usuarios de reutilizar contraseñas en diferentes servicios, logrando altas tasas de éxito sin necesidad de adivinar.

Cómo Funciona Ataque de Credential Stuffing

El credential stuffing se basa en la realidad de que los usuarios frecuentemente reutilizan las mismas credenciales en múltiples sitios. Los atacantes obtienen pares de usuario/contraseña filtrados de brechas de datos (ej., Collection #1-5, rockyou2021) y automatizan intentos de inicio de sesión en miles de sitios web objetivo. La escala del ataque va desde miles hasta millones de intentos por día usando botnets distribuidos para evadir la limitación de velocidad.

1

Adquirir credenciales filtradas

Los atacantes obtienen volcados de credenciales de brechas de datos publicadas en foros de la dark web, canales de Telegram o sitios de paste. Las grandes colecciones como 'rockyou2021' contienen miles de millones de pares de usuario/contraseña. Los datos a menudo se validan y clasifican por dominio para aumentar las tasas de éxito.

2

Preparar la lista de objetivos

Identificar los endpoints de inicio de sesión de los sitios web objetivo. Los objetivos populares incluyen comercio electrónico, redes sociales, servicios de streaming e instituciones financieras. Los atacantes recopilan URLs, analizan los formatos de solicitud e identifican los parámetros requeridos (usuario, contraseña, tokens CSRF, CAPTCHA).

3

Automatizar la ejecución del ataque

Usando herramientas como Sentry MBA, BlackBullet o scripts personalizados, los atacantes distribuyen los intentos de inicio de sesión entre múltiples direcciones IP usando proxies residenciales, VPNs o dispositivos infectados por botnets. Esto evade la limitación de velocidad basada en IP y los bloqueos por geolocalización. Los atacantes implementan estrategias inteligentes: probar solo nombres de usuario válidos, rotar encabezados User-Agent y resolver CAPTCHAs con servicios de resolución.

4

Explotar los inicios de sesión exitosos

Las credenciales válidas proporcionan acceso inmediato a las cuentas de usuario. Los atacantes exfiltran datos personales, información de pago, realizan compras fraudulentas, secuestran cuentas para campañas de spam, o venden cuentas verificadas en mercados clandestinos. Las credenciales exitosas a menudo se agregan a listas frescas para futuras campañas.

Ejemplos Reales

2019

Filtraciones de credenciales Collection #1-5

El investigador de seguridad Bob Diachenko descubrió colecciones masivas (Collection #1-5) que contenían más de 2,200 millones de combinaciones únicas de correo electrónico y contraseña de miles de brechas de datos. Estos conjuntos de datos alimentaron campañas de credential stuffing durante años, afectando a miles de millones de cuentas a nivel global.

2018

Oleada de toma de control de cuentas en Amazon

Los atacantes usaron credential stuffing para secuestrar aproximadamente 100,000 cuentas de Amazon Prime. Las víctimas reportaron pedidos no autorizados, compras de tarjetas de regalo y cambios de dirección. Amazon respondió implementando autenticación adicional para nuevas direcciones de envío y transacciones de alto valor.

2020

Oleada de credential stuffing contra Zoom

Durante la pandemia de COVID-19, los atacantes usaron credenciales de una brecha de 500 millones de registros para secuestrar cuentas de Zoom. Interrumpieron reuniones, robaron información sensible e intentaron extorsionar a organizaciones. El incidente destacó el riesgo cuando millones de usuarios adoptan repentinamente nuevos servicios con contraseñas reutilizadas.

Impacto y Evaluación de Riesgo

El credential stuffing causa toma de control de cuentas, fraude financiero, brechas de datos y daño a la marca. Los ataques exitosos conducen a pérdidas financieras directas (compras no autorizadas, robo de tarjetas de regalo), costos indirectos (disputas por fraude, contracargos) y pérdida de confianza del cliente. Las organizaciones enfrentan sanciones regulatorias por controles de seguridad inadecuados bajo GDPR, CCPA y otras leyes de protección de datos. Las pérdidas por fraude de cuentas alcanzaron los $20,300 millones a nivel global en 2023, siendo el credential stuffing el vector de ataque principal.

Cómo Detectar Ataque de Credential Stuffing

Monitorear los logs de autenticación en busca de patrones que indiquen ataques automatizados: alto volumen de inicios de sesión desde una sola IP, inicios de sesión rápidos geográficamente imposibles, picos de relación de inicios de sesión fallidos a exitosos, e inicios de sesión simultáneos en múltiples cuentas. Rastrear huellas digitales de dispositivos únicos vs. acceso a cuentas. Alertar sobre intentos de inicio de sesión usando credenciales de listas de brechas conocidas. Analizar patrones de comportamiento del usuario: temporización consistente, ausencia de telemetría del navegador, encabezados idénticos entre solicitudes. Usar análisis de activación de CAPTCHA para identificar comportamiento de bots.

Cómo Prevenir Ataque de Credential Stuffing

Requerir autenticación multifactor (MFA) — esta es la defensa individual más efectiva, neutralizando el 99% de los intentos de credential stuffing. Implementar huellas digitales de dispositivos y biometría de comportamiento para detectar herramientas automatizadas. Desplegar limitación de velocidad inteligente (por IP, por cuenta, por dispositivo). Aplicar políticas de contraseñas únicas y verificar las nuevas contraseñas contra listas de brechas conocidas usando servicios como HaveIBeenPwned. Usar un WAF con detección de bots para identificar herramientas de credential stuffing. Implementar autenticación progresiva: requerir verificación adicional para patrones de inicio de sesión inusuales, dispositivos nuevos o acciones de alto riesgo. Educar regularmente a los usuarios sobre la reutilización de contraseñas y la importancia de contraseñas únicas por servicio.

Ejemplos de Código

Secure: Password Validation Against Breach List
import requests
from typing import Optional

def check_password_breach(email: str, password: str) -> Optional[dict]:
"""Check if credentials appear in known breaches via HaveIBeenPwned API"""
api_url = 'https://haveibeenpwned.com/api/v3/breachedaccount'

try:
# Check email for breaches (returns list of breaches if found)
response = requests.get(
f'{api_url}/{email}',
headers={'User-Agent': 'YourApp/1.0'},
timeout=5
)

if response.status_code == 200:
breaches = response.json()
return {
'found': True,
'breach_count': len(breaches),
'message': 'Email found in known breaches'
}

return {'found': False}

except requests.RequestException:
return {'found': False}

# Usage in registration flow
if check_password_breach(user_email, user_password)['found']:
raise ValueError('Email has been compromised in past breaches. Please use a different email.')
Secure: MFA Enforcement Pattern (Node.js)
const jwt = require('jsonwebtoken');
const speakeasy = require('speakeasy');

async function handleLogin(email, password, ipAddress) {
// Step 1: Check credentials
const user = await User.findOne({ email });
if (!user || !await user.verifyPassword(password)) {
await logFailedAttempt(email, ipAddress);
throw new Error('Invalid credentials');
}

// Step 2: Check for suspicious activity
const recentAttempts = await getRecentLoginAttempts(user.id);
if (recentAttempts.length > 3) {
// Require MFA for suspicious logins
if (!user.mfaEnabled) {
return {
status: 'mfa_required',
message: 'Suspicious activity detected. Please enable 2FA.',
forceSetup: true
};
}
}

// Step 3: MFA verification (if enabled)
if (user.mfaEnabled) {
return {
status: 'mfa_required',
userId: user.id,
message: 'Enter your 2FA code'
};
}

// Step 4: Successful login - issue JWT
await resetFailedAttempts(email);
const token = jwt.sign(
{ userId: user.id, email: user.email },
process.env.JWT_SECRET,
{ expiresIn: '1h' }
);

return { status: 'success', token, user: safeUser(user) };
}

Fortalece tus defensas contra Ataque de Credential Stuffing con PowerWAF.

Seguridad integral para aplicaciones web con WAF, rate limiting y monitoreo de amenazas en tiempo real.

Los cupos del plan gratuito son limitados

Preguntas Frecuentes

No. La fuerza bruta adivina contraseñas sistemáticamente probando combinaciones. El credential stuffing usa pares conocidos de usuario/contraseña de brechas de datos reales, explotando la reutilización de contraseñas. El credential stuffing es mucho más rápido y tiene tasas de éxito significativamente más altas (0.1-2% vs. <0.01% para fuerza bruta).
Según informes de la industria, las tasas de éxito del credential stuffing van del 0.1% al 2%, comparado con <0.01% para fuerza bruta. Esto significa 1,000-20,000 compromisos exitosos de cuentas por millón de credenciales robadas. La tasa de éxito aumenta cuando los atacantes apuntan a dominios con alta superposición con la brecha original.
Parcialmente. El hashing fuerte (bcrypt, argon2) protege la brecha original del descifrado masivo. Sin embargo, muchas brechas contienen contraseñas en texto plano o con hashing débil. Una vez que las credenciales se filtran, el hashing no hace nada para evitar que los atacantes las usen contra otros sitios. Por eso la reutilización de contraseñas es la vulnerabilidad principal.