Loader dinâmico , que faz parte do OpenBSD, pode em determinadas condições -deixar a variável de ambiente LD_LIBRARY_PATH e assim permitir o carregamento de código externo no contexto de um processo executado com privilégios elevados. Os patches para corrigir a vulnerabilidade estão disponíveis para os lançamentos e . Patches binários () para as plataformas amd64, i386 e arm64 já foram lançados e devem estar disponíveis para download no momento da publicação desta notícia.
A essência do problema: durante a execução, o ld.so primeiro extrai o valor da variável LD_LIBRARY_PATH do ambiente, usando a função _dl_split_path() para transformá-lo em um array de strings — caminhos para diretórios. Se mais tarde descobrir-se que o processo atual é executado como um aplicativo SUID/SGID, o array criado e, de fato, a variável LD_LIBRARY_PATH são limpos. Além disso, se durante a execução _dl_split_path() encontrar falta de memória (o que é raro devido a uma restrição explícita no tamanho das variáveis de ambiente de 256 KB, mas teoricamente possível), a variável _dl_libpath receberá o valor NULL, e a verificação subsequente desse valor fará com que a chamada _dl_unsetenv(
LD_LIBRARY_PATH" seja pulada. Qualys várias outras
questões reveladas anteriormente. Os pesquisadores de segurança que identificaram a vulnerabilidade notaram a rapidez na resolução do problema: um patch foi preparado e as atualizações lançadas dentro de três horas após o aviso do projeto OpenBSD. CVE-2019-19726 incluindo um protótipo de exploit que funciona no OpenBSD 6.6, 6.5, 6.2 e 6.1 em arquiteturas
amd64 e i386 (o exploit pode ser adaptado para outras arquiteturas).
O problema é explorável na instalação padrão e permite que um usuário local não privilegiado execute código com permissões de root através da substituição de biblioteca ao iniciar utilitários suid como chpass ou passwd. Para criar as condições necessárias para a exploração da falta de memória, utiliza-se a restrição RLIMIT_DATA através de setrlimit.
Fonte: opennet.ru
