O primeiro envolveu um problema de segurança contra pânico na implementação MapWindows::clone do Rust. A função criou um buffer antes de inicializar totalmente seu conteúdo e, em seguida, chamou uma operação de clone fornecida pelo usuário para preenchê-lo. Se essa operação desencadeasse pânico, o mecanismo de desenrolamento do Rust poderia invocar o destruidor do buffer, que tentaria acessar a memória não inicializada. A Microsoft disse que a correção relatada evita que o buffer parcialmente inicializado seja destruído antes que a inicialização seja concluída.
Outra descoberta envolveu str::replace. Os pesquisadores descobriram que a função poderia fazer uma suposição incorreta sobre uma implementação personalizada do traço Nightly Pattern. Uma implementação personalizada poderia fornecer um byte não ASCII onde o código esperava um caractere ASCII, fazendo com que a operação de substituição produzisse dados UTF-8 inválidos. As operações subsequentes de string poderiam desencadear um comportamento indefinido, disse a Microsoft.
Bugs no nível do sistema afetam o Rust estável
A Microsoft disse que as duas primeiras categorias de fraquezas já estavam sendo estudadas em 2021 por meio do Rudra, um analisador estático desenvolvido por membros da equipe de pesquisa. A biblioteca padrão também abordou problemas de segurança contra pânico já em 2015, mas fraquezas semelhantes continuam a aparecer em suas implementações.
