cargo-fuzz
por trailofbitscargo-fuzz é uma skill de fuzzing para Rust/Cargo, usada para criar harnesses com libFuzzer, executar com suporte de sanitizers e encontrar crashes em código de parser, unsafe e tratamento de entrada. Use este guia de cargo-fuzz quando precisar de orientação prática de instalação e uso para auditoria de segurança e testes de regressão em projetos baseados em Cargo.
Esta skill recebe 78/100, o que a torna uma boa candidata para o diretório: é específica o suficiente para ativar corretamente e traz orientação real de fluxo de trabalho, embora não conte com grande apoio de arquivos complementares. Quem quer fazer fuzzing em projetos Rust com Cargo deve conseguir decidir sobre a instalação e começar com menos adivinhação do que com um prompt genérico.
- Delimitada de forma clara para fuzzing em Rust baseado em Cargo com libFuzzer, facilitando a ativação pelo agente na tarefa certa.
- Inclui passos práticos de configuração e execução (`cargo fuzz init`, edit harness, `cargo +nightly fuzz run ...`) que reduzem a ambiguidade na execução.
- Traz orientação útil de decisão sobre quando escolher cargo-fuzz em vez de AFL++ ou LibFla, ajudando o usuário a avaliar o encaixe antes de instalar.
- Depende inteiramente de um único SKILL.md, sem scripts de apoio, referências ou metadados, então a adoção fica condicionada ao próprio documento.
- A descrição é muito curta e o repositório oferece poucas restrições operacionais ou orientações para casos-limite, o que pode deixar alguns detalhes de execução para inferência do usuário.
Visão geral da skill cargo-fuzz
cargo-fuzz é a skill de fuzzing para Rust/Cargo para equipes que querem uma forma prática de criar harnesses baseados em libFuzzer, executá-los com as flags de compilação corretas e encontrar crashes em código de aplicação ou em fronteiras unsafe. Ela é ideal para mantenedores, engenheiros de segurança e desenvolvedores Rust que precisam de cargo-fuzz para trabalho de Security Audit, caça a regressões ou fortalecimento pré-release.
O principal ponto de decisão é o encaixe: se seu código já usa Cargo e você quer um fluxo de fuzzing com pouca fricção e suporte a sanitizers, cargo-fuzz costuma ser o caminho mais curto. Se você precisa de alvos fora do ecossistema Cargo, orquestração personalizada ou uma configuração mais voltada a pesquisa, esta skill provavelmente não é o melhor ponto de partida.
Para que cargo-fuzz funciona bem
Use cargo-fuzz quando você precisa de configuração rápida, harnesses reproduzíveis e um fluxo padrão de Rust em vez de juntar libFuzzer manualmente. Ele ajuda você a focar em entradas de teste e invariantes, não na engrenagem da toolchain.
Onde cargo-fuzz entra no trabalho de segurança
Para cargo-fuzz para Security Audit, o valor está em expor bugs de parsing, panics, problemas de memória em código unsafe e erros lógicos em torno de entrada não confiável. Ele é especialmente útil quando você consegue definir uma fronteira estreita de função que recebe bytes e nunca deveria causar crash.
Quando cargo-fuzz não é a melhor escolha
Evite cargo-fuzz se o alvo não for baseado em Cargo, se você precisar primeiro de infraestrutura de fuzzing distribuído ou se suas entradas não forem fáceis de reduzir a uma fatia de bytes e a um harness determinístico. Nesses casos, um prompt genérico ou outro fuzzer pode se encaixar melhor.
Como usar a skill cargo-fuzz
Instale e confirme a toolchain esperada
Use o caminho de instalação do cargo-fuzz descrito no contexto da skill e, em seguida, confirme que você tem Rust via rustup e acesso à toolchain nightly. A restrição importante é que cargo-fuzz depende de comportamento disponível só no nightly; um ambiente apenas estável vai travar você logo no início.
Transforme um objetivo vago em um prompt útil
Dê à skill um alvo concreto, a função ou fronteira do parser, o formato de entrada e a falha que importa para você. Um bom prompt seria: “Crie um harness de cargo-fuzz para mycrate::parse_packet, foque em campos de comprimento malformados e em tratamento sem panic, e assuma que o projeto já usa serde e bytes.” Isso é muito melhor do que “faça fuzz na minha app Rust”.
Leia estes arquivos primeiro
Comece por SKILL.md e depois examine README.md, Cargo.toml e o diretório gerado fuzz/, se ele existir. Para uso de cargo-fuzz, os arquivos mais importantes são o harness em fuzz/fuzz_targets/, a configuração do workspace de fuzzing e qualquer caminho de código que defina entrada aceita e tratamento de erros.
Use um fluxo enxuto para obter resultados melhores
Comece com uma função alvo, um harness e um único invariante claro, como “não pode panicar”, “deve rejeitar frames inválidos com segurança” ou “deve fazer round-trip de entrada válida”. Depois rode o fuzzer, inspecione o primeiro crash, minimize o reproduzível e só então amplie para novos alvos depois que o primeiro caminho estiver estável.
FAQ da skill cargo-fuzz
Preciso já ter um projeto Rust?
Sim. cargo-fuzz foi feito para repositórios Rust baseados em Cargo, então não é uma boa opção para projetos sem workspace Rust ou para código que não possa ser chamado a partir de um harness em Rust.
cargo-fuzz é só para testes de segurança?
Não, mas segurança é o motivo mais comum para usá-lo. Você também pode usar cargo-fuzz para fortalecer parsers, validar premissas e encontrar regressões em código que processa entradas não confiáveis ou complexas.
Qual é a diferença entre cargo-fuzz e um prompt genérico?
Um prompt genérico pode descrever fuzzing, mas cargo-fuzz entrega um fluxo de trabalho concreto em Rust: como montar o harness, onde os arquivos gerados ficam e quais restrições de toolchain importam. Isso reduz a incerteza quando você precisa de algo que realmente execute.
cargo-fuzz é amigável para iniciantes?
Sim, se você já conhece o caminho de código em Rust que quer testar. Em geral, a parte mais difícil não é a ferramenta, mas escolher uma função alvo boa e escrever um harness que isole um comportamento por vez.
Como melhorar a skill cargo-fuzz
Dê à skill uma fronteira de alvo melhor
Os melhores resultados com cargo-fuzz vêm de uma única API pública, parser, decoder ou transição de estado com uma entrada clara orientada a bytes. Se você entregar a ela uma aplicação inteira sem fronteira definida, o harness fica mais barulhento e os resultados mais difíceis de reproduzir.
Adicione invariantes e regras de falha desde o início
Diga à skill o que conta como bug: panic, hang, acesso fora dos limites, estado inválido ou mutação inesperada. Para cargo-fuzz para Security Audit, isso importa porque a mesma entrada pode ser apenas uma rejeição segura ou um problema real, dependendo do contrato que você definir.
Espere iterar depois da primeira execução
A primeira saída normalmente é um harness inicial, não o definitivo. Melhore-o removendo setup irrelevante, adicionando sementes de corpus que reflitam tráfego real e estreitando o alvo até que os crashes sejam significativos, e não apenas falhas genéricas de parser.
Use evidências do repositório, não suposições
Se o repo já tiver exemplos, testes existentes, feature flags ou pontos quentes de código unsafe, leve isso para o prompt. A saída da skill cargo-fuzz melhora quando você aponta os arquivos, funções ou caminhos de erro exatos que importam, em vez de pedir que ela deduza tudo só pelo nome do crate.
