OpenBSD 7.9: duas falhas adesivos que permitiam escalada local de privilégios

Autor: Publicada 6 min de lectura 3 leituras

As imagens deste artigo foram geradas com inteligência artificial. Como publicamos

Hoje foi pública uma cadeia de exploração de privilégios locais contra o OpenBSD 7.9 que, segundo o relatório publicado pela empresa de segurança Calif, permite a um atacante elevar-se ao root explodindo duas falhas corrigidas em setembro. Os adesivos para ambas as falhas já estão disponíveis e foram distribuídos como errata em setembro; a primeira (um transbordamento inteiro em shmat(4)) foi corrigida em 14 de setembro como errata 018 e a segunda (um use-after-free na contagem de referências) foi corrigida em 30 de setembro como errata 026. As correcções estão disponíveis através do syspatch e, de acordo com o OpenBSD, cobrem todas as arquiteturas. Não há, por agora, um CVE atribuído a nenhum dos dois erros ou evidência pública de uso em ataques dirigidos.

Atos confirmados: o vetor inicial é um transbordamento inteiro na função de adjunto de memória compartilhada shmat(4), herdado da definição original do kernel BSD para o contador de anexos shm_nattch como um short com sinal de 16 bits (máximo 32.767). OpenBSD não ampliou esse tipo e o exploit aproveita que, criando suficientes segmentos de memória compartilhada e muitos processos, esse contador pode ultrapassar seu limite e fazer com que o valor envuelva a negativo. A segunda peça da cadeia é uma falha na contagem de referências que deriva em um use-after-free. Calif publicou uma análise técnica e código de teste de conceito após a entrega de adesivos por parte do OpenBSD.

OpenBSD 7.9: duas falhas adesivos que permitiam escalada local de privilégios
Imagem gerada com IA.

Como funciona a cadeia — explicação técnica reconstruída a partir do relatório: o atacante mapea dezenas de segmentos de memória compartilhada e cria numerosos processos para inflar shm_nattch além de 32.767; quando o contador envolve, cria-se uma condição de carreira que pode fazer com que o kernel liberte objetos ainda usados por outros processos. A partir daí, o exploit aproveita também uma escrita fora de limites que modifica contadores de associação multicast em estruturas do kernel. Quando o socket afetado se fecha, as operações de decremento resultantes acabam lendo ou descrevendo entradas de tabelas de páginas, convertendo uma página de usuário em acessível de modo supervisor e, desse modo, evando as proteções hardware SMAP e SMEP. Com a memória kernel-mapeada em espaço supervisor, o exploit pode sobrepor um ponteiro de função localizado em um endereço de kernel que é previsível nessa máquina e executar código com privilégios de kernel.

Importante: OpenBSD inclui KARL, um mecanismo de randomização que religa o binário do kernel para aleatorizar endereços de funções e dados. No entanto, segundo o pesquisador (Andrew Griffiths) citado por Calif, os alocados de memória do kernel permanecem deterministas: tanto o alocador de arranque como o best-fit colocam estruturas iniciais (incluindo ponteiros usados por controladores de interface lo0 e enc0) em endereços reproduzidos na mesma máquina entre reinícios. Essa predibilidade é o que permite ao exploit apontar um ponteiro de função sem exigir uma vulnerabilidade adicional de divulgação de informação.

Que impactos reais pode ter isto: em sistemas vulneráveis sem adesivos, um atacante com acesso local (ou seja, capaz de executar processos na máquina afetada) poderia adquirir privilégios de root. Isto não é um exploit remoto: requer execução local, por exemplo acesso de usuário sem privilégios ou capacidade de executar processos em um recipiente ou sessão. Portanto afeta diretamente servidores ou estações onde usuários não completamente confiáveis têm capacidade de executar código, ambientes multi-usuários e serviços que concedem execução a processos de terceiros.

Confirmado versus estimado ou incerto: é um fato que os adesivos foram liberados e que Calif publicou PoC. É uma estimativa razoável (respaldada pela técnica explicada) que a cadeia permite evitar SMAP/SMEP e obter root na configuração descrita; contudo, ainda é incerto se esta cadeia foi explorada em ambientes reais antes da correção (não há evidência pública). Também não há CVE atribuído no momento da publicação, o que deixa certo grau de incerteza na comunicação coordenada entre descubridor e coordenadores de CVE.

Medidas concretas a tomar pelos administradores e usuários do OpenBSD agora mesmo: em primeiro lugar, atualizar e aplicar os errata publicados. O OpenBSD distribuiu as correcções através do syspatch; os administradores devem executar o syspatch e reiniciar os sistemas para que as correcções do kernel tenham efeito. As informações de errata oficial e a ferramenta syspatch podem ser consultadas nas páginas do OpenBSD: OpenBSD errata e man syspatch. Além disso, até aplicar os adesivos, os administradores devem restringir o acesso local: limitar as contas com capacidade de executar processos, endurecer contentores e compartimentos, e rever configurações que permitam a usuários não privilegiados criar grandes quantidades de segmentos de memória compartilhada ou processos em massa.

Recomendações adicionais de segurança operacional: realizar integridade e auditoria do sistema após a atualização (comprobar binários, registros de arranque e atividade anómala), rotar credenciais privilegiadas se houver suspeita de compromisso e considerar a segregação de serviços que aceitam código de terceiros em hosts dedicados que possam ser reiniciados e actualizados com mais facilidade. Para ambientes de alto risco, limitar ou monitorar o uso de memória compartilhada por usuários não confiáveis e empregar controles de acesso adicionais (por exemplo, listas de controle ao nível de aplicação).

OpenBSD 7.9: duas falhas adesivos que permitiam escalada local de privilégios
Imagem gerada com IA.

Medidas de endurecimento propostas pelo descubridor e sua avaliação: Calif propõe quatro linhas de mitigação a mais longo prazo: safe-unlinking para listas ligadas no kernel(já usado no FreeBSD e NetBSD), randomização do mapeamento autorreferencial de tabelas de páginas, aleatorização do atribuídor de memória do kernel e verificação de limites por compilador. Estas propostas atacam as causas estruturais do exploit: safe-unlinking reduz a eficácia de corrupções de listas ligadas, a randomização do self-referential page-table e do atribuídor dificulta a predibilidade de endereços, e a verificação de limites ajudaria a detectar erros de escrita fora de faixa ou sobrepassos de contadores. São soluções arquitetônicas que requerem trabalho de implementação e validação e não substituem a correção de erros pontuais, mas constituem um plano de defesa em profundidade.

O que vigiar nas próximas semanas: confirmação de CVE (s) atribuídos, atualizações adicionais de OpenBSD que melhorem a mitigação arquitetônica, e relatórios de uso ativo no cenário selvagem. Também será relevante a resposta da comunidade OpenBSD sobre as propostas de endurecimento de Calif e qualquer mudança no KARL ou nos alocados de memória do kernel.

Em resumo: se você administra sistemas OpenBSD, aplique as erratas e reinicia. A cadeia publicada demonstra uma rota técnica para escapar de proteções hardware e obter root a partir de vulnerabilidades locais, mas as correções já estão disponíveis e sua instalação é a ação mais imediata e eficaz. Mantenha a redução do acesso local como medida temporária enquanto estabilizam melhorias a mais longo prazo no núcleo do sistema.

Cobertura

Relacionadas

Mas notícias do mesmo assunto.