CVE-2026-7048 es una vulnerabilidad de inyección SQL de tipo time-based blind en el plugin Photo Gallery by 10Web para WordPress, publicada el 28 de mayo de 2026. Afecta todas las versiones hasta la 1.8.40 inclusive y permite a un atacante autenticado con nivel contributor extraer datos sensibles de la base de datos via el parámetro order_by.

En 30 segundos

  • Plugin afectado: Photo Gallery by 10Web, versiones hasta 1.8.40 inclusive.
  • Tipo de ataque: SQL Injection time-based blind via el parámetro order_by, explotable con nivel contributor.
  • CVSS 6.5 (Media), pero con impacto alto en confidencialidad: un atacante puede extraer credenciales y datos sensibles de la base.
  • Vector de explotación: shortcode malicioso embebido en un post o borrador que se renderiza en el frontend.
  • Acción inmediata: actualizar a la versión 1.8.41 o superior y revisar quién tiene acceso contributor en tu instalación.

Wordfence es un complemento (plugin) de seguridad para WordPress desarrollado por Wordfence Security, que protege contra malware, ataques de fuerza bruta, inyección de código y vulnerabilidades de seguridad mediante un cortafuegos para aplicaciones web (WAF) y monitoreo continuo de amenazas.

¿Qué es CVE-2026-7048?

CVE-2026-7048 es el identificador asignado a una vulnerabilidad de inyección SQL ciega basada en tiempo (time-based blind SQL injection) descubierta en el plugin Photo Gallery by 10Web para WordPress. Fue publicada el 28 de mayo de 2026 y, según INCIBE-CERT, recibió una puntuación CVSS v3.1 de 6.5 con el vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N.

Lo que dice ese vector, en criollo: el ataque se ejecuta por red, sin complejidad especial, con un nivel bajo de privilegios (contributor), sin interacción del usuario, y el resultado es confidencialidad comprometida en alto grado. Nadie toca ni rompe nada (I:N, A:N), pero sí pueden leer todo lo que quieran de la base de datos.

El nombre «time-based blind» significa que el atacante no ve los datos directamente en la respuesta HTTP. Los infiere midiendo cuánto tarda en responder el servidor ante consultas que incluyen funciones como SLEEP(). Es más lento que una inyección directa, pero igual de peligroso (si no más, porque es difícil de detectar sin monitoreo activo).

Plugin afectado: Photo Gallery by 10Web

El plugin en cuestión es The Photo Gallery by 10Web – Mobile-Friendly Image Gallery, una de las soluciones de galerías más populares del repositorio oficial de WordPress. Con más de 300.000 instalaciones activas según datos de WordPress.org, el potencial de impacto es significativo.

Su función es simple: crear galerías de fotos y álbumes dentro de WordPress, con opciones de lightbox, álbumes anidados y salida responsive. Es el tipo de plugin que instalás una vez, lo configurás y te olvidás. Ahí está el problema: esa clase de plugins son los que menos actualizás y los que más tiempo permanecen en versiones vulnerables. Relacionado: soluciones WAF disponibles para WordPress.

Todas las versiones hasta 1.8.40 inclusive son vulnerables.

Cómo funciona la explotación

El punto de entrada es el parámetro order_by que el plugin usa para ordenar las imágenes en una galería. El problema es clásico: la entrada del usuario llega a la consulta SQL sin la sanitización adecuada.

Acá viene algo técnicamente interesante. Investigaciones de Trustwave/SpiderLabs documentaron hace tiempo que usar esc_sql() en cláusulas ORDER BY no es suficiente protección. ¿Por qué? Porque esc_sql() escapa comillas y caracteres dentro de strings, pero una cláusula ORDER BY no espera un string entre comillas: espera un nombre de columna o una expresión SQL directa. Si el valor llega sin comillas, el escape no sirve de nada.

La protección correcta para ORDER BY es usar una lista blanca explícita de valores permitidos (columnas válidas) o castear el valor a entero cuando corresponda. El código de Photo Gallery by 10Web, según el repositorio de plugins de WordPress, no implementaba esa validación.

El atacante puede entonces inyectar algo como 1 AND SLEEP(5) en ese parámetro. Si el servidor tarda 5 segundos en responder, la inyección funcionó. A partir de ahí, puede construir consultas para extraer datos bit a bit midiendo tiempos de respuesta. Tedioso, sí. Imposible, no.

Explotación mediante shortcodes maliciosos

Ponele que sos contributor en un sitio WordPress con multiautor. Creás un post (o incluso un borrador) y metés un shortcode como este:

[photo-gallery id="1" order_by="id AND SLEEP(5)"]

Cuando ese shortcode se renderiza, sea en preview o en el frontend, el plugin ejecuta la consulta con tu valor inyectado. El SQL llega al servidor de base de datos sin filtrar y la inyección funciona.

¿Lo interesante? No necesitás que el post esté publicado. Un borrador que el admin previsualiza alcanza. Esto amplia el vector de ataque porque no requiere que el contenido malicioso llegue a producción para que se ejecute la consulta.

Los shortcodes como vector de ataque están subestimados. Cualquier usuario que puede crear contenido puede abusar de ellos si un plugin no los sanitiza correctamente, y muchos sitios no restringen los shortcodes disponibles por rol. Lo explicamos a fondo en cómo clasificar vulnerabilidades WordPress.

Quién está en riesgo

El requisito mínimo es tener acceso autenticado con nivel contributor o superior (contributor, author, editor, admin). Eso descarta ataques anónimos desde internet, lo cual baja un poco el riesgo en sitios personales o corporativos con un solo administrador.

Donde el riesgo sube considerablemente es en:

  • Blogs con múltiples autores o colaboradores: cualquiera de ellos puede explotar la vulnerabilidad.
  • Redes WordPress (Multisite): si algún sitio de la red tiene Photo Gallery instalado, y hay usuarios con acceso contributor en esa subinstancia, están expuestos.
  • Sitios con registro de usuarios abierto: si cualquiera puede registrarse y obtener el rol contributor automáticamente, el ataque es prácticamente no autenticado en la práctica.
  • Agencias que gestionan múltiples clientes: un cliente que tiene acceso contributor puede comprometer datos de su propia base, incluyendo información de otros módulos del sistema.

¿Alguien con solo nivel subscriber puede explotar esto? No. El límite inferior es contributor. Eso sí, en sitios donde los roles no están bien gestionados, esa distinción puede ser irrelevante.

Impacto real y qué datos están en riesgo

El vector CVSS marca C:H (impacto alto en confidencialidad). I:N y A:N significan que no pueden modificar ni borrar datos, y no pueden tirar el servidor. Pero sí pueden leer la base de datos entera.

¿Qué hay en esa base? En una instalación WordPress típica:

  • Tabla wp_users: emails y hashes de contraseñas de todos los usuarios.
  • Tabla wp_usermeta: tokens de sesión, datos de perfil.
  • Tablas de plugins: datos de WooCommerce (pedidos, datos de pago tokenizados), credenciales de integraciones, API keys almacenadas en opciones.
  • Tabla wp_options: configuraciones del sitio, claves secretas de WordPress, secret keys para JWT o APIs externas.

Un 6.5 CVSS puede sonar a «medio, no tan grave». El problema es que esa puntuación refleja la dificultad del ataque y su alcance técnico, no el daño de negocio real. Si un atacante extrae los hashes de contraseñas y los rompe offline (o si alguna API key está en texto plano en wp_options), el daño puede escalar mucho más allá de la puntuación original.

Pasos para protegerse ahora

La acción más directa: actualizar Photo Gallery by 10Web a la versión 1.8.41 o superior. Si aún no hay una versión corregida disponible en el repositorio cuando leas esto (dado que el CVE fue publicado el 28 de mayo), revisá el changelog del plugin o los avisos del repositorio oficial antes de actualizar. Para más detalles técnicos, mirá herramientas de escaneo para detectar exploits.

Pero actualizar solo no es suficiente. Hay medidas complementarias que tienen sentido aplicar de todas formas:

  • Revisá quién tiene rol contributor o superior. Si hay usuarios con ese acceso que no deberían tenerlo, bajales el rol a subscriber o eliminá la cuenta.
  • Configurá un WAF a nivel de aplicación. Wordfence tiene reglas para SQL Injection que pueden bloquear intentos de explotación incluso en versiones vulnerables (aunque no es sustituto del parche).
  • Activá el monitoreo de consultas lentas en MySQL/MariaDB. Una inyección time-based va a generar consultas con SLEEP() que deberían aparecer en el slow query log.
  • Hacé backup antes de actualizar. Siempre, pero especialmente en actualizaciones de plugins con muchas instalaciones. WPVivid, si ya lo tenés instalado, lo hace en pocos minutos.
  • Revisá los shortcodes en posts y borradores recientes. Si algún contributor o autor añadió shortcodes de Photo Gallery con parámetros raros, merece una mirada.

Cómo verificar si estás afectado

Tres preguntas rápidas:

  • ¿Tenés instalado el plugin Photo Gallery by 10Web?
  • ¿La versión instalada es 1.8.40 o anterior?
  • ¿Hay usuarios con nivel contributor, author o editor en el sitio?

Si respondiste sí a las tres, estás en zona de riesgo.

Para verificar la versión: en el panel de WordPress, entrá a Plugins > Plugins instalados, buscá «Photo Gallery» y fijate el número de versión que aparece debajo del nombre. También podés ir directamente a wp-content/plugins/photo-gallery/readme.txt via FTP y leer el campo Stable tag.

Si usás Wordfence, el scanner de vulnerabilidades ya debería tener esta en su base (revisá que la firma esté actualizada). WPScan en modo CLI también la detecta si el feed de la base de datos de WPScan fue actualizado.

FactorDetalle
CVE IDCVE-2026-7048
PluginPhoto Gallery by 10Web
Versiones vulnerablesHasta 1.8.40 inclusive
TipoSQL Injection time-based blind
Parámetro vulnerableorder_by
Acceso requeridoContributor o superior
CVSS v3.16.5 (Media)
Impacto confidencialidadAlto (C:H)
Modificación de datosNo (I:N)
DisponibilidadNo afectada (A:N)
Fecha publicación28 de mayo de 2026
CVE-2026-7048 inyección SQL diagrama explicativo

Errores comunes al manejar esta vulnerabilidad

Error 1: Pensar que la puntuación 6.5 implica que puede esperar. El CVSS mide el riesgo técnico del vector de ataque, no el daño potencial al negocio. Con C:H, un atacante con acceso contributor puede extraer hashes de contraseñas de todos los usuarios del sitio. En un sitio con WooCommerce o datos de clientes, eso no es «riesgo medio».

Error 2: Creer que esc_sql() es suficiente para ORDER BY. No es un error del desarrollador promedio, es un error del ecosistema. La documentación de WordPress recomienda esc_sql() sin aclarar sus límites en cláusulas ORDER BY. La protección correcta es whitelist de columnas permitidas o casting a entero. Si mantenés plugins propios con galerías o listados, revisá cómo tratan los parámetros de ordenamiento. Mirá también reproductores de vulnerabilidades para testing seguro.

Error 3: Actualizar el plugin y considerar el incidente cerrado sin auditar quién tiene acceso contributor. Si alguien ya explotó la vulnerabilidad antes de que actualizaras (y no tenés logs para saberlo), el daño ya está hecho. Una revisión post-parche de accesos, contraseñas y API keys expuestas es parte de la remediación, no opcional. Complementá con últimas vulnerabilidades reportadas en WordPress.

Esto se conecta con CVE-2026-7048, donde tenemos un análisis completo del tema.

Si te interesa, podes leer mas sobre CVE-2026-7048.

Preguntas Frecuentes

¿Qué es CVE-2026-7048?

CVE-2026-7048 es una vulnerabilidad de inyección SQL ciega basada en tiempo en el plugin Photo Gallery by 10Web para WordPress, publicada el 28 de mayo de 2026. Tiene puntuación CVSS v3.1 de 6.5 y permite a un atacante autenticado con nivel contributor extraer datos sensibles de la base de datos del sitio.

¿Qué plugin está afectado por CVE-2026-7048?

El plugin afectado es The Photo Gallery by 10Web – Mobile-Friendly Image Gallery, en todas las versiones hasta la 1.8.40 inclusive. Tiene más de 300.000 instalaciones activas en WordPress. La solución es actualizar a la versión 1.8.41 o superior.

¿Tengo riesgo si uso Photo Gallery by 10Web con versión 1.8.40?

Sí, si tu versión es 1.8.40 o anterior y tenés usuarios con nivel contributor, author o editor en el sitio. El riesgo es mayor en sitios multiautor, redes multisite o cualquier instalación con registro de usuarios abierto. Actualizá el plugin de inmediato.

¿Cómo protegerse de la inyección SQL en el parámetro order_by?

La protección definitiva es actualizar el plugin a una versión parcheada. Como medidas complementarias: configurar Wordfence con sus reglas de SQL Injection activas, revisar y restringir quién tiene acceso contributor, activar el slow query log en MySQL para detectar intentos time-based, y hacer backup del sitio antes de aplicar cualquier cambio.

¿Necesito actualizar Photo Gallery by 10Web con urgencia?

Sí, especialmente si tu sitio tiene múltiples usuarios autenticados. La vulnerabilidad puede explotarse embebiendo un shortcode malicioso en un borrador, sin necesidad de publicar contenido. Si no podés actualizar de inmediato, limitá temporalmente el acceso a roles contributor e inferior hasta poder aplicar el parche.

Conclusión

CVE-2026-7048 es un recordatorio de que el parámetro order_by sigue siendo uno de los vectores de inyección SQL más ignorados en el desarrollo de plugins para WordPress. Trustwave lo documentó hace años, y el ecosistema sigue produciendo código vulnerable en el mismo punto.

Con 300.000 instalaciones activas, Photo Gallery by 10Web tiene un radio de exposición real. La puntuación 6.5 es técnicamente «media», pero el impacto en confidencialidad es alto y el requisito de acceso contributor es alcanzable en una gran cantidad de sitios.

Si alojás tu WordPress en un servidor propio o VPS (podés ver opciones locales en donweb.com), asegurate de tener también control sobre los logs del servidor para detectar comportamientos anómalos. La combinación de plugin actualizado, roles bien gestionados y monitoreo activo es lo que cierra el vector de forma real.

Actualizá el plugin. Revisá los roles. Chequeá los logs. En ese orden.

Fuentes

Categorizado en: