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:
- Verificar métodos principais de transmutação
- Verificar a segurança de memória de funções intrínsecas usando ponteiros crus
- Verificar operações aritméticas com ponteiros crus
- Garantir a segurança de memória do módulo
btree::node
doBTreeMap
- Verificar funções que iteram sobre tipos de dados indutivos, como
linked_list
- Garantir a segurança do
NonNull
- Verificar a segurança de métodos para tipos atômicos e
ReentrantLock
- Definir contratos para
SmallSort
- Criar abstrações seguras para
core::time::Duration
- Garantir a segurança de memória de
String
- Verificar a segurança de métodos para tipos numéricos primitivos
- Garantir a segurança de
NonZero
- Verificar a segurança de
CStr