Estouros de buffer, violações de licença e código incorreto: Feche o FreeBSD 13

Na maior parte, a equipe de desenvolvimento central do FreeBSD não parece ver a necessidade de atualizar os procedimentos de revisão e aprovação.
Mais Zoom / Na maior parte, a equipe de desenvolvimento central do FreeBSD não parece ver a necessidade de atualizar os procedimentos de revisão e aprovação.

Urik Lawson (depois de KC Green)

À primeira vista, Matthew Messi parecia uma opção perfeitamente razoável para transferir o WireGuard para o kernel do FreeBSD. O WireGuard é um protocolo de túnel criptografado ponto a ponto, que faz parte do que a maioria das pessoas chama de “VPN”. O FreeBSD é um sistema operacional semelhante ao Unix que alimenta tudo, desde roteadores Cisco e Juniper até a rede Netflix, e Macy tem muita experiência na equipe de desenvolvimento, incluindo trabalhar em vários drivers de rede.

Então, quando Jim Thompson, CEO da Netgate, que fabrica roteadores com FreeBSD, decidiu que era hora do FreeBSD desfrutar do mesmo nível de suporte WireGuard dentro do kernel que o Linux oferecia, ele ofereceu um contrato para a Macy. Macy irá mover o WireGuard para o kernel do FreeBSD, onde o Netgate pode então usá-lo para distribuir o popular roteador pfSense da empresa. O contrato foi apresentado sem prazos ou marcos; Messi estava simplesmente fazendo o trabalho de acordo com seu cronograma.

Com o nível de especialização da Macy – com codificação de kernel e pilhas de rede em particular – o projeto parecia um sucesso. Mas as coisas pioraram quase imediatamente. O desenvolvedor fundador da WireGuard, Jason Donenfeld, não ouviu falar do projeto até que ele apareceu na lista de discussão do FreeBSD, e Macy não pareceu interessada em ajudar Donenfeld quando o apresentou. Após quase nove meses de desenvolvimento em tempo parcial, Macy se comprometeu com seu implementador – em grande parte sub-revisado e não testado de forma adequada – diretamente na seção HEAD do repositório de código do FreeBSD, pois seria incorporado ao FreeBSD 13.0-RELEASE.

Este compromisso inesperado aumentou as apostas para Donenfeld, cujo projeto será julgado pela qualidade de qualquer lançamento de produção sob o nome WireGuard. Donenfeld identificou vários problemas com o código da Macy’s, mas em vez de contestar a versão do port, Donenfeld decidiu corrigir os problemas. Colaborou com o desenvolvedor do FreeBSD Kyle Evans e Matt Dunwoodie, desenvolvedor do OpenBSD que trabalhou no WireGuard para este sistema operacional. Os três trocaram quase todos os Tokens da Macy’s em uma corrida frenética de uma semana.

Isso aconteceu muito mal com a Netgate, que patrocinou os negócios da Macy’s. O Netgate já pegou o token beta da Macy do candidato a lançamento do FreeBSD 13 e o colocou em produção na versão 2.5.0 do pfSense. Donenfeld e a atualização da empilhadeira dos colaboradores – combinada com a caracterização direta de Donenfeld do código da Macy’s – colocaram a empresa em um sério problema de relações públicas.

Resposta pública Netgate incluída Cobranças De “preconceito irracional contra macy e Netgate” e irresponsável divulgação Do “número de vulnerabilidades de dia zero” – embora o Netgate esteja quase fora de sincronia Declaração Não há fraquezas reais.

Essa resposta de combate do Netgate gerou um maior escrutínio de muitas fontes, o que revelou elementos surpreendentes do passado da Macy. Foi ele e sua esposa Nicole Preso Em 2008, dois anos depois de tentar despejar ilegalmente inquilinos de um pequeno prédio de apartamentos em São Francisco que o casal comprou.

As tentativas dos Macys de forçar os inquilinos a saírem através das vigas de sustentação do piso para tornar o edifício inabitável, incluindo habitação humana, Buracos Diretamente pelos andares dos apartamentos dos inquilinos, falsificando e-mails extremamente perigosos que parecem ser dos próprios inquilinos. o casal Escapou Para a Itália para evitar o processo, mas acabaram sendo deportados para os Estados Unidos – onde se confessaram culpados de um conjunto reduzido de crimes e passaram quatro anos e quatro meses cada.

A história de Messi como proprietário, sem surpresa, o tem perseguido profissionalmente – o que contribuiu para sua falta de interesse no porto condenado de WireGuard.

No final, Messi disse-nos: “Eu nem queria fazer este trabalho.” “Eu estava exausto e passei vários meses com a síndrome pós-COVID … Eu sofri anos de abuso verbal de não-realizadores e semi-atores no projeto e uma das minhas maiores preocupações é que eles não o fizessem. a oportunidade de sair do projeto em dezembro … Só senti a obrigação moral de obtê-lo [the WireGuard port] Na linha de chegada. Portanto, você deve me perdoar se meus esforços recentes foram um pouco mornos. “

Esta aceitação responde por que um desenvolvedor qualificado e especialista produziu código ruim – mas levanta questões maiores sobre o processo e procedimentos dentro do próprio comitê central do FreeBSD.

Como tantos códigos semipadrões chegaram até agora a um grande sistema operacional de código aberto? Onde estava a revisão do código que deveria tê-lo interrompido? E por que a equipe principal do FreeBSD e o Netgate pareciam tão mais focados no fato de que o código foi subestimado do que em sua qualidade real?

Qualidade do código

O primeiro problema é se o Código Macy realmente tem grandes problemas. Este é o caso, disse Donenfeld, e delineou uma série de questões-chave:

  • Durma para amenizar as condições de corrida
  • Funções de verificação que retornam simplesmente válidas
  • Pontos fracos catastróficos da criptografia
  • Partes do protocolo wg não implementadas
  • Kernel Panic
  • Segurança excessiva
  • As instruções Printf estão profundas no código do codificador
  • Buffer transbordando “incrível”
  • Linux labirintos ← FreeBSD ifdefs

Mas Netgate argumentou que Donenfeld havia negligenciado sua avaliação negativa. E eles argumentaram que o código original de Messi não era tão ruim.

Apesar de não ter nenhum desenvolvedor de kernel na equipe, Ars foi capaz de verificar pelo menos algumas das afirmações de Donenfeld de frente, rapidamente e sem ajuda externa. Por exemplo, encontre a função de verificação retornada de forma simples – e printf Frases enterradas profundamente em loops de criptografia – elas não exigiam nada mais sofisticado do que grep.

A função de validação está vazia

Para confirmar ou negar a reivindicação da função de validação nula – que sempre “retorna verdadeiro” em vez da validação real dos dados passados ​​para ela – procuramos casos return true ou return (true) Em messi if_wg Ícone, conforme definido no FreeBSD 13.0-HEAD.

root@banshee:~/macy-freebsd-wg/sys/dev/if_wg# grep -ir 'return.*true' . | wc -l
21

Esse é um número pequeno o suficiente de devoluções para fácil revisão manual, então o usamos a seguir grep Encontre os mesmos dados, mas com três linhas de código que vêm diretamente antes e depois de cada linha return true:

root@banshee:~/macy-freebsd-wg/sys/dev/if_wg# grep -ir -A3 -B3 'return.*true' .

Entre os usos válidos return trueEm, descobrimos uma única função de verificação em branco module/module.c:

wg_allowedip_valid(const struct wg_allowedip *wip)
{

 return (true);
}

Notavelmente, esta função de validação vazia não está enterrada na parte inferior de um grande bloco de código –module.c Conforme está escrito, tem apenas 863 linhas de código no total.

Não tentamos descobrir o uso dessa funcionalidade mais, mas parece que a intenção é verificar se o pacote de origem e / ou destino pertence ao WireGuard. allowed-ips Lista, que especifica quais pacotes podem ser roteados através do túnel WireGuard especificado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *