Threat Response
Threat Response

Gerenciador de licenças perigoso: como uma vulnerabilidade no software da Schneider Electric expõe empresas industriais a riscos

Products & Services:

Sobre a vulnerabilidade

A vulnerabilidade CVE-2024-2658 foi identificada em 2024 no componente FlexNet Publisher, usado no Schneider Electric Floating License Manager. Esse software é utilizado para gerenciar licenças em produtos da Schneider Electric, empregados na automação integrada de processos produtivos, que vão desde a programação de controladores lógicos programáveis (PLC) até a criação de painéis de supervisão centralizados. A seguir, mostramos como uma única vulnerabilidade pode se transformar em uma ameaça para uma empresa industrial, além de explicarmos como detectá-la nas estações de trabalho e minimizar os riscos.

O problema pertence à classe CWE-427: Uncontrolled Search Path Element. Ele ocorre porque o aplicativo do sistema acessa o arquivo de configuração do OpenSSL por um caminho fixo no código, sem impor restrições de acesso a ele.

Essa característica permite que um usuário local sem privilégios administrativos prepare seu próprio arquivo de configuração do OpenSSL e force o carregamento de uma DLL de terceiros no processo do sistema lmadmin.exe, o serviço responsável pelo licenciamento. Com isso, o código do invasor pode ser executado já no contexto do serviço, e não de um usuário comum. Em determinadas condições, isso abre caminho para um escalonamento de privilégios adicional até o nível NT AUTHORITY\SYSTEM.

Nesse caso, o invasor pode obter acesso completo aos arquivos locais de configuração, dados de serviço e segredos disponíveis nesse host. A possibilidade de movimentação lateral para outros nós da rede industrial, como estações de trabalho de engenheiros, depende da conectividade da rede, da existência de credenciais armazenadas e da arquitetura da rede. Além disso, o invasor pode interromper o funcionamento do servidor de licenças, o que afeta diretamente a disponibilidade do software de engenharia e das operações de manutenção.

A seguir, explicamos qual é o papel do componente FlexNet Publisher no software Schneider Electric Floating License Manager (Schneider Electric FLM), por que o caminho fixo para o openssl.cnf dentro do aplicativo se mostrou perigoso, como é a cadeia de exploração da vulnerabilidade e quais medidas devem ser adotadas.

Papel do FlexNet Publisher no Schneider Electric FLM

O FlexNet Publisher é um produto de terceiros da empresa Flexera Software. Os desenvolvedores da plataforma Schneider Electric FLM e de muitas outras soluções incorporam o FlexNet Publisher como biblioteca para gerenciar o licenciamento de seus produtos.

O problema do FlexNet Publisher é que, em todas as versões até a 11.19.6.0, essa biblioteca não controlava o acesso de usuários com privilégios limitados ao arquivo openssl.cnf. Esse é um exemplo clássico de vulnerabilidade da classe Uncontrolled Search Path Element (CWE-427).

Ao todo, o Schneider Electric FLM reúne vários componentes interligados.

  1. lmadmin.exe: daemon leve de 32 bits responsável por atender às solicitações de licença de módulos PLC, HMI e SCADA. Durante a instalação, esse componente é registrado automaticamente como o serviço do Windows lmadminSchneider. O serviço é iniciado automaticamente e executado com a conta NT AUTHORITY\LOCAL SERVICE.

    Propriedades do lmadminScheider: executável e contexto de segurança do serviço em execução

    Propriedades do lmadminScheider: executável e contexto de segurança do serviço em execução

  2. Arquivo de configuração openssl.cnf, localizado no subdiretório OpenSSL-contrib. Esse arquivo pode conter o caminho para o engine module, uma DLL que o FlexNet pode carregar no processo lmadmin.exe. O caminho do arquivo de configuração é fixo no código do aplicativo e tem a seguinte forma:

    Aqui, LMADMI~1.4 é o nome do diretório no formato de nomenclatura de arquivos do MS-DOS. Qualquer usuário com permissão para criar diretórios na raiz de C:\ pode recriar essa estrutura (por padrão, todos os usuários autenticados possuem essa permissão). Por padrão, essa pasta não existe após a instalação do Schneider Electric FLM.
  3. O componente FlexNet Publisher mencionado (antigo FLEXlm) é uma biblioteca de gerenciamento de licenças que, ao ser iniciada, lê o arquivo de configuração openssl.cnf e analisa a seção [engine]. Se essa seção contiver o parâmetro dynamic_path, o FlexNet Publisher carrega o módulo DLL indicado nesse parâmetro sem realizar qualquer verificação.
  4. Portal web do Schneider Electric FLM: um pequeno servidor HTTP embutido no processo lmadmin.exe que dá acesso a duas seções: Dashboard (disponível sem autenticação) e Administration (protegida por senha). Como o portal web e o lmadmin.exe são executados no mesmo espaço de endereçamento, o código carregado pelo FlexNet Publisher é executado dentro do processo lmadmin.exe. Isso permite que o invasor intercepte a senha da seção Administration e a use para expandir o ataque a outros sistemas.

    Presença do privilégio SeImpersonatePrivilege no processo lmadmin.exe

    Presença do privilégio SeImpersonatePrivilege no processo lmadmin.exe

Caminho de exploração

Para explorar a vulnerabilidade, o invasor precisa ser capaz de executar um código arbitrário no sistema local em que o serviço vulnerável está instalado. A principal falha explorada pelo invasor é que, em uma configuração padrão do Windows, as permissões NTFS na raiz do disco do sistema podem permitir que o grupo Authenticated Users crie novos diretórios. Caso essas permissões de acesso (ACL) não tenham sido restringidas, um invasor sem privilégios administrativos pode recriar o caminho utilizado pelo lmadmin.exe para localizar a configuração do OpenSSL:

Em seguida, no arquivo de configuração openssl.cnf criado, o invasor indica o caminho para um engine module malicioso, localizado em um diretório com permissão de gravação, como no exemplo a seguir: dynamic_path = C:\\Users\\public\\malicious.dll. Ao inicializar o OpenSSL, o FlexNet Publisher processa essa seção e, ao encontrar o parâmetro dynamic_path, usa-o para carregar a DLL preparada pelo invasor. Como as versões vulneráveis do FlexNet permitem o carregamento da configuração do OpenSSL a partir de um local originalmente inexistente e não confiável, o arquivo de configuração criado pelo invasor acaba sendo aceito como legítimo pelo processo lmadmin.exe.

Exemplo de arquivo de configuração openssl.cnf malicioso

Exemplo de arquivo de configuração openssl.cnf malicioso

Para que o lmadmin.exe leia o arquivo openssl.cnf e carregue a DLL maliciosa, é necessário reiniciar o serviço lmadminSchneider. Isso pode ocorrer nas seguintes condições:

  • Em decorrência de uma reinicialização normal do host;
  • Quando o usuário tem permissão para gerenciar esse serviço (por padrão, o grupo Authenticated Users não tem essa permissão).

No momento em que o serviço lmadmin.exe é iniciado, o componente FlexNet Publisher inicializa o OpenSSL, abre o arquivo de configuração openssl.cnf e processa a seção [engine]. Caso ela contenha dynamic_path, o OpenSSL carrega o módulo DLL correspondente no processo lmadmin.exe. Em seguida, o código contido na DLL passa a ser executado no contexto do processo lmadmin.exe. Como o serviço é executado com a conta NT AUTHORITY\LOCAL SERVICE, o código malicioso obtém os privilégios desse serviço.

Embora a conta NT AUTHORITY\LOCAL SERVICE tenha privilégios bastante limitados, existe o risco de um escalonamento de privilégios adicional. Esse risco se deve a que, na configuração padrão, o processo do serviço recebe o privilégio SeImpersonatePrivilege, que permite ao processo assumir o contexto de segurança do cliente após a autenticação.

Com um cenário de interação adequado via RPC, COM ou pipes nomeados (named pipes), isso pode ser usado para um escalonamento de privilégios local adicional até o nível NT AUTHORITY\SYSTEM. Para isso, são empregadas, por exemplo, técnicas da família Potato e outros métodos baseados no abuso de impersonação (impersonation). Assim, apesar da trivialidade de cada ação isolada, o conjunto delas forma uma cadeia de exploração completa, que parte de um usuário local com poucos privilégios e chega à execução de código no contexto do serviço, podendo, em condições adicionais, escalar privilégios até o nível NT AUTHORITY\SYSTEM.

Como mitigar a exploração da CVE-2024-2658

  • Se a organização não usa licenças flutuantes (floating license), recomendamos remover o software Schneider Electric FLM ou não instalá-lo nas estações de trabalho em que o produto não é necessário. Sempre que possível, recomendamos usar licenças vinculadas a um nó específico;
  • O Schneider Electric FLM deve ser hospedado em um servidor dedicado, com acesso restrito de usuários;
  • Recomendamos criar o diretório C:\cygwin usando uma conta administrativa e negar ao grupo Authenticated Users a permissão de gravação nesse diretório. Isso limita a possibilidade de colocar um arquivo de configuração falso do OpenSSL no caminho definido;
  • Também recomendamos atualizar o Schneider Electric FLM para a versão 3.0.0.0 ou superior.

Detecção pelas soluções da Kaspersky

A solução Kaspersky Industrial CyberSecurity é capaz de detectar a exploração dessa vulnerabilidade. O módulo Vulnerability Manager identifica a presença da versão vulnerável do software na estação de trabalho, enquanto o módulo comportamental detecta cada etapa da exploração, desde a criação do arquivo de configuração malicioso no disco até a tentativa de carregamento da biblioteca maliciosa pelo serviço vulnerável.

Detecção de tentativa de exploração da vulnerabilidade: informações gerais

Detecção de tentativa de exploração da vulnerabilidade: informações gerais

O cartão de alerta do KICS reúne informações adicionais sobre a tentativa de exploração da vulnerabilidade e as ações de proteção recomendadas.

Detecção de tentativa de exploração da vulnerabilidade: informações sobre o processo atacado

Detecção de tentativa de exploração da vulnerabilidade: informações sobre o processo atacado

É possível, ainda, usar a tarefa de varredura OVAL nos produtos KICS para identificar antecipadamente a presença da vulnerabilidade no host, como parte de um processo contínuo de gerenciamento de vulnerabilidades. Na captura de tela apresentada, é possível observar como o KICS for Nodes detecta a versão vulnerável do software.

Informações sobre a vulnerabilidade CVE-2024-2658 detectada

Informações sobre a vulnerabilidade CVE-2024-2658 detectada

Conclusão

A vulnerabilidade CVE-2024-2658 ilustra claramente as consequências que a falta de controle no carregamento de arquivos de dependências pode causar. No caso do Schneider Electric Floating License Manager, um usuário local sem privilégios administrativos pode criar um arquivo de configuração openssl.cnf, colocá-lo no caminho necessário e forçar o carregamento de uma DLL maliciosa no contexto do serviço lmadmin.exe. Em determinadas configurações do sistema, essa cadeia de ações pode resultar em um escalonamento de privilégios até o nível NT AUTHORITY\SYSTEM.

Para corrigir a vulnerabilidade, recomendamos atualizar o componente afetado (FlexNet Publisher) para uma versão corrigida. Além disso, é preciso restringir a permissão de gravação de usuários não privilegiados no diretório C:\cygwin. Essas medidas reduzem significativamente o risco de exploração da vulnerabilidade, enquanto as soluções Kaspersky Industrial CyberSecurity oferecem uma camada adicional de proteção, identificando ações suspeitas nas fases iniciais do ataque.

Gerenciador de licenças perigoso: como uma vulnerabilidade no software da Schneider Electric expõe empresas industriais a riscos

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Relatórios

O passageiro invisível do seu carro

Um especialista da Kaspersky descobriu um novo malware para Android para exibição de anúncios e criação de uma botnet de proxy. A infecção ocorre por meio de um software legítimo desatualizado para centrais multimídia da DoFun.