{"id":16822,"date":"2026-03-26T09:45:44","date_gmt":"2026-03-26T12:45:44","guid":{"rendered":"https:\/\/fenati.org.br\/?p=16822"},"modified":"2026-03-26T14:17:43","modified_gmt":"2026-03-26T17:17:43","slug":"ataque-javascript-icp-derrubada-autoridades","status":"publish","type":"post","link":"https:\/\/fenati.org.br\/en\/ataque-javascript-icp-derrubada-autoridades\/","title":{"rendered":"Ataque em reposit\u00f3rio JavaScript usa tecnologia ICP para evitar derrubada por autoridades"},"content":{"rendered":"<p><strong>JavaScript &#8211;<\/strong> Pesquisadores de seguran\u00e7a acenderam o sinal de alerta ap\u00f3s detectarem uma onda massiva de pacotes maliciosos no npm, o maior reposit\u00f3rio de bibliotecas <a href=\"https:\/\/pt.wikipedia.org\/wiki\/JavaScript\" target=\"_blank\" rel=\"noopener nofollow\">JavaScript<\/a> do mundo. Em uma a\u00e7\u00e3o coordenada, o grupo criminoso TeamPCP comprometeu 46 pacotes em menos de uma hora, sendo que 28 deles foram infectados em um intervalo de apenas 60 segundos.<\/p>\n<p>O ataque, batizado de CanisterWorm, introduz uma t\u00e9cnica inovadora: a utiliza\u00e7\u00e3o de um &#8220;canister&#8221; na blockchain ICP (Internet Computer) como servidor de controle. Por ser uma rede descentralizada, a infraestrutura do malware torna-se virtualmente imune a tentativas de derrubada por autoridades ou bloqueios de provedores de internet.<\/p>\n<p><a href=\"https:\/\/fenati.org.br\/en\/china-testa-bolhas-gigantes-suavizar-obras-urbanas\/\" target=\"_blank\" rel=\"noopener\"><strong>LEIA: China testa \u2018bolhas\u2019 gigantes para reduzir impactos de obras urbanas<\/strong><\/a><\/p>\n<p><strong>Escopo do Ataque<\/strong><\/p>\n<p>A ofensiva focou inicialmente em organiza\u00e7\u00f5es espec\u00edficas, comprometendo namespaces (prefixos que agrupam pacotes) inteiros:<br \/>\n\u2022 @EmilGroup: 28 pacotes infectados em menos de um minuto.<br \/>\n\u2022 @opengov: 16 pacotes comprometidos.<br \/>\n\u2022 Pacotes individuais: @teale.io\/eslint-config, @airtm\/uuid-base32 e @pypestream\/floating-ui-dom.<\/p>\n<p><strong>Mecanismo de Infec\u00e7\u00e3o e Persist\u00eancia<\/strong><\/p>\n<p>O v\u00edrus utiliza o postinstall hook, um script leg\u00edtimo do npm que roda automaticamente ap\u00f3s a instala\u00e7\u00e3o de um pacote. Enquanto o terminal exibe uma instala\u00e7\u00e3o normal, o malware executa em segundo plano o arquivo index.js, que decodifica uma backdoor em Python.<\/p>\n<p>No Linux, o invasor registra um servi\u00e7o persistente atrav\u00e9s do systemd. Este servi\u00e7o \u00e9 programado para reiniciar a cada 5 segundos em caso de falha e sobrevive at\u00e9 \u00e0 reinicializa\u00e7\u00e3o da m\u00e1quina, sem exigir senha de administrador.<\/p>\n<p><strong>O papel da Blockchain<\/strong><\/p>\n<p>Diferente de malwares convencionais, o CanisterWorm n\u00e3o se conecta a um servidor fixo. Ele consulta a rede ICP, onde o c\u00f3digo roda distribu\u00eddo em centenas de computadores.<\/p>\n<p>&#8220;O canister funciona como um &#8216;dead-drop&#8217; (t\u00e9cnica de espionagem): ele n\u00e3o entrega o malware diretamente, mas fornece uma URL em texto simples que aponta para o payload real&#8221;, explicam os especialistas.<\/p>\n<p>Isso permite que os atacantes alterem o arquivo malicioso a qualquer momento. As m\u00e1quinas infectadas buscam novas instru\u00e7\u00f5es a cada 50 minutos. Al\u00e9m disso, existe um kill switch: se a URL retornada for o &#8220;youtube.com&#8221;, o v\u00edrus entra em modo dormente.<\/p>\n<p><strong>Autopropaga\u00e7\u00e3o e Riscos Corporativos<\/strong><\/p>\n<p>A evolu\u00e7\u00e3o mais perigosa do CanisterWorm \u00e9 sua capacidade de se espalhar sozinho. O v\u00edrus vasculha o computador da v\u00edtima em busca de tokens de autentica\u00e7\u00e3o do npm em arquivos .npmrc ou vari\u00e1veis de ambiente (comuns em sistemas de CI\/CD como GitHub Actions).<\/p>\n<p>Ao encontrar um token, o malware publica a si mesmo em outros pacotes que o desenvolvedor tenha permiss\u00e3o para editar. Em ambientes corporativos, isso cria um efeito cascata: um \u00fanico desenvolvedor infectado pode comprometer todos os pacotes internos da empresa, infectando colegas e pipelines automatizados em segundos.<\/p>\n<p><strong>O que fazer se voc\u00ea foi afetado<\/strong><\/p>\n<p>Desenvolvedores que utilizaram pacotes dos escopos @EmilGroup ou @opengov entre os dias 20 e 21 de mar\u00e7o devem seguir estes passos imediatamente:<br \/>\n1. Verifique o servi\u00e7o: Execute o comando systemctl &#8211;user status pgmon.service para checar se o processo est\u00e1 ativo.<br \/>\n2. Localize arquivos maliciosos:<br \/>\no Malware: ~\/.local\/share\/pgmon\/service.py e ~\/.config\/systemd\/user\/pgmon.service.<br \/>\no Tempor\u00e1rios: \/tmp\/pglog e \/tmp\/.pg_state.<br \/>\n3. Revogue Tokens: Qualquer token npm presente na m\u00e1quina deve ser considerado exposto e revogado no painel do npmjs.com. \u00c9 necess\u00e1rio auditar todos os pacotes publicados recentemente por esses tokens.<\/p>\n<p><em><strong>(Com informa\u00e7\u00f5es de Tecmundo)<\/strong><\/em><br \/>\n<em><strong>(Foto: Reprodu\u00e7\u00e3o\/Freepik\/DC Studio)<\/strong><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Com infraestrutura imune a bloqueios, o malware do grupo TeamPCP comprometeu dezenas de pacotes npm e utiliza tokens de desenvolvedores para se espalhar automaticamente<\/p>","protected":false},"author":10,"featured_media":16823,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[13],"class_list":["post-16822","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ti","tag-sindical"],"_links":{"self":[{"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/posts\/16822","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/comments?post=16822"}],"version-history":[{"count":1,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/posts\/16822\/revisions"}],"predecessor-version":[{"id":16824,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/posts\/16822\/revisions\/16824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/media\/16823"}],"wp:attachment":[{"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/media?parent=16822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/categories?post=16822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fenati.org.br\/en\/wp-json\/wp\/v2\/tags?post=16822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}