Deserialization of Untrusted Data vulnerability affecting DELMIA Apriso from Release 2020 through Release 2025
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.
Resumo
Falha de deserialização insegura (CWE-502) no serviço web SOAP FlexNetOperationsService do DELMIA Apriso, MES/MOM da Dassault Systèmes usado para gestão de operações de manufatura. Um atacante sem autenticação que alcance o endpoint pela rede pode enviar um payload serializado malicioso e obter execução remota de código no servidor. Está no catálogo KEV da CISA com exploração confirmada em campo, o que eleva a urgência muito além do que o CVSS por si só sugeriria.
Detalhamento técnico
O ponto vulnerável é o endpoint WCF `/apriso/WebServices/FlexNetOperationsService.svc/Invoke`, que aceita um envelope SOAP contendo um objeto serializado em XML (DataContractSerializer/NetDataContractSerializer, formato `z:Type`/`z:Assembly` típico do .NET). O serviço desserializa esse conteúdo sem validar o tipo esperado, permitindo que o atacante controle totalmente qual classe .NET é instanciada — a essência de uma vulnerabilidade de deserialização de dados não confiáveis.
O gadget observado em exploração real abusa de `System.Collections.Generic.SortedSet` com um `ComparisonComparer` cujo delegate é reconstruído via `System.DelegateSerializationHolder`, apontando o método de comparação para `System.Windows.Markup.XamlReader.Parse`. Isso força o runtime a interpretar uma string controlada pelo atacante como XAML durante a própria desserialização — técnica clássica de gadget chain (equivalente a cadeias documentadas em ferramentas de exploração de deserialização .NET) para escapar do contexto de dados e atingir execução de código.
O payload real trafega dentro do XML como uma string em Base64, comprimida com GZip (o XAML referencia `System.IO.Compression`), e ao ser processado pelo XamlReader pode instanciar objetos arbitrários — incluindo os que carregam assemblies, invocam métodos ou executam comandos do sistema operacional, dependendo do gadget final usado após o `Parse`.
O vetor `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H` reflete: acesso via rede, sem privilégio nem interação do usuário, mas complexidade de ataque alta — construir a cadeia de gadgets correta em XML e SOAP não é trivial — e escopo alterado (S:C), já que a execução de código no servidor de aplicação Apriso compromete recursos além do próprio componente vulnerável, tipicamente o sistema operacional subjacente e dados de manufatura integrados a ERP.
Como é explorada
O ataque é feito via uma requisição HTTP POST não autenticada contra o endpoint SOAP do FlexNetOperationsService, normalmente exposto em uma porta dedicada do Apriso (observada exploração contra a porta 9000 em instâncias reais). O corpo da requisição é um envelope SOAP XML contendo o objeto serializado malicioso; nenhum login, token ou cookie de sessão é necessário — a exposição do serviço na rede (ou internet, se mal segmentado) é o único pré-requisito de acesso.
A SANS ISC documentou tentativas de exploração ativas capturadas em honeypots, com scans de origem em pelo menos um IP identificado, enviando o payload descrito acima contra instâncias expostas do Apriso. A complexidade prática do ataque está na engenharia do gadget de deserialização (montar a cadeia SortedSet → DelegateSerializationHolder → XamlReader.Parse com o payload em Base64/GZip), não na dificuldade de acesso ao endpoint — uma vez que o exploit está construído, o disparo é uma única requisição HTTP.
O resultado final documentado é execução remota de código no contexto do serviço Apriso, o que em um MES de manufatura pode significar controle sobre o sistema que orquestra linhas de produção e integrações com ERP — impacto que vai além do vazamento de dados e chega a disrupção operacional física.
Versões
Como se proteger
O fornecedor publicou advisory reconhecendo a falha em Release 2020 até Release 2025, mas as fontes disponíveis não trazem o número exato da versão ou hotfix corrigido — é necessário consultar diretamente o advisory oficial da Dassault Systèmes e a Knowledge Base vinculada à CVE para obter o patch específico ao seu release e aplicá-lo. Não presuma que uma versão é segura sem confirmar no advisory: a faixa afetada é ampla (múltiplos releases anuais).
Se a atualização imediata não for viável, o controle compensatório mais eficaz é restringir o acesso de rede ao endpoint `/apriso/WebServices/FlexNetOperationsService.svc` — segmentação, firewall ou VPN limitando quem alcança a porta do serviço Apriso — já que a falha não exige autenticação. Bloquear ou filtrar no perímetro requisições SOAP contra esse serviço específico, e inspecionar/rejeitar corpos XML contendo tokens como `DelegateSerializationHolder`, `XamlReader`, `SortedSet` combinados com `z:Assembly`/`z:Type` reduz a superfície, mas é mitigação de borda, não correção da causa raiz.
Desativar o endpoint FlexNetOperationsService, se não for usado no ambiente, remove o vetor por completo. Não confie em WAF genérico sem regra específica para esse padrão de serialização — regras de proteção contra SQLi/XSS não detectam esse tipo de payload XML. A CISA incluiu a CVE no catálogo KEV com prazo de remediação até 02/10/2025 para agências federais dos EUA sob BOD 22-01, sinal de que a exploração ativa já é considerada consolidada.
Como detectar
Monitorar logs de acesso ao endpoint `/apriso/WebServices/FlexNetOperationsService.svc/Invoke` (e à porta correspondente do serviço) por requisições POST com `SOAPAction: "http://tempuri.org/IFlexNetOperationsService/Invoke"` e corpo XML contendo assinaturas de deserialização .NET como `System.Collections.Generic.SortedSet`, `System.DelegateSerializationHolder`, `System.Windows.Markup.XamlReader` ou grandes blocos de string em Base64 dentro do elemento `Items`/`string`. A presença desses tokens em tráfego SOAP para esse serviço é forte indicador de tentativa de exploração, não de uso legítimo da API.
A SANS ISC relatou scans a partir de pelo menos um IP identificado publicamente, mas isso não deve ser tratado como lista exaustiva de indicadores de comprometimento — não há assinatura única confiável além do padrão estrutural do payload SOAP/XML descrito, e variações no gadget chain podem escapar de detecção baseada apenas em substrings fixas.