Vulnerabilidade no ld.so OpenBSD

Carregador dinâmico ld.so, incluído no OpenBSD, pode, sob certas condições, SUID/SGID- os aplicativos deixam a variável de ambiente LD_LIBRARY_PATH e assim permitem que código de terceiros seja carregado no contexto de um processo executado com privilégios elevados. Patches que corrigem a vulnerabilidade estão disponíveis para lançamentos 6.5 и 6.6. Patches binários (syspatch) para plataformas amd64, i386 e arm64 já estão em produção e deverão estar disponíveis para download no momento da publicação desta notícia.

A essência do problema: durante a operação, ld.so primeiro extrai o valor da variável LD_LIBRARY_PATH do ambiente e, usando a função _dl_split_path(), o transforma em um array de strings - caminhos para diretórios. Se posteriormente for descoberto que o processo atual foi iniciado por um aplicativo SUID/SGID, o array criado e, de fato, a variável LD_LIBRARY_PATH serão limpos. Ao mesmo tempo, se _dl_split_path() ficar sem memória (o que é difícil devido ao limite explícito de 256 kB no tamanho das variáveis ​​de ambiente, mas teoricamente possível), então a variável _dl_libpath receberá o valor NULL, e a verificação subsequente de o valor desta variável forçará a ignorar a chamada para _dl_unsetenv("LD_LIBRARY_PATH").

Vulnerabilidade encontrada por especialistas Qualy's, assim como vários divulgados anteriormente problemas. Os pesquisadores de segurança que identificaram a vulnerabilidade notaram a rapidez com que o problema foi resolvido: um patch foi preparado e as atualizações foram lançadas três horas após o projeto OpenBSD receber a notificação.

Adição: O problema recebeu um número CVE-2019-19726. Feito na lista de discussão oss-security anúncio oficial, incluindo um protótipo de exploração rodando nas arquiteturas OpenBSD 6.6, 6.5, 6.2 e 6.1
amd64 e i386 (o exploit pode ser adaptado para outras arquiteturas).
O problema pode ser explorado na instalação padrão e permite que um usuário local sem privilégios execute código como root por meio de substituição de biblioteca ao executar os utilitários chpass ou passwd suid. Para criar as condições de pouca memória necessárias para a operação, defina o limite RLIMIT_DATA por meio de setrlimit.

Fonte: opennet.ru

Adicionar um comentário