← back
CVE-2025-24893criticalunder attackCWE-95

Remote code execution as guest via SolrSearchMacros request in xwiki

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 9.8epss 100%
from disclosure to weapon5 days
Published on NVDFeb 20
1st PoC+5d
metasploitFeb 20
CISA KEV+252d
exploitation probability
100%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
89 public exploit(s)
Action required by CISAfederal deadline: 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.

Summary

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.

Technical detail

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`).

How it’s exploited

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.

Versions

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

How to protect

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.

How to detect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
Affected products
xwiki · xwiki-platform
public PoCs found89
exploitdbwww.exploit-db.com/exploits/52136unverifiedexploitdbwww.exploit-db.com/exploits/52429unverifiedgithubgithub.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/9b38b7649f7cunverifiedvulncheckvulncheck.com/xdb/64f274f6eb64unverifiedvulncheckvulncheck.com/xdb/2dffa3000fabunverifiedvulncheckvulncheck.com/xdb/dec237ab6767unverifiedvulncheckvulncheck.com/xdb/6d2a0b82c683unverifiedvulncheckvulncheck.com/xdb/bb055c349a1eunverifiedvulncheckvulncheck.com/xdb/5855609e4d40unverifiedvulncheckvulncheck.com/xdb/3e5b42bc93c5unverifiedvulncheckvulncheck.com/xdb/53bca8061977unverifiedvulncheckvulncheck.com/xdb/ccc3579adc13unverifiedvulncheckvulncheck.com/xdb/74202de07260unverifiedvulncheckvulncheck.com/xdb/831618aeeeceunverifiedvulncheckvulncheck.com/xdb/37339d012dc5unverifiedvulncheckvulncheck.com/xdb/1b13eb840965unverifiedvulncheckvulncheck.com/xdb/d7f7ed50e901unverifiedvulncheckvulncheck.com/xdb/e8b041b40fccunverifiedvulncheckvulncheck.com/xdb/444954e3b786unverifiedvulncheckvulncheck.com/xdb/93f5e4efb877unverifiedvulncheckvulncheck.com/xdb/596098d5a2f9unverifiedvulncheckvulncheck.com/xdb/65f834835fd6unverifiedvulncheckvulncheck.com/xdb/05bdc5c383fbunverifiedvulncheckvulncheck.com/xdb/fbf9dfffc712unverifiedvulncheckvulncheck.com/xdb/d68432820abeunverifiedvulncheckvulncheck.com/xdb/06c9fbe27cd0unverifiedvulncheckvulncheck.com/xdb/bb78fdf33a59unverifiedvulncheckvulncheck.com/xdb/c57ce2c0f88dunverifiedvulncheckvulncheck.com/xdb/e806dec4d316unverifiedvulncheckvulncheck.com/xdb/fbb9d786622bunverifiedvulncheckvulncheck.com/xdb/b046aa232c71unverifiedvulncheckvulncheck.com/xdb/789a8c6825b2unverifiedvulncheckvulncheck.com/xdb/71fda264aebcunverifiedvulncheckvulncheck.com/xdb/89494e523180unverifiedvulncheckvulncheck.com/xdb/2391f1ba6766unverifiedvulncheckvulncheck.com/xdb/1538898e5c9dunverifiedvulncheckvulncheck.com/xdb/e0d8e8479af7unverifiedvulncheckvulncheck.com/xdb/d1b7aef06a77unverifiedvulncheckvulncheck.com/xdb/86a950545a1aunverifiedvulncheckvulncheck.com/xdb/ed7f1245d21bunverifiedvulncheckvulncheck.com/xdb/8682205ce5c3unverifiedvulncheckvulncheck.com/xdb/6b471e7ef67funverifiedvulncheckvulncheck.com/xdb/286c3bfb8170unverifiedvulncheckvulncheck.com/xdb/080d40055775unverifiedvulncheckvulncheck.com/xdb/6ab6a9ee7d8funverifiedvulncheckvulncheck.com/xdb/a7c585dc65b2unverifiedvulncheckvulncheck.com/xdb/d106a5e812c8unverifiedvulncheckvulncheck.com/xdb/33abb14390c6unverifiedvulncheckvulncheck.com/xdb/3f52024d7a6dunverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.