Belkin Wemo Smart Plug V2 - o estouro de buffer que não será corrigido

Belkin Wemo Smart Plug V2 - o estouro de buffer que não será corrigido

Nó Fonte: 2657924

Pesquisadores da empresa de segurança IoT Sternum cavou um popular plugue de alimentação de automação residencial da conhecida marca de dispositivos Belkin.

O modelo que eles olharam, o Plugue Inteligente Wemo Mini (F7C063) aparentemente está chegando ao fim de sua vida útil, mas encontramos muitos deles à venda on-line, juntamente com conselhos e instruções detalhadas no site da Belkin sobre como configurá-los.

Antigos (no sentido moderno de curto prazo), embora possam ser, os pesquisadores observaram que:

Nosso interesse inicial no dispositivo veio de ter vários deles em nosso laboratório e usados ​​em nossas casas, então só queríamos ver o quão seguro (ou não) eles seriam usados. [… Este parece ser um dispositivo de consumo bastante popular [; com base nesses números, é seguro estimar que o total de vendas somente na Amazon deve chegar a centenas de milhares.

Simplificando, há muitas pessoas por aí que já compraram e conectaram essas coisas e as estão usando agora para controlar tomadas elétricas em suas casas.

Um “plugue inteligente”, simplificando, é uma tomada elétrica que você conecta a uma tomada de parede existente e que interpõe um interruptor controlado por Wi-Fi entre a tomada elétrica na parte frontal da tomada e uma tomada elétrica de aparência idêntica em na frente do plugue inteligente. Pense nisso como um adaptador de energia que, em vez de converter, digamos, um soquete redondo do Euro em um triangular do Reino Unido, converte, digamos, um soquete dos EUA comutado manualmente em um soquete dos EUA comutado eletronicamente que pode ser controlado remotamente por meio de um aplicativo ou uma interface do tipo web.

O S em IoT…

O problema com muitos dispositivos chamados de Internet das Coisas (IoT), como diz a velha piada, é que é a letra “S” em “IoT” que significa segurança…

…o que significa, é claro, que muitas vezes não há tanta segurança cibernética quanto você poderia esperar, ou mesmo nenhuma.

Como você pode imaginar, um dispositivo de automação residencial inseguro, especialmente um que permita que alguém fora de sua casa, ou mesmo do outro lado do mundo, ligue e desligue aparelhos elétricos à vontade, pode causar muitos problemas.

Já escrevemos sobre a insegurança da IoT em uma ampla variedade de produtos diferentes, desde chaleiras de internet (sim, sério) que pode vazar sua senha Wi-Fi doméstica, para câmeras de segurança que bandidos podem usar para manter suas olho em você em vez do contrário, para unidades de disco conectadas à rede com risco de serem salpicado por ransomware diretamente pela internet.

Nesse caso, os pesquisadores encontraram uma falha de execução remota de código no Wemo Mini Smart Plug em janeiro de 2023, relataram isso em fevereiro de 2023 e receberam um número CVE em março de 2023 (CVE-2023-27217).

Infelizmente, embora quase certamente existam muitos desses dispositivos em uso ativo no mundo real, a Belkin aparentemente disse que considera o dispositivo "no fim de sua vida útil" e que a falha de segurança, portanto, não será corrigida.

(Não temos certeza de quão aceitável seria esse tipo de rejeição de “fim de vida útil” se o dispositivo apresentasse uma falha em seu circuito elétrico de 120 V CA ou 230 V CA, como a possibilidade de superaquecimento e emissão de produtos químicos nocivos ou configuração pegando fogo, mas parece que as falhas na eletrônica digital de baixa tensão ou no firmware do dispositivo podem ser ignoradas, mesmo que possam levar um invasor cibernético a ligar e desligar repetidamente à vontade o interruptor principal do dispositivo.)

Quando nomes amigáveis ​​são seus inimigos

O problema que os pesquisadores descobriram era um bom e velho estouro de buffer de pilha na parte do software do dispositivo que permite alterar o chamado FriendlyName do dispositivo – a string de texto que é exibida quando você se conecta a ele com um aplicativo em seu telefone.

Por padrão, esses dispositivos iniciam com um nome amigável ao longo das linhas de Wemo mini XYZ, Onde XYZ denota três dígitos hexadecimais que acreditamos serem escolhidos de forma pseudo-aleatória.

Isso significa que, mesmo que você possua dois ou três desses dispositivos, eles quase certamente começarão com nomes diferentes para que você possa configurá-los facilmente.

Mas você provavelmente desejará renomeá-los mais tarde para que seja mais fácil diferenciá-los no futuro, atribuindo-lhes nomes amigáveis, como TV power, Laptop charger e Raspberry Pi server.

Os programadores da Belkin (ou, mais precisamente, os programadores do código que acabou nesses dispositivos da marca Belkin, que também podem ter fornecido software de plugue inteligente para outras marcas) aparentemente reservaram 68 bytes de armazenamento temporário para acompanhar o novo nome durante o processo de renomeação.

Mas eles se esqueceram de verificar se o nome que você forneceu caberia nesse slot de 68 bytes.

Em vez disso, eles assumiram que você usaria o aplicativo de telefone oficial para executar o processo de renomeação do dispositivo e, portanto, eles poderiam restringir a quantidade de dados enviados ao dispositivo em primeiro lugar, a fim de evitar qualquer estouro de buffer que poderia de outra forma surgir.

Ironicamente, eles tomaram muito cuidado não apenas para mantê-lo no limite de 68 bytes exigido para o próprio dispositivo se comportar adequadamente, mas também para restringir a digitação de apenas 30 caracteres.

Todos nós sabemos por que deixar o lado do cliente fazer a verificação de erros, em vez de verificar (ou, melhor ainda, também) no lado do servidor, é uma péssima ideia:

  • O código do cliente e o código do servidor podem sair da conformidade. Aplicativos clientes futuros podem decidir que nomes de 72 caracteres seriam uma boa opção e começar a enviar mais dados para o servidor do que ele pode manipular com segurança. Os futuros codificadores do lado do servidor podem perceber que ninguém parece usar os 68 bytes completos reservados e decidir unilateralmente que 24 devem ser mais do que suficientes.
  • Um invasor pode optar por não se preocupar com o aplicativo. Ao gerar e transmitir suas próprias solicitações para o dispositivo, eles ignorariam trivialmente qualquer verificação de segurança que dependesse apenas do aplicativo.

Os pesquisadores foram rapidamente capazes de tentar nomes cada vez mais longos, a ponto de poderem travar o dispositivo Wemo à vontade, escrevendo no final do buffer de memória reservado para o novo nome e corrompendo os dados armazenados nos bytes imediatamente a seguir.

Corrompendo a pilha

Infelizmente, em um sistema operacional baseado em pilha, a maioria dos softwares termina com seus buffers de memória temporários baseados em pilha dispostos de forma que a maioria desses buffers seja seguida de perto por outro bloco vital de memória que diz ao programa para onde ir quando terminar o que está fazendo agora.

Tecnicamente, esses blocos de dados “para onde ir a seguir” são conhecidos como endereços de retorno, e são salvos automaticamente quando um programa chama o que é conhecido como funçãoou sub-rotina, que é um pedaço de código (por exemplo, “imprimir esta mensagem” ou “abrir uma caixa de diálogo de aviso”) que você deseja usar em várias partes do seu programa.

O endereço de retorno é gravado magicamente na pilha toda vez que a sub-rotina é usada, para que o computador possa “desenrolar” automaticamente seu caminho para voltar para onde a sub-rotina foi chamada, que pode ser diferente a cada vez que for ativada.

(Se uma sub-rotina tivesse um endereço de retorno fixo, você só poderia chamá-la de um lugar em seu programa, o que tornaria inútil empacotar esse código em uma sub-rotina separada em primeiro lugar.)

Como você pode imaginar, se você pisar naquele endereço de retorno mágico antes que a sub-rotina termine de executar, quando ela terminar, ela irá, confiante, mas inconscientemente, “desenrolar” no lugar errado.

Com um pouco (ou talvez muita) de sorte, um invasor pode prever com antecedência como atropelar o endereço do remetente de forma criativa e, assim, desviar o programa de maneira deliberada e maliciosa.

Em vez de simplesmente travar, o programa mal direcionado pode ser levado a executar o código escolhido pelo invasor, causando o que é conhecido como um execução remota de código explorar, ou RCE.

Duas defesas comuns ajudam a proteger contra explorações desse tipo:

  • Randomização do layout do espaço de endereço, também conhecida como ASLR. O sistema operacional carrega deliberadamente programas em locais de memória ligeiramente diferentes toda vez que são executados. Isso torna mais difícil para os invasores adivinhar como desviar programas com bugs de uma maneira que, em última análise, obtenha e retenha o controle, em vez de simplesmente travar o código.
  • Canários de pilha, recebeu o nome dos pássaros que os mineiros costumavam levar com eles para o subsolo porque desmaiavam na presença de metano, fornecendo assim um aviso cruel, mas eficaz, do risco de explosão. O programa insere deliberadamente um bloco de dados conhecido, mas aleatório, bem na frente do endereço de retorno toda vez que uma sub-rotina é chamada, de modo que um estouro de buffer irá inevitável e detectavelmente sobrescrever o “canário” primeiro, antes que ele ultrapasse o suficiente para atropelar no importantíssimo endereço de retorno.

Para que sua exploração funcione de forma rápida e confiável, os pesquisadores precisaram forçar o plugue Wemo a desligar o ASLR, o que os invasores remotos não seriam capazes de fazer, mas com muitas tentativas na vida real, os invasores podem ter sorte, adivinhe corretamente nos endereços de memória em uso pelo programa e obtenha o controle de qualquer maneira.

Mas os pesquisadores não precisavam se preocupar com o problema do canário de pilha, porque o aplicativo com bugs foi compilado a partir de seu código-fonte com o recurso “inserir instruções de segurança para verificação de canário” desativado.

(Os programas protegidos por Canary são normalmente um pouco maiores e mais lentos do que os desprotegidos devido ao código extra necessário em cada sub-rotina para fazer as verificações de segurança.)

O que fazer?

  • Se você é proprietário do Wemo Smart Plug V2, verifique se você não configurou seu roteador doméstico para permitir que o dispositivo seja acessado de “fora”, pela internet. Isso reduz o que é conhecido no jargão como seu área de superfície de ataque.
  • Se você tiver um roteador compatível com Universal Plug and Play, também conhecido como UPnP, certifique-se de que está desligado. O UPnP torna notoriamente fácil para dispositivos internos serem abertos inadvertidamente para pessoas de fora.
  • Se você é um programador, evite desativar os recursos de segurança do software (como proteção de pilha ou verificação canário de pilha) apenas para economizar alguns bytes. Se você estiver genuinamente ficando sem memória, procure reduzir sua pegada melhorando seu código ou removendo recursos em vez de diminuir a segurança para que você possa acumular mais.

Carimbo de hora:

Mais de Segurança nua