← voltar
CVE-2025-24893criticalsob ataqueCWE-95

Remote code execution as guest via SolrSearchMacros request in xwiki

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 9.8epss 100%
da publicação à arma5 dias
Publicada no NVD20 de fev.
1ª PoC+5d
metasploit20 de fev.
CISA KEV+252d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
89 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2025-11-20

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumo

Qualquer visitante não autenticado de uma instância XWiki pode executar código arbitrário (Groovy/Java) no servidor através de uma requisição GET ao endpoint SolrSearch, sem necessidade de login, permissões ou interação do usuário. É uma das falhas mais graves já registradas na plataforma: CVSS 9.8, confirmada em exploração ativa (KEV da CISA) e com módulo Metasploit e template Nuclei disponíveis, ou seja, trivialmente automatizável em varreduras de internet.

Detalhamento técnico

A causa raiz é uma injeção de eval (CWE-95) no macro wiki `Main.SolrSearchMacros`, que compõe o feed RSS retornado pelo endpoint de busca Solr. O parâmetro `text` da query string — o termo de busca digitado pelo usuário — é inserido no conteúdo do feed e depois passado pelo motor de renderização de wiki (Velocity/XWiki Rendering) sem neutralizar a sintaxe de macros do XWiki (`{{...}}`). Como o valor do parâmetro é atacante-controlado, é possível fechar prematuramente o contexto de macro em que o texto normalmente estaria contido (usando sequências como `}}}`) e abrir um novo bloco de macro arbitrário.

O payload de prova de conceito usa exatamente isso: fecha o contexto existente e injeta `{{async async=false}}{{groovy}}...{{/groovy}}{{/async}}`. O macro `groovy` normalmente exige direitos de programação (programming rights) para ser executado — só administradores ou conteúdo assinado por eles teriam essa permissão. O uso do macro `async` nesse contexto específico é o que permite contornar essa verificação de privilégio, fazendo o Groovy executar com os direitos elevados do contexto de renderização em vez dos direitos (nulos) do visitante anônimo que fez a requisição.

O ponto exato do bug está na linha 955 de `SolrSearchMacros.xml`, onde o conteúdo do feed RSS era simplesmente impresso na resposta HTTP (`$response.writer.print(...)`) em vez de ser serializado de forma segura como XML puro. A correção introduzida no commit `67021db9b8ed26c2236a653269302a86bf01ef40` (issue XWIKI-22149) criou um macro Velocity genérico `#rawResponse` que define corretamente o `Content-Type` como `application/xml` e evita que o conteúdo passe novamente pelo pipeline de transformação de rendering — o mesmo padrão de correção foi aplicado a outros pontos do código que tinham a mesma lógica insegura (ex.: `NotificationRSSService.xml`, `HTMLConverter.xml`).

Como é explorada

O vetor é uma única requisição HTTP GET, sem autenticação, ao caminho `/xwiki/bin/get/Main/SolrSearch` com os parâmetros `media=rss` e `text=`. Não há pré-condição de conta, configuração não padrão ou controle de campo além de o módulo de busca Solr (`xwiki-platform-search-solr-ui`) estar presente e a action `get` do endpoint estar acessível — ambos padrão em instalações XWiki dentro da faixa de versões afetadas. Isso torna a exploração de baixíssima complexidade: um scanner automatizado consegue identificar e confirmar a vulnerabilidade com uma checagem simples (o PoC oficial faz uma soma `23+19` e verifica se o título do RSS retorna `42`).

Uma vez confirmada a execução, o atacante controla a string entre `{{groovy}}...{{/groovy}}`, ou seja, Groovy arbitrário executado no contexto do servidor de aplicação Java que hospeda o XWiki — isso equivale a execução remota de código completa, com acesso ao sistema de arquivos, variáveis de ambiente, e a capacidade de ler/escrever qualquer dado dentro da wiki (documentos, configurações, credenciais armazenadas) ou pivotear para a rede interna.

A presença no catálogo KEV da CISA confirma exploração ativa observada em campo, não apenas teórica. A combinação de PoC público, módulo Metasploit e template Nuclei praticamente garante que instâncias expostas à internet e não corrigidas estão sendo varridas e exploradas em massa.

Versões

Afetadas
>= 5.3-milestone-2, = 16.0.0-rc-1, < 16.4.1 (pacote org.xwiki.platform:xwiki-platform-search-solr-ui)
Corrigidas em
15.10.11, 16.4.1 e 16.5.0-RC1 (e versões posteriores)

Como se proteger

A correção definitiva é atualizar para XWiki 15.10.11 (ramo 15.x), 16.4.1 (ramo 16.x) ou 16.5.0-RC1 (ou posterior). Não há forma de aplicar apenas um patch pontual sem atualizar o pacote `org.xwiki.platform:xwiki-platform-search-solr-ui` — a correção envolve múltiplos arquivos (o macro `SolrSearchMacros.xml` e o novo macro genérico `#rawResponse` em `macros.vm`).

Para quem não pode atualizar imediatamente, o fornecedor publica um workaround: editar manualmente o documento wiki `Main.SolrSearchMacros`, na linha equivalente à 955, substituindo a saída direta do conteúdo do feed pelo uso do macro `rawResponse` (definido em `macros.vm`, linha ~2824) com content type `application/xml`. Isso impede que o texto da busca seja reinterpretado como sintaxe de macro wiki. É um paliativo real, mas exige editar conteúdo de sistema manualmente e ficar atento a não perder a alteração em upgrades futuros — não substitui a atualização.

Não adianta apenas restringir direitos de programação de usuários anônimos por outras vias, pois o bug explora precisamente uma falha na aplicação desses direitos dentro do fluxo `async`/`groovy` — a superfície vulnerável está no próprio template de renderização do feed, não em uma configuração de permissão que possa ser ajustada por um administrador comum.

Como detectar

Em logs de acesso HTTP, procurar por requisições GET a `/xwiki/bin/get/Main/SolrSearch` com o parâmetro `media=rss` combinado com um parâmetro `text` contendo sequências de fechamento/abertura de macro wiki codificadas em URL, como `%7D%7D%7D` (`}}}`), `%7B%7Basync` (`{{async`), `%7B%7Bgroovy%7D%7D` (`{{groovy}}`) ou variantes com outros macros perigosos (`{{script}}`, `{{velocity}}`). A presença de qualquer uma dessas sequências no parâmetro de busca é um indicador forte de tentativa de exploração, já que não corresponde a um termo de busca legítimo.

Como o ataque é uma requisição GET isolada e stateless, não há assinatura de tráfego adicional além do payload em si — não existe handshake ou sequência de múltiplas requisições que sirva de sinal complementar confiável. Em ambientes já comprometidos, vale correlacionar com processos filhos anômalos gerados pelo processo Java do servidor de aplicação (Tomcat/Jetty) e alterações inesperadas em documentos wiki ou arquivos de configuração como sinal de pós-exploração.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
XWiki Platform is a generic wiki platform offering runtime services for applications built on top of it. Any guest can perform arbitrary remote code execution through a request to `SolrSearch`. This impacts the confidentiality, integrity and availability of the whole XWiki installation. To reproduce on an instance, without being logged in, go to `<host>/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7D%7B%7Basync%20async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28"Hello%20from"%20%2B%20"%20search%20text%3A"%20%2B%20%2823%20%2B%2019%29%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D%20`. If there is an output, and the title of the RSS feed contains `Hello from search text:42`, then the instance is vulnerable. This vulnerability has been patched in XWiki 15.10.11, 16.4.1 and 16.5.0RC1. Users are advised to upgrade. Users unable to upgrade may edit `Main.SolrSearchMacros` in `SolrSearchMacros.xml` on line 955 to match the `rawResponse` macro in `macros.vm#L2824` with a content type of `application/xml`, instead of simply outputting the content of the feed.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
xwiki · xwiki-platform
PoCs públicas encontradas89
exploitdbwww.exploit-db.com/exploits/52136não verificadoexploitdbwww.exploit-db.com/exploits/52429não verificadogithubgithub.com/gunzf0x/CVE-2025-2489322githubgithub.com/dollarboysushil/CVE-2025-24893-XWiki-Unauthenticated-RCE-Exploit-POC17githubgithub.com/b0ySie7e/CVE-2025-2489311githubgithub.com/iSee857/CVE-2025-24893-PoC10githubgithub.com/Hex00-0x4/CVE-2025-24893-XWiki-RCE6githubgithub.com/Infinit3i/CVE-2025-248936githubgithub.com/hackersonsteroids/cve-2025-248935githubgithub.com/AliElKhatteb/CVE-2024-32019-POC5githubgithub.com/D3Ext/CVE-2025-248934githubgithub.com/570RMBR3AK3R/xwiki-cve-2025-24893-poc3githubgithub.com/Artemir7/CVE-2025-24893-EXP2githubgithub.com/BreakingRohit/CVE-2025-24893-PoC2githubgithub.com/Th3Gl0w/CVE-2025-24893-POC1githubgithub.com/x0da6h/POC-for-CVE-2025-248931githubgithub.com/nohack1212/CVE-2025-24893-1githubgithub.com/IIIeJlyXaKapToIIIKu/CVE-2025-24893-XWiki-unauthenticated-RCE-via-SolrSearch1githubgithub.com/torjan0/xwiki_solrsearch-rce-exploit1githubgithub.com/80Ottanta80/CVE-2025-24893-PoC1githubgithub.com/vasilysaint/CVE-2025-248931githubgithub.com/TomKingori/xwiki-cve-2025-24893-exploit0githubgithub.com/zs1n/CVE-2025-248930githubgithub.com/investigato/cve-2025-24893-poc0githubgithub.com/mah4nzfr/CVE-2025-248930githubgithub.com/The-Red-Serpent/CVE-2025-248930githubgithub.com/alaxar/CVE-2025-248930githubgithub.com/Retro023/CVE-2025-24893-POC0githubgithub.com/CMassa/CVE-2025-248930githubgithub.com/ibadovulfat/CVE-2025-248930githubgithub.com/andwati/CVE-2025-248930githubgithub.com/Bishben/xwiki-15.10.8-reverse-shell-cve-2025-248930githubgithub.com/kimtangker/CVE-2025-248930githubgithub.com/0xDTC/XWiki-Platform-RCE-CVE-2025-248930githubgithub.com/o0wo0o/CVE-2025-24893_Shell0githubgithub.com/gmh5225/CVE-2025-24893-RCE-PoC0githubgithub.com/rippsec/CVE-2025-24893-XWiki-SSTI-RCE0githubgithub.com/hasecto/CVE-2025-248930githubgithub.com/Fomovet/cve-2025-248930githubgithub.com/endusdksla/xwiki-cve-2025-248930githubgithub.com/dhiaZnaidi/CVE-2025-24893-PoC0githubgithub.com/AzureADTrent/CVE-2025-24893-Reverse-Shell0vulncheckvulncheck.com/xdb/9b38b7649f7cnão verificadovulncheckvulncheck.com/xdb/64f274f6eb64não verificadovulncheckvulncheck.com/xdb/2dffa3000fabnão verificadovulncheckvulncheck.com/xdb/dec237ab6767não verificadovulncheckvulncheck.com/xdb/6d2a0b82c683não verificadovulncheckvulncheck.com/xdb/bb055c349a1enão verificadovulncheckvulncheck.com/xdb/5855609e4d40não verificadovulncheckvulncheck.com/xdb/3e5b42bc93c5não verificadovulncheckvulncheck.com/xdb/53bca8061977não verificadovulncheckvulncheck.com/xdb/ccc3579adc13não verificadovulncheckvulncheck.com/xdb/74202de07260não verificadovulncheckvulncheck.com/xdb/831618aeeecenão verificadovulncheckvulncheck.com/xdb/37339d012dc5não verificadovulncheckvulncheck.com/xdb/1b13eb840965não verificadovulncheckvulncheck.com/xdb/d7f7ed50e901não verificadovulncheckvulncheck.com/xdb/e8b041b40fccnão verificadovulncheckvulncheck.com/xdb/444954e3b786não verificadovulncheckvulncheck.com/xdb/93f5e4efb877não verificadovulncheckvulncheck.com/xdb/596098d5a2f9não verificadovulncheckvulncheck.com/xdb/65f834835fd6não verificadovulncheckvulncheck.com/xdb/05bdc5c383fbnão verificadovulncheckvulncheck.com/xdb/fbf9dfffc712não verificadovulncheckvulncheck.com/xdb/d68432820abenão verificadovulncheckvulncheck.com/xdb/06c9fbe27cd0não verificadovulncheckvulncheck.com/xdb/bb78fdf33a59não verificadovulncheckvulncheck.com/xdb/c57ce2c0f88dnão verificadovulncheckvulncheck.com/xdb/e806dec4d316não verificadovulncheckvulncheck.com/xdb/fbb9d786622bnão verificadovulncheckvulncheck.com/xdb/b046aa232c71não verificadovulncheckvulncheck.com/xdb/789a8c6825b2não verificadovulncheckvulncheck.com/xdb/71fda264aebcnão verificadovulncheckvulncheck.com/xdb/89494e523180não verificadovulncheckvulncheck.com/xdb/2391f1ba6766não verificadovulncheckvulncheck.com/xdb/1538898e5c9dnão verificadovulncheckvulncheck.com/xdb/e0d8e8479af7não verificadovulncheckvulncheck.com/xdb/d1b7aef06a77não verificadovulncheckvulncheck.com/xdb/86a950545a1anão verificadovulncheckvulncheck.com/xdb/ed7f1245d21bnão verificadovulncheckvulncheck.com/xdb/8682205ce5c3não verificadovulncheckvulncheck.com/xdb/6b471e7ef67fnão verificadovulncheckvulncheck.com/xdb/286c3bfb8170não verificadovulncheckvulncheck.com/xdb/080d40055775não verificadovulncheckvulncheck.com/xdb/6ab6a9ee7d8fnão verificadovulncheckvulncheck.com/xdb/a7c585dc65b2não verificadovulncheckvulncheck.com/xdb/d106a5e812c8não verificadovulncheckvulncheck.com/xdb/33abb14390c6não verificadovulncheckvulncheck.com/xdb/3f52024d7a6dnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.