Voltar
Vulnerability Intelligence
Tabela de conteúdo

In brief

1. Introduction: Understanding CVE-2023-20887 2. CVE-2023-20087 - Vulnerability Analysis? 3. CVE-2023-20887 - The Command Injection how it works ? 4. How the bypass works 5. Mitigating Risk: Steps to Secure Against CVE-2023-20887 6. Threat detection on CVE-2023-20887

O CVE 2023-20887 foi descoberto nas operações do VMware Aria com uma pontuação CVSS de 9,8. A solução VMware Aria Operations permite o gerenciamento de operações de TI em ambientes privados, híbridos e multinuvem com uma plataforma unificada e de alto desempenho.

Esse CVE permite que um invasor execute comandos remotos nas instâncias afetadas. Um a exploração da vulnerabilidade já foi lançada publicamente e pode ser usado por atacantes para atacar instâncias vulneráveis em grande escala. As instâncias com a versão 6.0 e superior são vulneráveis a esse CVE. A VMware já lançou um patch para a vulnerabilidade e é aconselhável corrigir suas instâncias.

Affected Product

CVE Type

Version

CVSSv3 base score 

VMware Aria Operations for Networks (Formerly vRealize Network Insight)

Remote Command Injection Vulnerability

6.x

9.8

Análise de vulnerabilidade

Um dos procedimentos disponíveis no VMware é”Crie um pacote de suporte”, A vulnerabilidade é causada pela injeção de comando no pacote de suporte.

A injeção de comando

Ao criar um pacote de suporte nas operações do VMware Aria, uma função chamada”Crie um pacote de suporte” é chamado. Essa função espera os seguintes parâmetros no comando de solicitação:

  • ID do cliente
  • ID do nó
  • ID da solicitação
  • IDs de solicitação de despejo
Nota: Na VMware, a operação createSupportBundle se refere a um recurso que permite aos usuários gerar um pacote de suporte para um produto ou componente específico da VMware. Um pacote de suporte contém informações de diagnóstico e registros que podem ajudar a equipe de suporte da VMware a solucionar problemas e fornecer assistência.

Esses parâmetros são analisados conforme mostrado no código-fonte da classe 'Criar pacote de suporte _args'no Apêndice. Esses parâmetros são então analisados na forma de uma estrutura como essa e utilizados pelo 'Crie um pacote de suportefunção ':



struct {
	customerId,
	nodeId,
	requestId,
	evictionRequestIDs
}

Conforme visto no código-fonte da função 'Crie um pacote de suportefunção 'no Apêndice, a'ID de não' será passado para a função 'Evict Published Support Bundles ' no 'Utilitários de script' classe. O código-fonte de 'Pacotes de suporte publicados pela Evict'tem a seguinte aparência:

Código-fonte da função EvictPublishedSupportBundles

Agora, se observarmos cuidadosamente, a linha 16 pega o 'ID de não' e a linha 21 o executa como um comando no sistema. Portanto, usando um caractere de escape como (`), um invasor pode executar seus próprios comandos, resultando em uma vulnerabilidade de execução de código.

Portanto, para executar comandos, um invasor pode fazer uma solicitação de postagem com os seguintes dados:

Um exemplo de objeto JSON usado na solicitação de postagem para executar comandos

A chave “2” deve ser nodeID nessa solicitação maliciosa (com base na estrutura mencionada anteriormente). Agora, para fazer isso remotamente, tudo o que um invasor precisa fazer é fazer uma solicitação ao”saasresttosaasservlet” endpoint, ou seja,”https://vulnerable-domain.com/saas.resttosaasservlet”.

Embora a execução desse comando seja relativamente fácil de realizar, há um problema. A configuração do nginx localizada em `/etc/nginx/sites-disponíveis/vnera` restringe o acesso ao `/saasresttosaasservlet` endpoint quando acessado pela porta 443. A regra permite especificamente solicitações originadas apenas do 'anfitrião local'. Qualquer solicitação bem-sucedida feita a esse endpoint será enviada por proxy para a porta 9090, que hospeda um servidor RPC Apache Thrift.

 

O desvio

Se olharmos o arquivo de configuração do Apache em”/etc/nginx/sites-available/vnera” que restringe o acesso ao endpoint vulnerável da Internet, podemos ver a seguinte regra”reescreva ^/saas (.*) $/$1 break;” como pode ser visto na imagem abaixo.

Código-fonte do arquivo de configuração do Apache em /etc/nginx/sites-available/vnera

Agora, essa regra pode ser ignorada passando um URL com”.” como:”https://<IP-OF-SERVER>/saas. /resttosaasservlet”. Isso será tratado pelo regex e convertido no seguinte URL:”https://<IP-OF-SERVER>/. /resttosaasservlet”, contornando assim a restrição em vigor e permitindo o acesso remoto ao código vulnerável, levando à obtenção de um RCE.

O que é alarmante aqui é que a prova de conceito dessa vulnerabilidade já foi lançado no Git Hub e pode ser utilizado pelos atacantes para comprometer instâncias não corrigidas do VMware Aria Operations for Networks.

Mitigações

Corrija os endpoints vulneráveis baixando a versão atualizada do https://kb.vmware.com/s/article/92684 

Detecção de ameaças

A seguinte regra YARA pode ser usada para detectar um invasor tentando explorar essa vulnerabilidade na sua rede. A regra é baseada na seguinte lógica:

  1. O atacante está tentando acessar o endpoint vulnerável usando o caminho:”/saas. /resttosaasservlet”.
  2. O atacante está usando o método HTTP POST nesse endpoint.
  3. Os dados da postagem contêm o personagem ` no começo, no final ou no meio.


rule Detect_VMWare_Aria_RCE_Network
{
   meta:
       description = "Detects network traffic related to VMWare Aria Operations for Networks (vRealize Network Insight) pre-authenticated RCE"
       author = "Vikas Kundu"
       reference = "https://summoning.team/blog/vmware-vrealize-network-insight-rce-cve-2023-20887/"


   strings:
       $httpMethod = "POST" nocase wide
       $urlPath = "/saas./resttosaasservlet" nocase wide
       $payload_with_char_at_start_or_end = "[/[^,]+/,\"createSupportBundle\", /[^,]+/, /[^,]+/, {\"1\": {\"str\": /[^,]+/}, \"2\": {\"str\": /`.*`/}, \"3\":{\"str\":/[^,]+/},\"4\":{\"lst\":[/[^,]+/,/[^,]+/,/[^,]+/,/[^,]+/]}}]" nocase wide
       $payload_with_char_in_between =      "[/[^,]+/,\"createSupportBundle\", /[^,]+/, /[^,]+/, {\"1\": {\"str\": /[^,]+/}, \"2\": {\"str\": /.*`.*/ }, \"3\":{\"str\":/[^,]+/},\"4\":{\"lst\":[/[^,]+/,/[^,]+/,/[^,]+/,/[^,]+/]}}]" nocase wide


   condition:
       $httpMethod at 0 and any of (payload_with_char_at_start_or_end, $payload_with_char_in_between) and $urlPath at 0
}



Referências

Apêndice

Código-fonte da função createSupportBundle

Código-fonte da classe CreateSupportBundle_Args

Vikas Kundu
A naturally curious mind driven by the need to understand how things work and how to make them better. Passionate about learning, experimenting, and exploring new ideas across technology and security.
Anirudh Batra
Threat Analyst at CloudSEK

Blogs relacionados