
Write-up sobre a vulnerabilidade CVE-2019-9745.
A criatividade está no cerne do teste de penetração, o que torna o nosso trabalho interessante. No entanto, uma armadilha é a tendência de 'superdimensionar' cenários de ataque e focar apenas em bugs (condições de erro). Falhas (comportamento não intencional) podem, no entanto, estar presentes com resultados igualmente devastadores. Este artigo fornece um estudo de caso para demonstrar a importância dos testes de penetração para tais falhas. Simultaneamente, defende a adoção de um processo de SDLC (Ciclo de Vida de Desenvolvimento Seguro).
O artigo faz parte da RD (divulgação responsável) da vulnerabilidade CVE-2019-9745 e foi escrito em estreita cooperação com o fornecedor CloudCTI. Apresenta uma visão geral de alto nível da vulnerabilidade antes de aprofundar os detalhes técnicos. Após demonstrar a exploração da vulnerabilidade, é fornecida uma conclusão com lições aprendidas.
A ferramenta CloudCTI Recognition Configuration Tool que examinamos durante um dos nossos testes de penetração é utilizada para recuperar informações de software de CRM (Gestão de Relacionamento com o Cliente). Isso fornece ao pessoal do centro de atendimento informações relevantes durante chamadas de clientes. Foram identificados vários problemas que podem ser encadeados para comprometer totalmente o sistema local. O fornecedor gostaria de salientar que isso não afeta sistemas de outros clientes nem os seus próprios.
Tal como acontece com muitas vulnerabilidades de segurança, um problema importante reside na validação de dados provenientes de fora da sua esfera de influência. Igualmente importante é a perceção de que os sistemas e o software operam em ambientes hostis. O tempo e a experiência ensinaram-nos que a escuta é uma ameaça na internet. O mesmo, no entanto, é válido para outros canais de comunicação, até mesmo dentro do próprio sistema. Isso foi fundamental para descobrir a vulnerabilidade.
Uma análise de causa raiz dos problemas encontrados mostra a importância de práticas como a TM (modelação de ameaças). A TM ajuda a identificar riscos nas fases iniciais de conceção e desenvolvimento. Isso pode levar à mitigação de riscos inaceitáveis ou à reformulação/reimplementação. Embora o leitor seja incentivado a realizar a sua própria análise, são fornecidas descrições das contramedidas do fornecedor para referência.
O software do fornecedor consiste em quatro aplicações que trabalham em conjunto. A primeira aplicação é a interface gráfica do utilizador (GUI). Esta permite ao utilizador iniciar a recuperação de informações de vários pacotes de software de CRM:
A GUI delega a recuperação de informações a um serviço (a segunda aplicação) através do envio de uma mensagem. As primeiras questões de segurança manifestam-se aqui: não só qualquer pessoa no sistema pode observar as mensagens entre a GUI e o serviço para determinar o seu formato e conteúdo (afetando a confidencialidade), como também pode enviar as suas próprias mensagens (afetando a autorização). Além disso, a origem das mensagens para o serviço não é verificada (afetando o não repúdio). Na terminologia de modelação de ameaças STRIDE, isto significa que o sistema está sujeito a divulgação de informações e adulteração. De facto, as informações obtidas dessas mensagens foram fundamentais para descobrir a vulnerabilidade.
A terceira aplicação é um dos muitos importadores especializados. O serviço transfere a recuperação de informações de um pacote de CRM específico para um importador específico. A mensagem enviada pela GUI contém instruções específicas para este importador. Observando o importador de CRM Exquise, verifica-se que a recuperação de informações é ainda delegada a uma aplicação externa (a quarta). Examinando a lógica interna do importador, descobriu-se que a aplicação externa podia ser especificada na mensagem entre a GUI e o serviço. O problema que aqui se manifesta é que a aplicação externa é executada sem verificar a sua identidade (afetando o não repúdio).
Ao encadear estes problemas, pudemos intercetar mensagens para determinar o seu formato e enviar uma mensagem na qual especificamos a nossa própria aplicação externa maliciosa. Essa aplicação externa é executada com os mesmos privilégios do importador/serviço. Como esses privilégios são os mais altos possíveis dentro do sistema, é alcançado o controlo total e o sistema fica comprometido.
Estes problemas são mitigados pelo fornecedor através da encriptação das mensagens (mitigando o problema de confidencialidade) com recurso a segredos partilhados únicos (mitigando o problema de autorização) que só podem ser acedidos pelos utilizadores do sistema autenticados que os possuem (mitigando o primeiro problema de não repúdio). Por fim, a aplicação externa é criptograficamente assinada (mitigando o segundo problema de não repúdio). A combinação destas medidas mitiga com sucesso a vulnerabilidade.
Quando a aplicação GUI CloudCTI Recognition Configuration Tool (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\CloudCTI Recognition Configuration Tool.exe) é instalada, é examinada com o Process Explorer. Isto revela que um serviço complementar (Recognition Update Client Service) é instalado e executado com direitos de NT AUTHORITY\SYSTEM:
Ao investigar o executável do serviço (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RecognitionUpdateClientServiceService.exe), torna-se evidente que foi desenvolvido utilizando a linguagem de programação .NET. Este pode ser descompilado com o dnSpy para obter uma visão sobre a sua lógica interna, que será detalhada abaixo.
RUCS2017Service (o namespace interno .NET no executável do serviço) acaba por ser um invólucro fino à volta do namespace RUCS2017 (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RUCS2017.dll). Este define um servidor de pipe nomeado chamado RUCS20151029 em RUCS2017.dll:RUCS2017.TRUCS2017:902: