flawopen.com/Incidents/moveit-transfer-sql-injection-may-2023
MOVEit Transfer: SQL injection e roubo de dados em massa
A CVE-2023-34362 era uma SQL injection sem autenticação no MOVEit Transfer. A Mandiant observou exploração desde 27 de maio de 2023, seguida pelo web shell LEMURLOOT e pelo roubo de dados.[4], [3]
Imagine um formulário com um campo “número da pasta”, mas o atendente copia esse campo diretamente para uma instrução enviada ao sistema de arquivos. Se o campo puder alterar a instrução em vez de apenas indicar uma pasta, quem preenche o formulário poderá fazer o sistema ir além do previsto. A SQL injection cruza essa mesma fronteira: uma entrada não confiável é tratada como sintaxe SQL, e não como um valor.[5]
Conceitos Centrais e Termos
Injeção de SQL (CWE-89)- Uma entrada concatenada numa consulta ao banco de dados muda o que a consulta faz, em vez de ser tratada como um valor.[5]
Transferência gerenciada de arquivos (MFT)- Software que as organizações usam para trocar arquivos grandes ou sensíveis com parceiros. Um único servidor pode guardar dados de muitas organizações.[3]
Web shell- Um script que o atacante planta num servidor web para manter o acesso. A Mandiant chamou o usado aqui de LEMURLOOT.[3]
Consulta parametrizada- Uma consulta cujos valores são enviados separados do texto, de modo que o banco nunca interpreta dados como SQL.[5]
Versões afetadas e corrigidas- A Progress lista como afetadas, em seus respectivos ramos, as versões anteriores a 2021.0.6, 2021.1.4, 2022.0.4, 2022.1.5 e 2023.0.1; essas versões listadas incluem a correção. Confirme seu ramo e o caminho de atualização atual no aviso da Progress.[1]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-89
- CISA KEV — adicionado em 2023-06-02 — CVE-2023-34362
Linha do Tempo do Incidente
A Mandiant registra em 27 de maio de 2023 a evidência mais antiga de exploração do MOVEit Transfer que observou.[3]
A Progress divulga a vulnerabilidade e pede aos clientes que cortem o tráfego HTTP e HTTPS até aplicar o patch.[1]
A CISA inclui a CVE-2023-34362 no catálogo Known Exploited Vulnerabilities.[9]
Fluxo de Ataque Passo a Paso
Uma requisição sem autenticação
A Mandiant observou requisições POST manipuladas para guestaccess.aspx do MOVEit Transfer antes do surgimento do LEMURLOOT; a atividade não exigia um login normal de usuário.[3]
Um web shell é instalado
Após a exploração, a Mandiant observou o web shell LEMURLOOT. Ele podia enumerar e obter arquivos e manipular um usuário específico da aplicação; as fontes não comprovam controle administrativo genérico.[3]
Código-Fonte: Vulnerável vs. Seguro
C# ilustrativo, não é código-fonte do MOVEit. O método reforçado converte o identificador para o tipo que a coluna realmente guarda e rejeita qualquer outra coisa; depois o envia como parâmetro tipado, para que o valor nunca faça parte do texto SQL. Qualquer um dos controles sozinho impede esta injeção; juntos, também rejeitam identificadores malformados antes da consulta.[5]
using System.Data.SqlClient;
public static class FolderLookup
{
public static SqlDataReader Find(SqlConnection conn, string folderId)
{
// O texto da consulta e os dados da requisição são concatenados, então o banco de dados
// não consegue distinguir qual parte o desenvolvedor pretendia tratar como dado.
string sql = "SELECT id, name FROM folders WHERE id = '" + folderId + "'";
var cmd = new SqlCommand(sql, conn);
return cmd.ExecuteReader();
}
}using System;
using System.Data;
using System.Data.SqlClient;
public static class FolderLookup
{
public static SqlDataReader Find(SqlConnection conn, string folderId)
{
if (!long.TryParse(folderId, out long id) || id <= 0)
throw new ArgumentException("folderId must be a positive integer");
// O valor é enviado como parâmetro tipado, separado do texto da consulta.
var cmd = new SqlCommand("SELECT id, name FROM folders WHERE id = @id", conn);
cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
return cmd.ExecuteReader();
}
}Lista de Verificação de Segurança para Engenharia
- ✓Parametrize cada valor SQL e faça o CI falhar quando houver concatenação de entrada não confiável em APIs de comandos SQL; o MITRE
CWE-89identifica consultas parametrizadas como uma forma de prevenção.[5] - ✓Orientação FlawOpen: ao encontrar uma falha de injeção, procure o mesmo limite inseguro entre dados e SQL em todos os caminhos que montam consultas. Trate CVEs posteriores como falhas separadas, a menos que os avisos comprovem uma causa-raiz comum.
- ✓Aplique a orientação de patch do fornecedor Progress a todas as instâncias implantadas do MOVEit Transfer; inventarie-as e registre a versão corrigida antes de restaurar a exposição normal.[1]
- ✓Após suspeita de exploração, investigue o host antes de recolocá-lo em serviço: procure o LEMURLOOT e contas afetadas; depois troque credenciais ou segredos que possam ter sido expostos.[3]
- ✓Orientação FlawOpen: pergunte aos provedores de transferência de arquivos quais sistemas armazenaram seus dados e use esse inventário para definir o escopo da resposta e das notificações.
- ✓Orientação FlawOpen: defina o prazo de retenção conforme a sensibilidade dos dados e a necessidade contratual, e verifique a exclusão; isso limita a exposição sem presumir o histórico de retenção das vítimas do MOVEit.
Fontes
- Progress — vulnerabilidade crítica no MOVEit Transfer (31 de maio de 2023)
- CISA e FBI — alerta AA23-158A: gangue de ransomware CL0P explora a CVE-2023-34362
- Mandiant — vulnerabilidade zero-day no MOVEit Transfer explorada para roubo de dados
- CVE-2023-34362 — registro CVE
- MITRE CWE-89
- Injeção de SQL — referência completa da classe em 11 linguagens
- Stored procedures impedem injeção de SQL?
- CVE-2025-1094: quando a própria função de escape era a vulnerabilidade
- Catálogo KEV da CISA — CVE-2023-34362