Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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-28496 — Laboratorio Docker que reproduce la cadena de RCE pre-auth de FOSSBilling (CVE-2026-27604 bypass de autenticación + CVE-2026-28496 Twig SSTI) con un PoC en Python y un objetivo de comparación parcheado. | Kitploit
Herramientas/GitHubGitHub/ivanesk315/cve-2026-28496
Escáneres de VulnerabilidadesAnálisis de VulnerabilidadesExplotaciónSeguridad ServerlessExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubivanesk315/cve-2026-28496

CVE-2026-28496

Laboratorio Docker que reproduce la cadena de RCE pre-auth de FOSSBilling (CVE-2026-27604 bypass de autenticación + CVE-2026-28496 Twig SSTI) con un PoC en Python y un objetivo de comparación parcheado.

17hace 20 díasAún no revisado
Ver Repositorio

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

CVE-2026-27604 + CVE-2026-28496 — Cadena de RCE Pre-Auth en FOSSBilling

Resumen Ejecutivo

Este repositorio contiene un laboratorio Docker local para reproducir y validar la cadena de RCE Pre-Auth en FOSSBilling, compuesta por dos vulnerabilidades encadenadas:

CVETipoCVSS v4GHSADescripción
CVE-2026-27604Omisión de Autenticación10.0GHSA-78x5-c8gw-8279Falta un throw en el verificador de roles de la API que expone endpoints de administración a llamadores no autenticados
CVE-2026-28496SSTI9.4GHSA-57mv-jm88-66jcRenderizado de plantillas Twig sin sandbox a través de la API string_render

FOSSBilling es una plataforma de facturación y gestión de clientes gratuita y de código abierto. Las versiones 0.5.4 a 0.7.2 están afectadas. FOSSBilling 0.8.0 corrige ambas vulnerabilidades.

Este laboratorio compara dos versiones de FOSSBilling:

ServicioVersión de FOSSBillingPropósitoURL
vuln0.7.2Objetivo vulnerablehttp://localhost:8081
patched0.8.0Objetivo parcheadohttp://localhost:8082

La cadena validada en este laboratorio local es:```text Unauthenticated HTTP POST → /api/system/system/string_render → Role "system" resolves to cron admin identity (CVE-2026-27604) → _tpl={{ 7*7 }} passed into unsandboxed Twig rendering (CVE-2026-28496) → Server evaluates the template expression → Returns {"result":"49","error":null}

El objetivo parcheado (0.8.0) devuelve:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

El laboratorio está intencionalmente limitado a servicios Docker locales. No ataca sistemas externos y no incluye web shells, malware, persistencia, callbacks externos, volcado de bases de datos ni payloads destructivos.

La Cadena

El RCE Pre-Auth requiere que ambas vulnerabilidades trabajen en conjunto:```text ┌──────────────────────────────────────────────────────────────┐ │ STEP 1: Auth Bypass (CVE-2026-27604) │ │ │ │ URL path: /api/system/system/string_render │ │ Role "system" → cron admin identity │ │ Exception instantiated but never thrown │ │ → Unauthenticated caller gets admin API access │ ├──────────────────────────────────────────────────────────────┤ │ STEP 2: SSTI (CVE-2026-28496) │ │ │ │ Admin API method: System\Api\Admin::string_render() │ │ _tpl parameter → Twig createTemplate() → render() │ │ No sandbox enforcement │ │ → Server-side template evaluation │ ├──────────────────────────────────────────────────────────────┤ │ COMBINED: Pre-Auth RCE │ │ │ │ One unauthenticated HTTP POST │ │ → Admin access (auth bypass) │ │ → Template injection (SSTI) │ │ → getDi() exposes Pimple DI container │ │ → PDO, cache, extension manager, 40+ services reachable │ │ → Remote Code Execution │ └──────────────────────────────────────────────────────────────┘

Este laboratorio demuestra la cadena utilizando la prueba aritmética segura `{{ 7*7 }}`. La ruta completa de RCE a través de `getDi()` no se demuestra.

## Hechos verificados

| Afirmación | Evidencia | Cómo verificar |
| ----- | -------- | ------------- |
| CVE-2026-27604 es un bypass de autenticación en el manejo de roles de la API de FOSSBilling. | GHSA-78x5-c8gw-8279: la falta de throw en el verificador de roles permite que /api/system/ se resuelva como admin. | Ejecute el PoC: la ruta de invitado es denegada, la ruta de sistema devuelve el resultado de admin. |
| CVE-2026-28496 es un SSTI en el renderizado Twig de FOSSBilling. | GHSA-57mv-jm88-66jc: string_render pasa _tpl a Twig createTemplate() sin sandbox. | Ejecute el PoC: el servidor evalúa {{ 7*7 }} y devuelve 49. |
| Ambas vulnerabilidades afectan a FOSSBilling 0.5.4 hasta 0.7.2. | Los avisos públicos identifican el rango de versiones afectadas. | Compare los objetivos vulnerable (0.7.2) y parcheado (0.8.0). |
| FOSSBilling 0.8.0 parchea ambas vulnerabilidades. | El objetivo parcheado devuelve "Unknown API call" para el endpoint probado. | Ejecute el PoC contra el puerto 8082. |
| El bypass de autenticación otorga acceso de admin no autenticado. | /api/guest/ deniega string_render; /api/system/ devuelve el resultado sin autenticación. | Ejecute la Etapa 1 del PoC. |
| El SSTI evalúa plantillas controladas por el atacante. | {{ 7*7 }} devuelve 49 a través de la ruta vulnerable. | Ejecute la Etapa 2 del PoC. |
| La cadena permite RCE Pre-Auth. | Bypass de autenticación + SSTI = inyección de plantilla no autenticada con contexto de admin. | Ejecute el PoC de la cadena completa. |
| El PoC es solo HTTP. | poc.py envía únicamente solicitudes HTTP POST. | Inspeccione poc/poc.py. |

## Análisis de causa raíz

### CVE-2026-27604: Bypass de autenticación

La API de FOSSBilling resuelve los roles a partir de la ruta de la URL:```text
/api/:role/:module/:method

El verificador de roles valida si el rol solicitado está permitido. Sin embargo, en las versiones vulnerables, la excepción para roles no permitidos es instanciada pero nunca lanzada:```php // Simplified vulnerable pattern if (!in_array($role, $allowed_roles)) { new \Exception("Role not allowed"); // BUG: missing "throw" }

Debido a que la excepción nunca se lanza, la validación pasa silenciosamente. El rol `system` se resuelve a la identidad de administrador de cron, otorgando acceso completo a la API de administración a cualquier llamador no autenticado.

El impacto de seguridad:```text
/api/guest/system/string_render  → denied (guest role, no admin access)
/api/admin/system/string_render  → requires authentication
/api/system/system/string_render → admin access WITHOUT authentication (bypass)

El rol system se asigna a la identidad de administrador de cron interna, que tiene privilegios administrativos completos.

CVE-2026-28496: SSTI

El método de la API de administración string_render recibe _tpl de los datos de la solicitud y lo pasa al pipeline de renderizado de plantillas Twig sin aplicar el sandbox:```php public function string_render($data) { if (!isset($data['_tpl'])) { error_log('_tpl parameter not passed'); return ''; }

$tpl = $data['_tpl'];
$try_render = $data['_try'] ?? false;

$vars = $data;
unset($vars['_tpl'], $vars['_try']);

return $this->getService()->renderString($tpl, $try_render, $vars);

}

El método `renderString()` recurre a `createTemplateFromString()`:```php
public function createTemplateFromString($tpl, $try_render, $vars)
{
    try {
        $twig = $this->di['twig'];
        $template = $twig->createTemplate($tpl);
        $parsed = $template->render($vars);
    } catch (\Exception $e) {
        $parsed = $tpl;

        if (!$try_render) {
            throw $e;
        }
    }

    return $parsed;
}

El problema crítico: createTemplate($tpl) crea una plantilla Twig a partir de la cadena controlada por el atacante y la renderiza sin restricciones de sandbox. La plantilla tiene acceso a los objetos en el contexto de la plantilla, incluido el manejador de la API de invitado que expone getDi().

Cadena combinada```text

Input: POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}

Descargar herramienta