Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-76564 — XSS almacenado a través de User-Agent en la Vista de Pedidos del Administrador en PhocaCart | Kitploit
Herramientas/GitHubGitHub/toanln-cov/cve-2026-76564
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebSeguridad WebPapers e Investigación
GitHubtoanln-cov/cve-2026-76564

CVE-2026-76564

XSS almacenado a través de User-Agent en la Vista de Pedidos del Administrador en PhocaCart

Ver Repositorio
hace 3 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

XSS Almacenado a través del User-Agent en la Vista de Pedidos del Administrador en PhocaCart

PhocaCart ≤ 6.1.7 — Un atacante no autenticado almacena un payload XSS a través del checkout. Se ejecuta en el contexto del navegador del administrador

CVE CVSS v4.0 CWE-79 Affected Researcher


RESUMEN

PhocaCart 6.1.7 para Joomla almacena la cabecera HTTP User-Agent sin procesar de las solicitudes de checkout en la tabla de pedidos de la base de datos cuando la opción de configuración store_user_agent está habilitada. El valor almacenado se renderiza posteriormente sin codificación HTML en la vista de edición de pedidos del administrador mediante itemText() en Adminview.php.

Descargar herramienta

Un atacante no autenticado puede realizar un pedido con un User-Agent manipulado que contenga un payload JavaScript. Cuando un administrador abre el pedido en el backend, el payload se ejecuta en el contexto del navegador del administrador, lo que permite el secuestro de sesión, el robo de credenciales o acciones administrativas no autorizadas.

La vulnerabilidad requiere que store_user_agent = 1 (no predeterminado) esté habilitada. Debido a que esta opción es una elección deliberada del administrador para recopilar estadísticas del navegador, las tiendas afectadas son aquellas en las que el propietario ha habilitado la función, lo que hace que la explotación sea totalmente silenciosa desde la perspectiva del atacante.


VERSIONES AFECTADAS

COMPONENTEVULNERABLEPROBADO ENCORREGIDO
PhocaCart (com_phocacart)5.0.0 – 6.1.7Joomla 5.4.7 + PhocaCart 6.1.7 + MariaDB 10.66.1.8

DETALLES DE LA VULNERABILIDAD

Tipo: XSS almacenado (CWE-79) — dirigido al administrador Autenticación requerida: Ninguna para inyectar. Administrador para activar Token CSRF requerido: Sí (se requiere el token CSRF estándar de Joomla para el checkout) Archivo: administrator/components/com_phocacart/libraries/Phoca/Render/Adminview.php:382

Causa raíz

Cuando store_user_agent = 1, el método PhocacartUtils::getUserAgent() devuelve $_SERVER['HTTP_USER_AGENT'] sin ninguna sanitización. Esta cadena sin procesar se almacena en #__phocacart_orders (truncada a 200 caracteres — insuficiente para prevenir XSS). Cuando un administrador visualiza el pedido en el backend, itemText() concatena el valor almacenado directamente en la respuesta HTML sin llamar a htmlspecialchars().

Flujo de datos:

root@kitploit:~
Attacker sends checkout request:
  User-Agent: <script>alert(document.domain)</script>

    utils.php:334   PhocacartUtils::getUserAgent()
    └─ return (string) $_SERVER['HTTP_USER_AGENT']   // raw, no sanitization
        order.php:413  $d['user_agent'] = substr($user_agent, 0, 200)
        └─ INSERT INTO #__phocacart_orders (user_agent) VALUES ('<script>...</script>')

Admin opens order in backend:
    edit.php:84    echo $r->itemText($this->itemcommon->user_agent, ...)
    Adminview.php:382  '<div class="controls >' . $item . '</div>'
                                           // → NO htmlspecialchars()
    → Browser renders: <div><script>alert(document.domain)</script></div>
    → XSS fires in administrator's browser

ORDER.PHP — FASE DE ALMACENAMIENTO (FUENTE VULNERABLE)

administrator/components/com_phocacart/libraries/phocacart/order/order.php:424

root@kitploit:~
$user_agent = PhocacartUtils::getUserAgent(); // reads $_SERVER['HTTP_USER_AGENT'] raw
$d['user_agent'] = substr($user_agent, 0, 200); // stored in DB unfiltered

ADMINVIEW.PHP:382 — FASE DE RENDERIZADO (SUMIDERO VULNERABLE)

root@kitploit:~
// No htmlspecialchars() applied:
$output .= '  <div class="controls ' . $class . '">' . $item . '</div>' . "\n";

Llamado desde administrator/components/com_phocacart/views/phocacartorder/tmpl/edit.php:84:

root@kitploit:~
echo $r->itemText($this->itemcommon->user_agent, Text::_('COM_PHOCACART_USER_AGENT'), '', 'user_agent');

La función itemText() pasa $item (el valor almacenado de user_agent) directamente a la salida HTML sin codificación, convirtiéndolo en el sumidero principal. Corregirlo a nivel del sumidero protege a todos los llamadores de itemText().


PRUEBA DE CONCEPTO

El ataque requiere completar un flujo de checkout completo con una cabecera User-Agent maliciosa. El token CSRF debe obtenerse primero, ya que el controlador de checkout de Joomla lo valida.

0. Requisito previo — Habilitar el almacenamiento de información del User Agent

En el administrador de Joomla, navegue a Components → Phoca Cart → Options → Main tab → Statistics Options. Establezca Store User Agent Information = Yes y guarde.

Requisito previo: Store User Agent Information = Yes

1. Obtener el token CSRF

El atacante visita el frontend de la tienda para extraer un token CSRF válido de Joomla requerido por el controlador de checkout. El token aparece en el código fuente HTML o en la configuración JavaScript de cualquier página de la tienda.

Paso 1: El atacante obtiene el token CSRF del frontend de la tienda mediante Burp Suite

2. Añadir producto al carrito

El atacante añade un producto al carrito a través del endpoint AJAX de checkout utilizando un User-Agent benigno. Esto transiciona la sesión de checkout al siguiente estado.

Paso 2: Añadir producto al carrito — POST checkout.add

3. Guardar la dirección de facturación

El atacante envía la información de facturación para avanzar en la máquina de estados del checkout.

Paso 3: Guardar dirección de facturación — Burp Suite

4. Guardar el método de envío

El atacante selecciona un método de envío para continuar al pago.

Paso 4: Guardar método de envío — Burp Suite

5. Guardar el método de pago

El atacante selecciona un método de pago (p. ej., Contra reembolso).

Paso 5: Guardar método de pago — Burp Suite

6. Inyectar el payload — Realizar el pedido con un User-Agent malicioso

Paso de inyección crítico. El atacante realiza el pedido final mediante task=checkout.order con la cabecera User-Agent establecida al payload XSS. La tarea checkout.order lee el HTTP_USER_AGENT sin procesar y lo almacena sin escapar en #__phocacart_orders.user_agent.

root@kitploit:~
POST /index.php/shop/checkout HTTP/1.1
Host: TARGET
User-Agent: <script>alert(document.domain)</script>
Content-Type: application/x-www-form-urlencoded

phcheckouttac=1&task=checkout.order&option=com_phocacart&return=&<CSRF_TOKEN>=1

Resultado: Pedido creado. La base de datos almacena user_agent = '<script>alert(document.domain)</script>'.

Paso 6: Realización del pedido con User-Agent malicioso — payload inyectado en la base de datos

7. El administrador ve la lista de pedidos

El administrador navega a Components → Phoca Cart → Orders. El pedido inyectado aparece en la lista. XSS aún no se dispara en esta etapa.

Paso 7: Lista de pedidos del administrador en el backend de Joomla — pedido inyectado visible

8. XSS se dispara — El administrador abre el detalle del pedido

Cuando el administrador hace clic en el pedido para abrir la vista de edición, el user_agent almacenado se renderiza sin escapar mediante itemText(). JavaScript se ejecuta inmediatamente.

URL de activación:

root@kitploit:~
/administrator/index.php?option=com_phocacart&view=phocacartorder&layout=edit&id=<ORDER_ID>

Paso 8: El payload XSS se ejecuta en el navegador del administrador — alert(document.domain) confirma el contexto de ejecución


IMPACTO

  1. Secuestro de sesión del administrador — El payload XSS puede exfiltrar la cookie de sesión del administrador, otorgando acceso completo al backend sin credenciales.
  2. Acciones administrativas no autorizadas — Al ejecutarse en el contexto del navegador del administrador, el payload puede realizar cualquier acción del backend: crear cuentas privilegiadas, instalar extensiones maliciosas o modificar contenido.
  3. Puerta trasera persistente — Un payload que instala una web shell o crea una cuenta de administrador falsa persiste más allá del propio evento XSS, otorgando al atacante acceso duradero al servidor.

REFERENCIAS

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-76564
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-76564
  • GitHub Advisory: https://github.com/advisories/GHSA-98mw-pj3j-99v2
  • Repositorio del proveedor: https://github.com/PhocaDesign/PhocaCart