Aviso de seguridad de Link Library
Si ha recibido un correo mío que le remite a esta página, es porque su sitio web parece estar
ejecutando una versión de Link Library (el plugin de WordPress de Yannick Lefebvre, que
reside en sus archivos en /wp-content/plugins/link-library/) que entra dentro del rango
afectado por un problema de seguridad conocido. Esta página explica en qué consiste el problema,
cómo comprobar qué versión tiene, cómo actualizar y qué hacer después.
El problema es CVE-2026-16532, un fallo de inyección SQL sin autenticación alcanzable a través de la gestión de envíos de enlaces del plugin. Afecta a todas las versiones anteriores a la 7.9.3 y está corregido en la 7.9.3. La versión actual en el momento de escribir esto es la 7.9.4, que también incorpora la corrección. Si está ejecutando cualquier versión anterior a la 7.9.3, actualice Link Library a la 7.9.3 o posterior.
Conviene dejar clara una cosa: no hay ninguna versión antigua que sea segura. No se trata de un fallo que se introdujera en algún momento de la historia del plugin y luego se corrigiera. El código vulnerable está presente en todas las versiones publicadas que he podido comprobar, hasta la más antigua que el directorio de WordPress.org sigue sirviendo. «Mi instalación es demasiado antigua para estar afectada» no es una salida en este caso. Las únicas versiones no afectadas son la 7.9.3 y posteriores.
Igual de importante: este aviso no depende de cómo esté configurado su sitio. Link Library incluye un formulario que permite a los visitantes sugerir enlaces, y la suposición natural es que un sitio solo está expuesto si realmente ha colocado ese formulario en alguna página. Esa suposición es falsa. El código afectado se ejecuta en todas las peticiones corrientes del frontend, haya publicado usted el formulario de envío o no, y los ajustes de fábrica del plugin no lo impiden. Si su sitio ejecuta una versión afectada, es alcanzable. Punto.
Este es un fallo del plugin, no del núcleo de WordPress. Un WordPress completamente actualizado no le protege si el propio plugin Link Library está en una versión afectada.
¿Es legítimo este mensaje?
Sí. Es un aviso de divulgación responsable y de buena fe de un investigador de seguridad independiente. No le pido dinero, contraseñas ni acceso a su sitio, y no he intentado entrar en él, enviarle nada ni explotar nada.
Lo único que hice fue mirar archivos públicos que su sitio sirve a cualquier visitante (igual que su página de inicio es pública) y anotar el número de versión que publica el plugin. En concreto, no envié nada a la función de envío de enlaces del plugin, ni en su sitio ni en ningún otro, y nada de esta comprobación toca sus datos, su área de administración ni ninguna parte privada de su sitio (más detalle en Qué hice y qué no hice, más abajo).
Si desea verificar quién soy, consulte los datos de contacto al final de esta página y la página Acerca de.
Por qué importa
Link Library construye y muestra directorios de enlaces en su sitio, y puede aceptar sugerencias de enlaces de los visitantes. La gestión de esas sugerencias es donde reside este problema.
En las versiones afectadas, cuando el plugin procesa un enlace enviado, su comprobación de si ese enlace ya existe construye una consulta a la base de datos pegando directamente en ella los valores enviados. Los valores se limpian para mostrarlos, pero no se escapan para su uso en SQL, y la consulta se ejecuta sin una sentencia preparada. La consecuencia es que un visitante que no ha iniciado sesión puede alterar esa consulta y leer datos de la base de datos de su sitio. La versión 7.9.3 reescribe la consulta para usar una sentencia preparada, lo que cierra el problema.
Repitiendo lo dicho al principio, porque es lo que con más probabilidad da una falsa tranquilidad: la exposición no depende de que el formulario de envío esté publicado en ninguna parte de su sitio. La ruta de código que procesa los envíos escucha en todas las peticiones del frontend, y todo lo que una petición necesita para alcanzarla puede obtenerse del propio plugin, sin que exista ningún formulario en ninguna página. Que su sitio esté expuesto se reduce a una sola cosa: la versión que está ejecutando.
También conviene precisar qué es y qué no es este problema. Permite a un atacante leer datos de la base de datos. Eso ya es serio de por sí, puesto que una base de datos de WordPress contiene cosas como direcciones de correo de los usuarios y contraseñas cifradas mediante hash, y en algunos sitios registros de clientes o de socios. Pero no es, por sí solo, ejecución remota de código, ni una toma de control del sitio, ni una manera de que un atacante se conceda una cuenta de administrador. Es más limitado que los problemas de compromiso total sobre los que escribo en otras páginas, y prefiero fijar la escala con honestidad antes que dejarle una impresión más alarmante de lo que los hechos respaldan.
Describo esto al nivel que el propietario de un sitio necesita para actuar, y no más. No publico los detalles que permitirían a alguien reproducirlo, y le pediría que no lo intente contra su propio sitio ni contra el de nadie. Leer su número de versión, tal como se explica abajo, le dice todo lo que necesita para decidir qué hacer.
Si mi correo citaba este problema, significa que la versión que informa su sitio es anterior a la 7.9.3. No comprobé si su sitio en concreto es explotable; lo único que observé es la versión.
¿Estoy afectado?
Todo se reduce a una pregunta: ¿qué versión de Link Library está ejecutando?
Desde el área de administración de WordPress (fuente autorizada):
- Inicie sesión en su escritorio de WordPress (normalmente en
sudominio.com/wp-admin). - Vaya a Plugins y luego a Plugins instalados.
- Busque Link Library, la entrada cuya carpeta es
link-library, y observe la versión que aparece bajo su nombre.
Desde el manifiesto público (sin necesidad de acceder): abra
sudominio.com/wp-content/plugins/link-library/readme.txt en un navegador. La línea
Stable tag:, cerca del principio, es la versión que informa su instalación, y es el mismo
archivo público que yo leí. En el caso de este plugin comprobé que coincide con el código
realmente publicado en todas las versiones recientes, así que es una comprobación fiable.
Una comprobación que no funciona con este plugin, así que no se fíe de ella. Si tiene
costumbre de leer las versiones de los plugins a partir del número ?ver= añadido a un script o
a una hoja de estilos en el código fuente de su página, aquí le inducirá a error. Los números de
versión en las URL de los recursos de este plugin son las versiones congeladas de bibliotecas de
terceros incluidas (valores como 4.0.1, 1.0.0 o 1.3.9), o bien la versión del núcleo de
WordPress. Ninguno de ellos es la versión del plugin, y compararlos con la 7.9.3 no significa
nada. Use la pantalla de administración o el readme.txt.
Un caso límite más: algunas instalaciones muy antiguas muestran Stable tag: trunk en su
readme.txt. Eso no es en absoluto un número de versión. Si lo ve, use en su lugar la pantalla
de plugins de la administración, y trate la instalación como afectada mientras la pantalla no le
diga lo contrario, ya que una instalación lo bastante antigua como para decir trunk es sin duda
anterior a la 7.9.3.
Después aplique esta regla:
- Cualquier versión anterior a la 7.9.3: afectada. Actualice. No hay ningún límite por debajo del cual una versión antigua vuelva a ser segura.
- 7.9.3 o posterior: ya corregida. La 7.9.4, la versión actual, también incorpora la corrección.
Cómo actualizar
El plugin es gratuito, sigue publicado y se mantiene activamente, así que la corrección es una actualización corriente. La vía más segura es actualizar desde el propio WordPress, y hacer antes una copia de seguridad:
- Haga una copia de seguridad de su sitio (archivos y base de datos) antes de hacer cambios. La mayoría de los proveedores de alojamiento ofrecen copias de seguridad con un clic, o puede usar un plugin de copias de seguridad de WordPress.
- En la administración de WordPress, vaya a Escritorio y luego a Actualizaciones, o a Plugins y luego a Plugins instalados. Si aparece una actualización de Link Library, instálela desde ahí.
- Si prefiere la línea de comandos, WP-CLI hace lo mismo:
wp plugin update link-library. - Si no aparece ninguna actualización, puede obtener la última versión directamente desde la página del plugin en el directorio de WordPress.org, Link Library, y actualizar mediante Plugins, Añadir nuevo plugin, Subir plugin.
- Después de actualizar, confirme el nuevo número de versión (7.9.3 o posterior) con los pasos anteriores, y compruebe que sus directorios de enlaces siguen mostrándose y comportándose con normalidad.
Ya que está, conviene confirmar que el núcleo de WordPress y sus demás plugins están al día, ya que el mismo principio se aplica a todos ellos.
Después de actualizar
Actualizar a la 7.9.3 o posterior cierra el problema: la comprobación de los envíos se ejecuta ahora como sentencia preparada, de modo que los valores enviados se tratan como datos y no como parte de la consulta.
Qué no puede hacer la actualización, dicho con cuidado. Actualizar impide que se lea nada de su base de datos en el futuro. No puede «des-leer» nada que ya se hubiera leído mientras el sitio estaba en una versión afectada. No tengo ninguna visibilidad sobre si eso ocurrió en su sitio, y no lo he mirado; lo más probable es que a la mayoría de los sitios en el rango afectado nunca los hayan tocado. Pero como no puedo asegurárselo con certeza, un poco de precaución es razonable, en proporción a lo que contenga su base de datos:
- Si su sitio es un sitio de publicación sencillo, donde la base de datos contiene sus entradas, sus páginas y un puñado de cuentas de usuario, el paso sensato es pedir a sus usuarios (y especialmente a sus administradores) que cambien sus contraseñas. WordPress guarda las contraseñas cifradas mediante hash, no en texto plano, pero los hashes de contraseñas débiles pueden descifrarse sin conexión, así que una contraseña nueva elimina esa preocupación.
- Si su sitio guarda algo más sensible (registros de socios, datos de clientes, claves de API u otras credenciales conservadas por plugins), considere que también conviene renovarlos.
- Regenerar las claves secretas y «salts» de WordPress en
wp-config.php(los valores nuevos están a un clic en el generador oficial) cierra la sesión de todos los usuarios una vez e invalida cualquier token de sesión robado.
Para que quede claro el planteamiento: esto es una precaución, no una declaración de que sus datos hayan sido sustraídos. Este aviso se basa en un número de versión, no en ninguna prueba de un ataque.
Qué hice y qué no hice
Para ser totalmente transparente sobre la comprobación que hay detrás de mi correo: solo leí
archivos públicos que su sitio ya sirve a cualquier visitante, en concreto el readme.txt
público del plugin y su página de inicio. No accedí a su área de administración de WordPress,
ni a su base de datos, ni a ninguna parte privada del sitio.
En concreto, nunca envié nada a la función de envío de enlaces del plugin, ni en su sitio ni en ningún otro. No se envió, almacenó, probó ni explotó nada. Eso importa más aquí que en la mayoría de estas páginas, porque la gestión de los envíos es exactamente aquello de lo que trata este problema, así que «no lo toqué» es toda la diferencia entre una divulgación y una intrusión.
También evito deliberadamente publicar los detalles que ayudarían a alguien a aprovechar este problema. La descripción anterior se detiene en el nivel que necesita el propietario de un sitio, y no enlazo ningún código de prueba de concepto.
Esta es una observación basada en la versión: su sitio informa de una versión anterior a la 7.9.3. Un sitio en ese rango podría estar ya protegido por otros medios, como un cortafuegos de aplicaciones web o una corrección retroportada. Este aviso no es una afirmación de que su sitio fuera explotable en el momento en que lo comprobé.
No tengo webmaster / estoy atascado
Si no es usted quien mantiene el sitio, reenvíe esta página a quien lo haga (su desarrollador web, su agencia o su proveedor de alojamiento). Reconocerán los pasos anteriores enseguida.
Si mantiene el sitio usted mismo y se atasca, con gusto le oriento sin coste alguno. Escríbame usando los datos de contacto de abajo.
Contacto
Evan Harris, investigador de seguridad
- Correo: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Contacto sobre cuestiones como esta únicamente para ayudar a los operadores a asegurar sus sitios. Si prefiere no volver a recibir mensajes míos, dígamelo y lo respetaré.
Referencias
Avisos oficiales y seguimiento
Fabricante / plugin