Skip to main content

O Snyk consegue encontrar algoritmos criptográficos fracos? Adeus, MD5

Escrito por
blog feature snyk code green

25 de fevereiro de 2025

0 minutos de leitura

Usar criptografia forte é essencial para proteger dados e garantir a segurança de aplicações, inclusive em tarefas como o hash de senhas (que, tecnicamente, não é criptografia clássica com finalidade de cifragem). No entanto, ainda pode haver código legado em produção que usa algoritmos criptográficos fracos e desatualizados, que passaram despercebidos. Como o Snyk Code pode ajudar você a encontrar essas aplicações vulneráveis?

Os perigos dos algoritmos criptográficos fracos

Algoritmos fracos e desatualizados, seja para criptografia ou hash, representam sérios riscos de segurança e podem expor informações confidenciais a invasores. Confiar em implementações inadequadas cria uma falsa sensação de segurança e deixa os sistemas vulneráveis. É essencial entender as limitações dos algoritmos antigos e adotar práticas criptográficas modernas e seguras.

Vários algoritmos criptográficos são considerados inseguros e devem ser evitados. O MD5, por exemplo, está criptograficamente comprometido e não serve para nenhuma aplicação de segurança, especialmente para gerar hashes de senhas. Como é fácil encontrar colisões, entradas diferentes podem produzir o mesmo valor de hash. Isso permite que invasores descubram a senha original ou criem uma falsa que corresponda ao hash armazenado. Outros exemplos de algoritmos fracos são DES e RC4, ambos com vulnerabilidades conhecidas e que não devem mais ser usados.

Algoritmo MD5 fraco em Java

Veja esta aplicação Java, que usa MD5 para gerar hashes das senhas dos usuários:

    @PostMapping("/login")
    public String loginUser(@RequestParam String username, @RequestParam String password) {
        String hashedPassword = userDatabase.get(username);
        if (hashedPassword != null && hashedPassword.equals(hashPassword(password))) {
            return "Login successful";
        }
        return "Invalid username or password";
    }

    private String hashPassword(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
            byte[] digest = md.digest();
            return DatatypeConverter.printHexBinary(digest).toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            return "Error: Hashing algorithm not found";
        }
    }

Observação: consulte o código-fonte completo no GitHub.

Você provavelmente já sabe que não deve usar MD5 para gerar hashes de senhas. Mas o que acontece quando você precisa manter muitas aplicações e navegar rapidamente por centenas de milhares de linhas de código em vários repositórios?

Ao conectar o Snyk aos seus repositórios de código (ou integrá-lo de outra forma), você pode analisar rapidamente o código vulnerável, esteja ele esquecido em uma aplicação legada ou tenha sido gerado com falhas por ferramentas de IA generativa e outros assistentes de código com IA.

O Snyk encontra o algoritmo MD5 fraco e mostra o caminho da chamada da origem ao destino no seu código:

O Snyk Code encontra o algoritmo MD5 fraco no código Java.

Como corrigir o algoritmo MD5 fraco em Java?

O Snyk complementa as descobertas de segurança e, além de detectar o código vulnerável, também apresenta uma análise da correção. O exemplo a seguir mostra como a API MessageDigest foi corrigida em um projeto de código aberto (o owasp security logging, neste caso) e como o algoritmo de hash desatualizado SHA-1 foi substituído por uma versão mais atual: SHA-256:

Captura de tela de um exemplo de análise de correção do Snyk Code. O Snyk Code fornece detalhes, práticas recomendadas de prevenção e exemplos de correções.

O Snyk também apresenta práticas recomendadas para usar algoritmos robustos em hashing e criptografia, além de explicar os riscos de armazenar informações confidenciais em texto simples.

Recomendações de segurança e práticas recomendadas para algoritmos

Escolha os algoritmos adequados para cada finalidade. Para gerar hashes de senhas, use um algoritmo criptográfico seguro, que proteja contra ataques de força bruta e tenha desempenho adequado para aplicações do mundo real. Alguns dos principais exemplos são o padrão de fato do setor há décadas: Bcrypt. Outras opções incluem PBKDF2 e o mais conhecido Argon2.

Consulte as práticas recomendadas de segurança para criptografia, como os recursos da OWASP.

Por fim, comece a usar o Snyk (é grátis!) e some pontos em segurança ao encontrar código vulnerável, dependências desatualizadas, criptografia fraca e outros problemas de segurança.

Ferramenta gratuita online para verificar código

Proteja seu código antes do próximo commit.

Leia mais

blog feature snyk container custom base recommendations
Blog

Conheça o Evo Agentic AppSec: segurança que acompanha o ritmo do desenvolvimento com IA

O desenvolvimento impulsionado por IA está avançando mais rápido do que os fluxos de trabalho de segurança tradicionais. O AppSec agentivo da Snyk usa agentes de segurança para encontrar, corrigir e verificar vulnerabilidades continuamente, enquanto as pessoas definem os critérios.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

illustration hero ai
Blog

O furacão da IA chegou

A IA está acelerando tanto a criação de software quanto os ataques cibernéticos. As lideranças devem proteger agentes e código desde o início, aplicar controles em tempo de execução e validar as defesas de forma independente.