{"id":23593,"date":"2025-12-02T08:00:00","date_gmt":"2025-12-02T11:00:00","guid":{"rendered":"https:\/\/www.ethicalhacker.com.br\/site\/?p=23593"},"modified":"2025-12-01T19:17:57","modified_gmt":"2025-12-01T22:17:57","slug":"s-7","status":"publish","type":"post","link":"https:\/\/www.ethicalhacker.com.br\/site\/2025\/12\/exploits\/s-7\/","title":{"rendered":"Amea\u00e7a maliciosa, dezenas de milhares de pacotes npm falsos"},"content":{"rendered":"\n<p style=\"text-align: justify;\" data-start=\"0\" data-end=\"129\"><strong>Amea\u00e7a maliciosa no ecossistema: mais de dezenas de milhares de pacotes npm falsos e o risco sist\u00eamico \u00e0 cadeia de suprimentos<\/strong><\/p>\n<p style=\"text-align: justify;\" data-start=\"131\" data-end=\"735\">A comunidade de desenvolvedores e seguran\u00e7a recebeu um alerta importante nas \u00faltimas semanas: o registro npm foi inundado por dezenas de milhares de pacotes <strong data-start=\"288\" data-end=\"305\">falsos \/ spam<\/strong>, publicados de forma coordenada ao longo de meses, em uma campanha que tem semelhan\u00e7as com um worm \u2014 organizada para poluir a base de pacotes e preparar vetores de abuso futuros. A escala e o modo de opera\u00e7\u00e3o tornam o epis\u00f3dio muito diferente de um vazamento isolado: trata-se de um problema estrutural que afeta confian\u00e7a, descoberta de depend\u00eancias e mecanismos autom\u00e1ticos de atualiza\u00e7\u00e3o.<\/p>\n<p data-start=\"131\" data-end=\"735\">\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"737\" data-end=\"772\"><strong>O que aconteceu (resumo t\u00e9cnico)<\/strong><\/p>\n<p style=\"text-align: justify;\" data-start=\"773\" data-end=\"1488\">Pesquisadores identificaram uma campanha que publicou dezenas de milhares de pacotes \u201czumbis\u201d no npm ao longo de um per\u00edodo estendido (desde 2024, segundo os levantamentos). Muitos desses pacotes tinham nomes gerados por script (p. ex. combinando termos de alimentos\/locais) e estavam organizados de modo a sobreviver sem chamar aten\u00e7\u00e3o imediata \u2014 em alguns casos contendo scripts dormentes que s\u00f3 executam payloads se acionados manualmente ou por condi\u00e7\u00f5es espec\u00edficas. Essa t\u00e9cnica cria uma enorme massa de pacotes que podem, mais tarde, ser transformados em vetores de ataque diretos (postinstall malicioso, scripts de instala\u00e7\u00e3o, ou substitui\u00e7\u00e3o por vers\u00f5es comprometidas).<\/p>\n<p data-start=\"773\" data-end=\"1488\">\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"1490\" data-end=\"1534\"><strong>Escala e descoberta \u2014 por que \u00e9 relevante<\/strong><\/p>\n<p style=\"text-align: justify;\" data-start=\"1535\" data-end=\"2071\">Dados p\u00fablicos sobre o incidente apontam n\u00fameros muito altos: a contagem inicial relatada foi superior a 43\u201346 mil pacotes, e investiga\u00e7\u00f5es complementares (com regras de detec\u00e7\u00e3o mais agressivas) sugeriram que o total pode chegar a cifras ainda maiores \u2014 dezenas de milhares, ou mais, dependendo dos crit\u00e9rios de identifica\u00e7\u00e3o. A magnitude importa porque torna invi\u00e1vel auditoria manual e amplia a chance de que projetos pequenos e pipelines CI acabem consumindo inconscientemente m\u00f3dulos polu\u00eddos.<\/p>\n<p data-start=\"1535\" data-end=\"2071\">\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"2073\" data-end=\"2139\"><strong>T\u00e9cnica observada: como esses pacotes representam risco pr\u00e1tico<\/strong><\/p>\n<ul style=\"text-align: justify;\" data-start=\"2140\" data-end=\"3256\">\n<li data-start=\"2140\" data-end=\"2571\">\n<p data-start=\"2143\" data-end=\"2571\"><strong data-start=\"2143\" data-end=\"2193\">Dorm\u00eancia com potencial de ativa\u00e7\u00e3o posterior:<\/strong> muitos pacotes n\u00e3o executavam nada nocivo imediatamente; por\u00e9m continham mecanismos (scripts, arquivos de configura\u00e7\u00e3o, arquivos YAML apontando para sistemas de recompensa\/tokens) que poderiam ser ativados posteriormente para injetar c\u00f3digo em ambientes de quem instalar o pacote. Isso transforma o problema num \u201cbanco de armas\u201d latente.<\/p>\n<\/li>\n<li data-start=\"2572\" data-end=\"2969\">\n<p data-start=\"2575\" data-end=\"2969\"><strong data-start=\"2575\" data-end=\"2635\">Ganho de confian\u00e7a artificial \/ manipula\u00e7\u00e3o de m\u00e9tricas:<\/strong> h\u00e1 ind\u00edcios de que parte da opera\u00e7\u00e3o buscava manipular mecanismos de recompensa ou m\u00e9tricas associadas a sistemas que atribuem valor \u00e0s contribui\u00e7\u00f5es open source (p.ex. refer\u00eancias a TEA\/tea.yaml), o que pode ser uma motiva\u00e7\u00e3o financeira indireta para manter e ampliar esse reposit\u00f3rio t\u00f3xico.<\/p>\n<\/li>\n<li data-start=\"2970\" data-end=\"3256\">\n<p data-start=\"2973\" data-end=\"3256\"><strong data-start=\"2973\" data-end=\"3011\">Propaga\u00e7\u00e3o por contas e automa\u00e7\u00e3o:<\/strong> a campanha usou m\u00faltiplas contas automatizadas para publicar em massa; isso imita um comportamento \u201cworm-like\u201d \u2014 a cria\u00e7\u00e3o program\u00e1tica e cont\u00ednua de pacotes dificulta a mitiga\u00e7\u00e3o apenas com remo\u00e7\u00e3o manual.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"3258\" data-end=\"3302\"><strong>Impactos pr\u00e1ticos em projetos e opera\u00e7\u00f5es<\/strong><\/p>\n<ul style=\"text-align: justify;\" data-start=\"3303\" data-end=\"4166\">\n<li data-start=\"3303\" data-end=\"3631\">\n<p data-start=\"3305\" data-end=\"3631\"><strong data-start=\"3305\" data-end=\"3357\">Risco para CI\/CD e ambientes de desenvolvimento:<\/strong> pipelines que permitem instala\u00e7\u00e3o autom\u00e1tica de depend\u00eancias (especialmente em container builds ou runners que executam scripts de instala\u00e7\u00e3o) podem ativar payloads inseridos por esses pacotes, expondo segredos, tokens e credenciais.<\/p>\n<\/li>\n<li data-start=\"3632\" data-end=\"3908\">\n<p data-start=\"3634\" data-end=\"3908\"><strong data-start=\"3634\" data-end=\"3661\">Dificuldade de triagem:<\/strong> com dezenas de milhares de pacotes \u201cru\u00eddo\u201d, ferramentas automatizadas de triagem e reputa\u00e7\u00e3o podem ser polu\u00eddas, aumentando falso-positivo\/falso-negativo e reduzindo a confian\u00e7a em m\u00e9tricas de popularidade.<\/p>\n<\/li>\n<li data-start=\"3909\" data-end=\"4166\">\n<p data-start=\"3911\" data-end=\"4166\"><strong data-start=\"3911\" data-end=\"3946\">Risco de cadeia de suprimentos:<\/strong> mesmo quando um pacote aparentemente inofensivo \u00e9 depend\u00eancia transitiva, uma altera\u00e7\u00e3o maliciosa posterior ou um postinstall malicioso pode comprometer toda a cadeia que o consome.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"4168\" data-end=\"4236\"><strong>Recomenda\u00e7\u00f5es t\u00e1ticas para equipes de desenvolvimento e seguran\u00e7a<\/strong><\/p>\n<p style=\"text-align: justify;\" data-start=\"4237\" data-end=\"4335\">Aqui v\u00e3o medidas concretas e imediatas \u2014 priorizadas por custo\/benef\u00edcio \u2014 para reduzir exposi\u00e7\u00e3o:<\/p>\n<ul style=\"text-align: justify;\" data-start=\"4337\" data-end=\"5751\">\n<li data-start=\"4337\" data-end=\"4616\">\n<p data-start=\"4340\" data-end=\"4616\"><strong data-start=\"4340\" data-end=\"4383\">Bloquear\/filtrar por pol\u00edtica em CI\/CD:<\/strong> desabilitar scripts <code data-start=\"4404\" data-end=\"4417\">postinstall<\/code> nos runners (ou executar builds em modo que ignore lifecycle scripts), e usar pol\u00edticas que limitem os registros\/escopos de onde pacotes podem ser instalados.<\/p>\n<\/li>\n<li data-start=\"4617\" data-end=\"4890\">\n<p data-start=\"4620\" data-end=\"4890\"><strong data-start=\"4620\" data-end=\"4694\">Lista de permiss\u00f5es (allowlist) e revis\u00e3o de depend\u00eancias transientes:<\/strong> para builds cr\u00edticos, permitir apenas pacotes explicitamente auditados; evitar a resolu\u00e7\u00e3o autom\u00e1tica de depend\u00eancias sem revis\u00e3o em imagens de produ\u00e7\u00e3o.<\/p>\n<\/li>\n<li data-start=\"4891\" data-end=\"5160\">\n<p data-start=\"4894\" data-end=\"5160\"><strong data-start=\"4894\" data-end=\"4953\">Ferramentas de verifica\u00e7\u00e3o de integridade e assinatura:<\/strong> adotar verifica\u00e7\u00f5es de assinatura de pacotes (quando dispon\u00edveis), usar mecanismos de SBOM para mapear depend\u00eancias e revisar regularmente atualiza\u00e7\u00f5es autom\u00e1ticas.<\/p>\n<\/li>\n<li data-start=\"5161\" data-end=\"5445\">\n<p data-start=\"5164\" data-end=\"5445\"><strong data-start=\"5164\" data-end=\"5194\">Rotina de resposta r\u00e1pida:<\/strong> se um pacote duvidoso for detectado em produ\u00e7\u00e3o, revogar tokens\/credenciais usados por aquele ambiente, reconstruir artefatos a partir de fontes confi\u00e1veis e isolar runners comprometidos para an\u00e1lise forense.<\/p>\n<\/li>\n<li data-start=\"5446\" data-end=\"5751\">\n<p data-start=\"5449\" data-end=\"5751\"><strong data-start=\"5449\" data-end=\"5488\">Educa\u00e7\u00e3o e processos de publica\u00e7\u00e3o:<\/strong> provedores de pacotes e comunidades devem fortalecer controles de conta (MFA, monitoramento de publica\u00e7\u00e3o an\u00f4mala) e implementar verifica\u00e7\u00f5es automatizadas para identificar enxame de pacotes com padr\u00f5es gerados por script.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"5753\" data-end=\"5798\"><strong>Recomenda\u00e7\u00f5es estrat\u00e9gicas (a m\u00e9dio prazo)<\/strong><\/p>\n<ul style=\"text-align: justify;\" data-start=\"5799\" data-end=\"6603\">\n<li data-start=\"5799\" data-end=\"6091\">\n<p data-start=\"5801\" data-end=\"6091\"><strong data-start=\"5801\" data-end=\"5846\">Colabora\u00e7\u00e3o entre players do ecossistema:<\/strong> registries, provedores de CI, grandes reposit\u00f3rios e equipes de seguran\u00e7a precisam trocar sinais (IOC, regras de detec\u00e7\u00e3o) e coordenar remo\u00e7\u00e3o e mitiga\u00e7\u00e3o \u2014 o desafio \u00e9 global e exigir\u00e1 a\u00e7\u00f5es coletivas.<\/p>\n<\/li>\n<li data-start=\"6092\" data-end=\"6322\">\n<p data-start=\"6094\" data-end=\"6322\"><strong data-start=\"6094\" data-end=\"6127\">Melhorar sinais de reputa\u00e7\u00e3o:<\/strong> m\u00e9tricas de download\/estrela n\u00e3o s\u00e3o suficientes; enriquecimento com sinais de proveni\u00eancia, assinaturas e telemetria de integridade deveria ser padr\u00e3o.<\/p>\n<\/li>\n<li data-start=\"6323\" data-end=\"6603\">\n<p data-start=\"6325\" data-end=\"6603\"><strong data-start=\"6325\" data-end=\"6370\">Desenvolvimento de automa\u00e7\u00f5es defensivas:<\/strong> detec\u00e7\u00e3o de padr\u00f5es de nomea\u00e7\u00e3o em massa, scripts dormentes em pacotes e comportamento an\u00f4malo em instala\u00e7\u00f5es automatizadas devem alimentar regras de bloqueio autom\u00e1tico em pipelines cr\u00edticos.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"6605\" data-end=\"6659\"><strong>Cen\u00e1rios de explora\u00e7\u00e3o que merecem aten\u00e7\u00e3o imediata<\/strong><\/p>\n<ul style=\"text-align: justify;\" data-start=\"6660\" data-end=\"7147\">\n<li data-start=\"6660\" data-end=\"6891\">\n<p data-start=\"6662\" data-end=\"6891\"><strong data-start=\"6662\" data-end=\"6721\">Trojaniza\u00e7\u00e3o de um pacote com downloads significativos:<\/strong> se um dos milhares de pacotes de baixo n\u00edvel for substitu\u00eddo ou um maintainer for comprometido, o impacto pode ser exponencial.<\/p>\n<\/li>\n<li data-start=\"6892\" data-end=\"7147\">\n<p data-start=\"6894\" data-end=\"7147\"><strong data-start=\"6894\" data-end=\"6940\">Uso de pacotes para colheita de tokens CI:<\/strong> postinstall que coleta tokens\/npm\/GitHub\/CI e os exfiltra para infraestrutura controlada pelo atacante \u2014 j\u00e1 observado em incidentes anteriores e poss\u00edvel aqui tamb\u00e9m.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\" data-start=\"7154\" data-end=\"7166\"><strong>Conclus\u00e3o<\/strong><\/p>\n<p style=\"text-align: justify;\" data-start=\"7168\" data-end=\"7566\">O epis\u00f3dio de fraude em larga escala no npm \u2014 a publica\u00e7\u00e3o massiva de pacotes falsos e dormentes \u2014 \u00e9 um sinal de alerta: a cadeia de suprimentos de software pode ser polu\u00edda em escala industrial e mantida como um \u201cestoque\u201d de vetores que podem ser ativados quando oportuno. A repercuss\u00e3o vai al\u00e9m de um problema operacional; corr\u00f3i a confian\u00e7a nas ferramentas que sustentam desenvolvimento moderno.<\/p>\n<p style=\"text-align: justify;\" data-start=\"7568\" data-end=\"8088\">A resposta eficaz exige tr\u00eas frentes simult\u00e2neas: (1) <strong data-start=\"7622\" data-end=\"7652\">mitiga\u00e7\u00e3o t\u00e9cnica imediata<\/strong> nos pipelines (restri\u00e7\u00e3o de scripts, allowlists, isolamento de builds), (2) <strong data-start=\"7729\" data-end=\"7750\">a\u00e7\u00e3o colaborativa<\/strong> entre registries, provedores CI e empresas de seguran\u00e7a para limpeza e compartilhamento de IOCs, e (3) <strong data-start=\"7854\" data-end=\"7881\">evolu\u00e7\u00e3o do ecossistema<\/strong> \u2014 ado\u00e7\u00e3o de assinaturas, SBOMs e m\u00e9tricas de proveni\u00eancia robustas. Somente com essas camadas ser\u00e1 poss\u00edvel transformar eventos como esse de \u201csurpresas desestruturantes\u201d em incidentes manej\u00e1veis e contidos.<\/p>\n<p data-start=\"7568\" data-end=\"8088\">\u00a0<\/p>\n<p data-start=\"8095\" data-end=\"8109\"><strong>Refer\u00eancia Bibliogr\u00e1fica<\/strong><\/p>\n<ul data-start=\"8111\" data-end=\"8606\">\n<li data-start=\"8111\" data-end=\"8334\">\n<p data-start=\"8113\" data-end=\"8334\"><strong>The Hacker News<\/strong> \u2014 \u201cOver 46,000 Fake npm Packages Flood Registry in Worm-Like Spam Attack\u201d, 13 de novembro de 2025. Dispon\u00edvel em: fonte do relat\u00f3rio sobre a campanha e sua escala. <span class=\"\" data-state=\"closed\"><span class=\"ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]\" data-testid=\"webpage-citation-pill\"><a class=\"flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!\" href=\"https:\/\/thehackernews.com\/2025\/11\/over-46000-fake-npm-packages-flood.html?_m=3n.009a.3824.is0ao0d70p.2v5a&amp;m=1\" target=\"_blank\" rel=\"noopener\"><span class=\"relative start-0 bottom-0 flex h-full w-full items-center\"><span class=\"flex h-4 w-full items-center justify-between overflow-hidden\"><span class=\"max-w-[15ch] grow truncate overflow-hidden text-center\">The Hacker News<\/span><\/span><\/span><\/a><\/span><\/span><\/p>\n<\/li>\n<li data-start=\"8335\" data-end=\"8606\">\n<p data-start=\"8337\" data-end=\"8606\"><strong>Snyk \/ Endor Labs<\/strong> \/ relat\u00f3rios t\u00e9cnicos sobre incidentes na cadeia de suprimentos npm (an\u00e1lises e lista de pacotes afetados \u2014 Dispon\u00edvel em: <a href=\"https:\/\/snyk.io\/pt-BR\/blog\/snyk-200-malicious-npm-packages-cobalt-strike-dependency-confusion-attacks\/\" target=\"_blank\" rel=\"noopener\">https:\/\/snyk.io\/pt-BR\/blog\/snyk-200-malicious-npm-packages-cobalt-strike-dependency-confusion-attacks\/<\/a><\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Amea\u00e7a maliciosa no ecossistema: mais de dezenas de milhares de pacotes npm falsos e o risco sist\u00eamico \u00e0 cadeia de suprimentos A comunidade de desenvolvedores e seguran\u00e7a recebeu um alerta importante nas \u00faltimas semanas: o registro npm foi inundado por dezenas de milhares de pacotes falsos \/ spam, publicados de forma coordenada ao longo de [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":23594,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,100,21,105],"tags":[],"class_list":["post-23593","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basico","category-diversos","category-exploits","category-noticias"],"_links":{"self":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/23593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/comments?post=23593"}],"version-history":[{"count":2,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/23593\/revisions"}],"predecessor-version":[{"id":23597,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/23593\/revisions\/23597"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media\/23594"}],"wp:attachment":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media?parent=23593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/categories?post=23593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/tags?post=23593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}