← back
CVE-2020-12641criticalunder attackCWE-78

CVE-2020-12641

100Vexday Risk Score

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

ssvc Actcvss 9.8epss 84%
from disclosure to weapon1435 days
Published on NVDMay 4
1st PoC+1435d
CISA KEV+1144d
exploitation probability
84%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
2 public exploit(s)
Action required by CISAfederal deadline: 2023-07-13

Apply updates per vendor instructions.

Summary

Falha de command injection (CWE-78) em rcube_image.php do Roundcube Webmail, herdada por qualquer versão anterior à 1.4.4 (e correspondentes 1.3.11/1.2.10). O código concatenava o valor das opções de configuração im_convert_path e im_identify_path diretamente num comando de shell sem escapar caracteres especiais, permitindo execução arbitrária de comandos no servidor. O CVSS 9.8 sugere um ataque remoto trivial e sem autenticação, mas a exploração real depende de o instalador do Roundcube (installer/index.php) estar acessível publicamente e com o arquivo de configuração gravável — algo que o próprio fornecedor classifica como cenário de risco raro em produção, embora ainda assim documentado e explorado na prática (está no KEV da CISA).

Technical detail

O problema está nos métodos resize(), convert() e identify() de program/lib/Roundcube/rcube_image.php. Esses métodos montam uma string de comando concatenando o caminho configurado do ImageMagick (im_convert_path ou im_identify_path) com argumentos fixos (flags de qualidade, resize, formato) e depois passam essa string para rcube::exec(), que executa via shell. Os placeholders de argumento ({in}, {out}, {size} etc.) já eram devidamente escapados, mas o próprio valor de $convert/$cmd — origem da configuração — não passava por nenhuma sanitização antes de entrar na string de comando.

Se im_convert_path ou im_identify_path contiver metacaracteres de shell (ponto e vírgula, pipe, backticks, `$()`, `&&` etc.), o que vem depois do metacaractere é interpretado como um comando adicional pelo shell, e não como argumento do binário do ImageMagick. Isso é injeção de comando clássica: o atacante controla integralmente o valor dessas duas chaves de configuração.

A correção (commit fcfb099) envolve chamar escapeshellcmd() sobre o valor de $convert/$cmd antes de concatenar, nos três pontos onde isso ocorria (resize, convert, identify). Não há sanitização de entrada anterior a essa mudança — a superfície inteira do bug é a ausência desse escape.

O gatilho de execução é automático: o Roundcube chama identify()/convert()/resize() sempre que precisa processar uma imagem anexada ou embutida num e-mail (por exemplo, converter um formato não padrão como TIFF para JPEG para exibição). Basta a vítima abrir/visualizar o e-mail malicioso — não é preciso clicar em nada além disso.

How it’s exploited

O vetor documentado publicamente (DrunkenShells) funciona em duas etapas. Primeiro, o atacante envia uma requisição POST para installer/index.php contendo o payload de injeção no campo _im_convert_path (por exemplo, um comando para abrir uma reverse shell em PHP), fazendo o instalador escrever essa configuração maliciosa no arquivo de configuração do Roundcube. Segundo, o atacante envia à vítima um e-mail com uma imagem em formato não padrão (ex.: TIFF); quando qualquer usuário abre esse e-mail no webmail, o Roundcube tenta converter a imagem chamando o 'ImageMagick' configurado, executando o comando injetado e devolvendo shell reversa ao atacante.

A pré-condição crítica que a manchete de CVSS 9.8 esconde é a etapa um: o script installer/ precisa estar acessível pela rede e o config.inc.php precisa ser gravável pelo processo web — situação que o Roundcube já orienta a eliminar (remover ou bloquear o diretório installer/ após a configuração inicial) exatamente por ser um vetor de comprometimento total. Em instalações onde isso foi feito corretamente, a falha não é explorável remotamente por um atacante não autenticado; ela só se torna crítica em instalações negligenciadas, PaaS/hosting compartilhado com instalador exposto, ou onde um administrador malicioso/comprometido já tem acesso a essas configurações.

Há exploração confirmada em ambiente real (entrada no catálogo KEV da CISA), PoC pública e template Nuclei, o que eleva o EPSS (~0,84) mesmo considerando a pré-condição. Uma vez atingido o RCE, o impacto é total: comprometimento do processo do webmail, acesso a e-mails de todos os usuários, pivotagem lateral a partir do servidor de mail.

Versions

Affected
Roundcube Webmail anterior a 1.4.4 na série 1.4.x; segundo o writeup de terceiros, também afeta as séries 1.3.x anteriores a 1.3.11 e 1.2.x anteriores a 1.2.10.
Fixed in
1.4.4 (branch 1.4.x); 1.3.11 (branch 1.3.x); 1.2.10 (branch 1.2.x). Um bypass posterior foi corrigido em 1.4.5/1.3.12 (tratado como falha relacionada, não coberta diretamente por este CVE).

How to protect

Atualizar para Roundcube Webmail 1.4.4 ou posterior. Os ramos mais antigos foram corrigidos em versões correspondentes — a documentação do fornecedor e o writeup de terceiros citam 1.3.11 e 1.2.10 como os releases de correção para as respectivas séries 1.3.x e 1.2.x. Se não for possível atualizar imediatamente, o controle compensatório real é garantir que o diretório installer/ esteja removido do servidor de produção ou bloqueado por controle de acesso (é a orientação padrão do próprio projeto após qualquer instalação/upgrade) e que o arquivo config.inc.php não seja gravável pelo processo do servidor web depois da configuração inicial — isso fecha o único caminho prático de injetar valores maliciosos em im_convert_path/im_identify_path.

Após a correção original (1.4.4/1.3.11/1.2.10), foi descoberto um bypass (via injeção de flags em executáveis arbitrários e chamada de executáveis remotos em ambientes Windows) corrigido em versões posteriores (1.4.5/1.3.12) — quem aplicou apenas o patch de CVE-2020-12641 sem seguir para essas versões ainda pode estar exposto a essa variante, tratada sob outro identificador.

Não funciona como mitigação apenas restringir quem pode enviar e-mails à organização, já que o vetor de disparo (imagem não padrão em e-mail) é passivo e não depende de autenticação do remetente; o controle efetivo está em nunca permitir que im_convert_path/im_identify_path sejam alteráveis por terceiros e em manter o instalador fora de alcance.

How to detect

Nos logs do servidor web, procurar requisições POST para /installer/index.php contendo os parâmetros _im_convert_path ou _im_identify_path com metacaracteres de shell (;, |, `, $(), &&, quebras de linha) ou comandos incomuns (fsockopen, exec, bash, powershell, curl, wget). Revisar o config.inc.php de instâncias em produção para valores de im_convert_path/im_identify_path que não sejam simplesmente o caminho de binário do ImageMagick — qualquer coisa com espaço seguido de outro comando é suspeita.

No nível de host, monitorar processos filhos anômalos originados pelo processo PHP/webmail no momento em que mensagens com anexos de imagem são abertas ou processadas (thumbnails), especialmente conexões de rede saindo do servidor de mail sem relação com tráfego IMAP/SMTP esperado. Não há uma assinatura de rede única confiável para o payload em si, já que o comando injetado é arbitrário — o sinal mais forte é a presença do instalador acessível publicamente, que por si só já indica risco independente de tentativa de exploração observada.

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.
rcube_image.php in Roundcube Webmail before 1.4.4 allows attackers to execute arbitrary code via shell metacharacters in a configuration setting for im_convert_path or im_identify_path.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.