0Pricing
Security+ Academy · Lección

Autenticación defectuosa y deserialización insegura

Explore cómo la gestión débil de sesiones, el credential stuffing y las vulnerabilidades de deserialización insegura permiten secuestrar cuentas y ejecutar código.

Autenticación defectuosa y deserialización insegura es una lección gratuita de Security+ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Security+ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Security+ Academy incluye 4 lecciones en total.

¿Qué es la autenticación defectuosa?

La autenticación defectuosa hace referencia a las debilidades en la forma en que una aplicación verifica la identidad de los usuarios y gestiona las sesiones. Cuando la autenticación es defectuosa, los atacantes pueden comprometer contraseñas, claves o tokens de sesión para suplantar la identidad de otros usuarios. Esta categoría del Top 10 de OWASP abarca una amplia variedad de fallos: credenciales débiles, gestión deficiente de sesiones, ausencia de MFA y almacenamiento inseguro de credenciales.

Relleno de credenciales y pulverización de contraseñas

El relleno de credenciales utiliza grandes listas de pares de nombres de usuario y contraseñas obtenidos en filtraciones de datos anteriores y los prueba en otros sitios para explotar la reutilización de contraseñas. La pulverización de contraseñas adopta el enfoque contrario: prueba un pequeño conjunto de contraseñas comunes (p. ej., Password1!) contra muchas cuentas para evitar los umbrales de bloqueo de cuentas. Ambos ataques tienen éxito debido a políticas de contraseñas débiles y a la ausencia de MFA.

# Password spraying concept (defensive awareness)
# Attacker tries 'Password1!' against 10,000 accounts
# rather than trying 10,000 passwords against 1 account
# This avoids triggering lockout policies (e.g., 5 attempts/account)

# Defense: MFA + adaptive authentication + rate limiting

Gestión débil de sesiones

Las sesiones vinculan a los usuarios autenticados con el estado de la aplicación. Entre los fallos de la gestión débil de sesiones se incluyen valores predecibles de tokens de sesión (identificadores secuenciales que los atacantes pueden adivinar), tokens que nunca caducan, tokens transmitidos mediante HTTP en lugar de HTTPS y la falta de invalidación de tokens al cerrar sesión. Un atacante que obtiene un token de sesión válido puede suplantar al usuario sin conocer su contraseña.

# Signs of weak session management:
# /login response sets:
# Set-Cookie: session=1042  (predictable, sequential)
# Missing: Secure; HttpOnly; SameSite flags
# Missing: session expiry / Max-Age
# Logout does NOT invalidate server-side session

Fijación y secuestro de sesiones

La fijación de sesión obliga a la víctima a utilizar un identificador de sesión elegido por el atacante. Por ejemplo, un atacante envía un enlace con una cookie de sesión preestablecida; después de que la víctima se autentica, el atacante utiliza ese mismo identificador de sesión para acceder a la cuenta. El secuestro de sesión roba un token de sesión existente mediante XSS, la captura de tráfico de red (en conexiones no cifradas) o cookies robadas. La solución consiste en regenerar los identificadores de sesión después del inicio de sesión y utilizar HTTPS en todas partes.

Almacenamiento inseguro de contraseñas

Almacenar contraseñas en texto plano o con funciones hash débiles (MD5, SHA-1) constituye un fallo crítico de autenticación. Cuando se vulnera una base de datos, las contraseñas en texto plano y los hashes débiles pueden utilizarse de inmediato. El almacenamiento seguro de contraseñas requiere un algoritmo de hash adaptativo diseñado para contraseñas: bcrypt, Argon2 o PBKDF2 con una sal aleatoria por usuario. Estos algoritmos son deliberadamente lentos, lo que encarece computacionalmente el cracking sin conexión.

# Python example — secure password hashing with bcrypt
import bcrypt

# Hash a password (includes random salt automatically)
password = b'UserSuperSecret123'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))

# Verify
bcrypt.checkpw(password, hashed)  # returns True

¿Qué es la deserialización insegura?

La serialización convierte el estado de un objeto a un formato (JSON, XML o binario) para almacenarlo o transmitirlo. La deserialización reconstruye el objeto a partir de ese formato. La deserialización insegura ocurre cuando una aplicación deserializa datos controlados por un atacante sin validarlos, lo que permite modificar objetos serializados para manipular la lógica de la aplicación, escalar privilegios o ejecutar código arbitrario en el servidor.

Ejemplo de ataque de deserialización

Un patrón de ataque habitual consiste en pasar objetos serializados en cookies o parámetros de API. Por ejemplo, una aplicación Java que utiliza ObjectInputStream.readObject() con datos no confiables puede provocar Remote Code Execution (RCE) mediante cadenas de gadgets en bibliotecas populares (Apache Commons Collections). El atacante crea una carga serializada maliciosa, la envía a la aplicación y el código se ejecuta durante la deserialización, a menudo antes de que se realice cualquier comprobación de autenticación.

# Insecure deserializing pattern (Python pickle — dangerous)
import pickle

# Attacker-controlled payload
class Exploit:
    def __reduce__(self):
        import os
        return (os.system, ('id',))  # executes 'id' on server

payload = pickle.dumps(Exploit())
pickle.loads(payload)  # RCE! Never deserialize untrusted data with pickle

Prevención de la deserialización insegura

Entre las defensas contra la deserialización insegura se incluyen: no deserializar nunca datos no confiables con formatos peligrosos como la serialización nativa de Java o pickle de Python. Es preferible utilizar formatos que contengan únicamente datos (JSON o XML) en lugar de la serialización binaria. Si la deserialización es necesaria, implemente comprobaciones de integridad (firmar el objeto serializado con HMAC), utilice listas de permitidos para restringir las clases que pueden deserializarse y ejecute el código de deserialización en entornos aislados y con pocos privilegios.

# Safe approach: sign serialized data before transmitting
import hmac, hashlib, json

def serialize_safe(data, secret):
    payload = json.dumps(data)  # use JSON, not pickle
    sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
    return payload + '.' + sig

La autenticación multifactor como control

La autenticación multifactor (MFA) es el control individual más eficaz contra la autenticación defectuosa. Incluso si las credenciales se ven comprometidas mediante phishing, relleno de credenciales o una filtración de base de datos, un atacante sin el segundo factor no puede autenticarse. Microsoft informa de que la MFA bloquea más del 99,9 % de los ataques automatizados de compromiso de cuentas. La MFA debe ser obligatoria para las cuentas con privilegios y se recomienda para todos los usuarios.

Bloqueo de cuentas y limitación de velocidad

Las políticas de bloqueo de cuentas deshabilitan temporalmente una cuenta después de un número definido de intentos fallidos de inicio de sesión, lo que ralentiza los ataques de fuerza bruta. Sin embargo, los bloqueos pueden permitir una denegación de servicio contra usuarios legítimos: los atacantes provocan bloqueos intencionadamente para impedir el acceso. La limitación de velocidad (ralentizar las respuestas después de varios fallos mediante un retroceso exponencial) y los desafíos CAPTCHA mitigan la fuerza bruta con un menor riesgo de DoS.

Autenticación defectuosa en OWASP Top 10

OWASP incluye la autenticación defectuosa como un riesgo crítico porque los fallos de autenticación son frecuentes y tienen un gran impacto. Entre los indicadores clave de una autenticación defectuosa se incluyen: permitir ataques automatizados, como el relleno de credenciales; permitir ataques de fuerza bruta u otros ataques automatizados; permitir contraseñas predeterminadas, débiles o conocidas; utilizar procesos débiles de recuperación de credenciales; usar contraseñas en texto plano o con un hash débil; y carecer de autenticación multifactor, o implementarla de forma ineficaz.

Comprobación rápida

Compruebe su comprensión de los conceptos de CompTIA Security+ (SY0-701) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que: la autenticación defectuosa incluye sesiones débiles, relleno de credenciales y almacenamiento inseguro de contraseñas; la deserialización insegura puede provocar la ejecución remota de código mediante objetos serializados maliciosos; y MFA, el hashing de contraseñas con bcrypt, la regeneración de sesiones después del inicio de sesión y los datos serializados firmados son defensas clave. A continuación, exploraremos el SDLC seguro y las herramientas SAST y DAST.

Preguntas frecuentes

¿La lección «Autenticación defectuosa y deserialización insegura» es gratis?

Sí — el texto completo de «Autenticación defectuosa y deserialización insegura» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Security+ Academy, actualiza a CoddyKit PRO. El curso de Security+ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Autenticación defectuosa y deserialización insegura»?

Explore cómo la gestión débil de sesiones, el credential stuffing y las vulnerabilidades de deserialización insegura permiten secuestrar cuentas y ejecutar código. Practicas Security+ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Security+ Academy?

No se requiere experiencia previa. Security+ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Autenticación defectuosa y deserialización insegura»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Security+ Academy?

Sí. Cada lección de Security+ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Inyección SQL e inyección de comandos
  2. Cross-Site Scripting (XSS) y CSRF
  3. Autenticación defectuosa y deserialización insegura
  4. SDLC seguro y herramientas SAST y DAST
← Volver a Security+ Academy