¿Te acuerdas de ese plugin tan majo que permite mostrar imágenes del tipo antes-después llamado Twenty20 Image Before-After?
Pues resulta que lleva meses sin actualizar, el autor sin contestar en los foros, y encima tiene una vulnerabilidad grave del tipo XSS que nadie arregla … hasta ahora.
La vulnerabilidad
La vulnerabilidad permite que un usuario con acceso a crear o editar contenido (por ejemplo, un autor o colaborador) pueda inyectar código JavaScript malicioso a través de los atributos del shortcode [twenty20].
Como estos atributos no estaban correctamente saneados ni escapados, cualquier código insertado en parámetros como before, after, img1 o img2 podía almacenarse y ejecutarse en el navegador de cualquier visitante que viera la entrada afectada.
El plugin, cuya funcionalidad es genial, fuera de toda duda, y con más de 30.000 instalaciones activas, resulta que tiene ese problema gravísimo de seguridad hace muuuuchos meses, años si tenemos en cuenta el primer aviso.
Y como tú, algunos clientes de nuestro servicio de mantenimiento web tienen ese plugin no querían prescindir del mismo porque la realidad es que lo que hace lo hace de maravilla y el funcionamiento en sí es prácticamente perfecto, y encima es compatible con Elementor, WP Bakery y Divi, vamos, una joya – llena de mierda, pero joya –.
La solución (temporal)
Así que, mientras el autor se anima a actualizarlo, y como no quería tampoco hacer un plugin nuevo ni modificar a mano el actual, lo que he preparado hace ya tiempo para mis clientes, y ahora comparto contigo (perdona, se me olvidó hacerlo antes, y te prometo que lo tenía pensado) es un parche en forma de plugin.
No tiene misterio, lo instalas como cualquier plugin subiéndolo desde el instalador de plugins de WordPress, lo activas y ya está.
El plugin es en realidad un parche que soluciona el problema de validación y escape saneando todos los atributos del shortcode antes de pasarlos a la función original de salida de Twenty20, y todo funciona sin problemas, igual que sin el parche (tras unos cuantas pruebas, que se puso puñetero en esto).
Cómo funciona el parche
- Se engancha en el proceso
do_shortcode_tagdel shortcode[twenty20]. - Valida y sanea todos los atributos:
img1yimg2: solo se permiten IDs numéricos o URLs válidas.offset: se convierte a número decimal (rango 0–1).orientation: solo se aceptan los valores'horizontal'o'vertical'.before_label,after_labely otros textos se limpian consanitize_text_field().
- Pasa los atributos ya filtrados a la función original de Twenty20, conservando toda la funcionalidad.
De esta forma puedes seguir usando el shortcode con normalidad, pero evitando cualquier intento de inyección de JavaScript.
Ejemplo de uso
Uso seguro del shortcode:
[twenty20 img1="123" img2="456" before="Antes" after="Después" offset="0.5"]
Ejemplo de inyección maliciosa neutralizada:
[twenty20 img1="javascript:alert(1)" img2="..." before="<script>alert(1)</script>"]
Este código será saneado y no se ejecutará.
Compatibilidad
- Probado con Twenty20 versión 2.0.4
- Compatible con WordPress 6.x+
- Requiere PHP 7.4 o superior
Nota importante
Este es un parche temporal destinado a proteger tu sitio hasta que el plugin oficial Twenty20 publique una actualización con la corrección de seguridad.
La idea es que, si no puedes o no quieres prescindir de usar Twenty20 Image Before-After, tengas activo el parche hasta que el autor del plugin lo actualice solucionando el problema de seguridad, o alguien se haga cargo del plugin, algo que también es posible, y sería casi la mejor solución visto lo visto.
Cuando haya una actualización del plugin Twenty20 Image Before-After que arregle la vulnerabilidad, pues desactivas mi plugin-parche y arreando, como amigos 🙂
He subido el plugin a mi repositorio de GitHub, pero también lo tienes en un zip listo para descargar en el siguiente botón, lo que prefieras.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!






