AWS pagará desenvolvedores para verificar biblioteca padrão do Rust

A iniciativa busca abordar riscos associados ao uso de funções marcadas como “unsafe” (inseguras) na linguagem. Embora a palavra-chave “unsafe” seja essencial para operações como a interação direta com sistemas operacionais, ela permite ações que o Rust não consegue garantir como seguras. A AWS destaca que, mesmo em aplicativos que utilizam apenas código considerado seguro, há dependência da biblioteca padrão, que contém cerca de 7,5 mil funções inseguras. Nos últimos três anos, foram relatados 57 problemas de consistência e 20 vulnerabilidades classificadas como CVEs. A empresa também aponta que “a taxa de mudanças nas bibliotecas padrão é mais rápida e menos consistente”.

Para mitigar esses riscos, a AWS planeja usar ferramentas e técnicas de verificação formal para analisar partes críticas do código. Contudo, devido à ausência de uma infraestrutura robusta para verificações escaláveis no Rust e à complexidade do processo, a empresa optou por envolver a comunidade. Desenvolvedores podem participar resolvendo desafios específicos e contribuindo com verificações de segurança para a biblioteca padrão.

O projeto, apoiado pela Rust Foundation, está hospedado no GitHub, onde um fork do código do Rust e uma lista inicial de 13 desafios estão disponíveis. As soluções devem utilizar ferramentas aprovadas ou sugerir novas abordagens, desde que não alterem a lógica de execução da biblioteca padrão. As recompensas serão distribuídas por um comitê, mas os valores associados a cada desafio ainda não foram divulgados.

A lista atual de desafios inclui:

  1. Verificar métodos principais de transmutação
  2. Verificar a segurança de memória de funções intrínsecas usando ponteiros crus
  3. Verificar operações aritméticas com ponteiros crus
  4. Garantir a segurança de memória do módulo btree::node do BTreeMap
  5. Verificar funções que iteram sobre tipos de dados indutivos, como linked_list
  6. Garantir a segurança do NonNull
  7. Verificar a segurança de métodos para tipos atômicos e ReentrantLock
  8. Definir contratos para SmallSort
  9. Criar abstrações seguras para core::time::Duration
  10. Garantir a segurança de memória de String
  11. Verificar a segurança de métodos para tipos numéricos primitivos
  12. Garantir a segurança de NonZero
  13. Verificar a segurança de CStr