Incidentes y vulnerabilidades

Log4Shell (CVE-2021-44228) — un fallo en una librería de logging, y por qué los equipos no podían saber rápido si la usaban

Log4Shell fue un RCE de CVSS 10.0 en Log4j (2021) que llegaba a través de dependencias transitivas. Las lecciones: SBOM, monitorización y parcheo rápido.

Publicado 2026-06-07 Actualizado 2026-10-23 5 min de lectura
En esta página

Revisitamos un incidente importante del pasado, no para reproducir el ataque, sino por las lecciones que aún se aplican a tu operación.

2021/12
divulgado
10.0
CVSS (peor clase)
transitiva
el problema de fondo
varios
CVE de seguimiento

Qué ocurrió: escribir una línea de log se convirtió en una vía de ataque

Log4j manejaba la tarea mundana de escribir logs, y se usaba muchísimo en aplicaciones Java. El fallo: la librería interpretaba cierto patrón dentro de las cadenas registradas como algo que «resolver alcanzando un recurso externo», y terminaba ejecutando código especificado externamente.

Así que un atacante que lograra meter una cadena manipulada en «algún sitio que se registra» (un nombre de usuario, una cabecera) podía llegar a la ejecución de código. Que un acto pasivo como registrar logs pudiera convertirse en una vía de ataque fue una gran sorpresa.

Por qué era difícil saber si estabas afectado

La mayoría de las aplicaciones nunca instalaron Log4j directamente. Un framework o un SDK lo incorporaba. Eso es una dependencia transitiva, una dependencia de una dependencia de una dependencia. Sin tu «lista de materiales», ni siquiera podías saber si estabas afectado.

Tu aplicación (una línea en package.json)
└─▶
framework / SDK (dependencia directa)
└─▶
un componente de logging (dependencia de una dependencia)
└─▶
Log4j ← la vulnerabilidad (nunca instalada directamente)
Añadiste una línea, pero debajo hay decenas de «dependencias de dependencias». Log4j estaba entre ellas.

El mayor problema era no saber si lo usabas

Cuando «no puedes saber si lo usas», ni siquiera puedes priorizar la respuesta. El haber tenido o no una lista de materiales (SBOM) determinó en buena medida la rapidez de la respuesta.

Cronología

  1. 2021-12-09–10

    El fallo se hace ampliamente conocido; el mundo se apresura a comprobar «¿estamos afectados?».
  2. justo después

    Se despliegan parcheos de emergencia y mitigaciones temporales; los intentos de explotación se disparan.
  3. después

    Se publican varios CVE de seguimiento (correcciones de la corrección): «corregido una vez» no era el final.

Lecciones que aún se aplican

1

Ten un SBOM (lista de materiales)

Haz visible lo que tu aplicación usa internamente: npm ls, los lockfiles y las herramientas de SBOM muestran lo que realmente se ejecuta. Mirar solo «lo que instalaste directamente» no basta.

2

Monitoriza las dependencias de forma automática

En el momento en que cae un CVE, sabe automáticamente si te afecta (Dependabot / osv-scanner), incluidas las dependencias transitivas. Las revisiones manuales siempre pasan algo por alto.

3

Haz que el parcheo sea rápido

Practica «actualizar, verificar, desplegar» de forma habitual para poder hacerlo rápido en una emergencia. Consulta cómo construir la monitorización de dependencias.

4

Sigue los CVE de seguimiento

Tras Log4Shell aparecieron correcciones de la corrección. No te quedes en «corregido una vez»: rastrea los seguimientos.

Lee a continuación

Fuentes y alcance

Estas fuentes primarias respaldan los ajustes, el alcance o las medidas anteriores; enlaces comprobados el 23 de octubre de 2026. Revisa sus condiciones de versión y configuración. Las prioridades y lecciones son recomendaciones del sitio, no una revalidación completa ni una garantía de seguridad.

FAQ

Q¿Qué tenía de nuevo el problema de Log4Shell?
A

Expuso el peligro de las dependencias transitivas a escala global: ser vulnerable a través de una librería usada dentro de otra librería, incluso sin una instalación directa. Sin conocer tu SBOM, ni siquiera podías saber si estabas afectado.

Q¿Por qué el registro de logs se convirtió en vector de ataque?
A

Log4j interpretaba cierto texto dentro de las cadenas registradas como algo que «resolver alcanzando un recurso externo». A un atacante le bastaba con colocar una cadena manipulada en algún sitio que se registra (un nombre de usuario, una cabecera HTTP), convirtiendo un camino pasivo de logging en ejecución de código.

Q¿Cómo evito repetirlo?
A

Tres cosas: monitorizar las dependencias de forma automática (Dependabot/osv-scanner), generar un SBOM para ver lo que realmente usas, y ejecutar un proceso de actualización lo bastante rápido para parchear pronto. Además, sigue los CVE de seguimiento (correcciones de la corrección).