RUSTFORGE — RELATORIO DE AUDITORIA

Ecossistema Rust de 10 Repos — Resultados Completos
Escopo: 10 repos Rust, 365 arquivos fonte Foco: Seguranca unwrap/panic, auditoria unsafe, integridade hash-chain Ferramenta: Scanner estatico proprio (15 testes, 4 bugs encontrados) Data: Fevereiro 2026
Versao resumida. Relatorio completo em ingles →
Amostra Metodologica — Este relatorio documenta uma auditoria interna do nosso proprio ecossistema Rust, publicado para demonstrar nossa metodologia e rigor analitico. Auditorias de clientes sao realizadas sob NDA.
10
Repos Auditados
365
Arquivos Fonte
1,025+
Testes Verificados
140
Unwraps Prod Classificados
8
Fixes Entregues

Resumo Executivo

Auditamos 10 repositorios Rust abrangendo inferencia AI, agent runtimes, autenticacao, busca, servicos governamentais, aprendizado etico e emulacao — 365 arquivos fonte com 1,025+ testes. Cada .unwrap() e .expect() em producao foi classificado manualmente: 140 no total, todos invariantes algoritmicos ou padrao CLI-startup. Encontramos e corrigimos 8 problemas acionaveis: 5 riscos de panic por NaN, 1 crash na verificacao de hash-chain, 1 propagacao de erro nao controlada, e 1 unwrap ambiguo. Resultado final: 0 riscos P0, 0 unwraps acionaveis restantes.

Achados de Risco

Cada achado foi detectado, classificado, corrigido e verificado com testes.

RF-2026-001Alto
Panic por NaN em Ordenamento f32 — 5 Locais, 2 Repos
O Que
partial_cmp().unwrap() em valores f32 gera panic quando um operando e NaN. Encontrado em sampling de tokens LLM e scoring de confianca.
Onde
llm-sampler/src/lib.rs (192, 204, 225), llm-models/src/llama.rs (880), b3-core/detectors.rs (330)
Evidencia
// Antes:
.max_by(|(_, a), (_, b)| a.partial_cmp(b).unwrap())
// Depois:
.max_by(|(_, a), (_, b)| a.total_cmp(b))
CORRIGIDO5 locais: partial_cmp().unwrap()total_cmp(). 88 + 88 testes passam.
RF-2026-002Alto
Crash na Verificacao de Hash-Chain com Input Malformado
O Que
serde_json::from_str(&line).unwrap() em verify(). Uma linha malformada causaria panic em vez de retornar falha.
Onde
logstore/src/lib.rs — linha 158
Evidencia
// Antes:
let v: serde_json::Value = serde_json::from_str(&line).unwrap();
// Depois:
let v: serde_json::Value = match serde_json::from_str(&line) {
    Ok(v) => v,
    Err(_) => return Ok(false),
};
CORRIGIDOMatch explicito retorna Ok(false). 41 testes passam.
RF-2026-003Medio
Propagacao de Erro Nao Controlada no Agent Runtime
O Que
submit(request).unwrap() em rota de execucao. Canal fechado causaria panic.
Onde
runtime.rs — linha 243
Evidencia
submit(request).unwrap();  // →  submit(request)?;
CORRIGIDO.unwrap()? com InterventionError. 179 testes passam.
RF-2026-004Medio
10 Casts Unsafe de Ponteiros Sem Validacao
O Que
Casts de ponteiros brutos em quantizacao LLM e tensores sem validacao de alinhamento.
Onde
llm-quant/ (5), tensor.rs (3), GGUF (2)
Evidencia
let ptr = bytes.as_ptr() as *const f16;
unsafe { std::slice::from_raw_parts(ptr, count) };
// →
bytemuck::try_cast_slice(bytes)?;
CORRIGIDO10 casts → bytemuck. 9 unsafe restantes documentados (Metal FFI, Send/Sync, mmap).

Metodologia do Scanner

Scanner de analise estatica proprio. 4 bugs encontrados em si mesmo.

SCANNERFerramenta
4 Bugs do Scanner Encontrados e Corrigidos
BUG-1
Indirection de testes nao seguida. +27 falsos positivos. Fix: collect_test_module_paths().
BUG-2
Unsafe em strings/comentarios. Fix: count_real_unsafe() com stripping.
BUG-3
Parser::expect() colisao de nomes. +16 falsos positivos. Fix: exigir string literal.
BUG-4
Doc comments com unwrap contados como prod. +18 falsos positivos. Fix: strip_doc_comments().
15 TESTESScanner v3 com suite de regressao completa.

Observacoes da Analise

  1. Fundamentos solidos. Zero panic!/todo!/unimplemented! em producao nos 10 repos.
  2. partial_cmp em floats e ponto cego sistemico. 3/10 repos. total_cmp deveria ser padrao.
  3. Biblioteca vs CLI. 34/40 unwraps em agent-runtime sao CLI expect correto. 1 em verify() era risco real.
  4. Tooling deve se auditar. 4 bugs no proprio scanner durante 10 repos.

Metodologia: Classificacao de Unwraps

Escaneados: 365 arquivos Classificados: 140 unwraps prod Resultado: 0 acionaveis restantes

Scoreboard por Projeto

apex-learning

10
0 unwraps. 0 unsafe. 106 testes. DDD, 7 crates.

gameboy

9.5
0 unwraps. 5 unreachable! documentados. 28 testes.

rcr

9.0
4 unwraps invariantes. 330 testes.

nccr

9.0
4 unwraps (UTF-8). 5 unreachable!. 68 testes.

estado-transparente

8.5
4 unwraps (chrono). 45 testes. Portal governamental.

llm-runtime

8.0
10 unwraps pos-fix. 9 unsafe documentados. 88 testes.
4 CORRIGIDOS

agent-core

8.0
14 unwraps pos-fix. 41 testes.
1 CORRIGIDO

auth-rust

7.5
16 unwraps (7 chrono + 9 startup). 29 testes.

agent-runtime

7.5
40 unwraps pos-fix (34 CLI). 179 testes.
2 CORRIGIDOS

b3-core

7.0
48 unwraps (30 RwLock + 18 Regex). 88 testes.
1 CORRIGIDO

Padroes Cross-Projeto

PadraoReposQtdEstado
partial_cmp().unwrap()3/105CORRIGIDO
CLI .expect() em main3/1044SEGURO
RwLock poison1/1030INVARIANTE
Regex::new em Lazy2/1021INVARIANTE
unreachable!() documentado3/1011DOCUMENTADO
unsafe com SAFETY1/109DOCUMENTADO
panic!/todo! em prod0/100PASS

Quer a mesma profundidade
no seu codebase Rust?

Cada unwrap classificado. Cada unsafe documentado. Cada fix verificado com testes.
Pagamento antecipado via Stripe. Sem achados acionaveis? Reembolso completo.

Iniciar Auditoria — a partir de $1,800 audit@newcool.io

Pagamento antecipado. Sem achados acionaveis, reembolso completo.