Desenvolvedor sabota módulos de código aberto e afeta milhares de sistemas

Bibliotecas faker.js e colors.js foram modificadas pelo próprio autor para exibir mensagens estranhas como forma de protesto

Emerson Alecrim

Os primeiros dias de 2022 foram tensos para desenvolvedores que empregam as bibliotecas faker.js e colors.js em seus projetos. Com código-fonte aberto, ambas receberam um commit malicioso que faz os sistemas que as usam apresentarem um comportamento anormal. A parte mais surpreendente é esta: tudo indica que as duas bibliotecas foram sabotadas por seu próprio desenvolvedor.

As mensagens estranhas exibidas com a modificação das bibliotecas (imagem: BleepingComputer)
As mensagens estranhas exibidas com a modificação das bibliotecas (imagem: BleepingComputer)

A faker.js e a colors.js estão entre as bibliotecas mais populares do NPM, o gerenciador de pacotes do Node.js. A primeira gera dados falsos para testes e demonstrações, enquanto a segunda possibilita o trabalho com cores diversas no console.

Estima-se que a biblioteca faker.js registre uma média de 2,8 milhões de downloads por semana, enquanto a colors.js conta com mais de 20 milhões de downloads semanais, além de estar presente em quase 19 mil projetos.

Por aí é possível ter uma noção do estrago que qualquer modificação maliciosa nessas bibliotecas pode causar. E causou: durante a última semana, vários desenvolvedores notaram que seus projetos estavam imprimindo mensagens estranhas e inesperadas no console.

As apurações do caso apontam que o commit foi apresentado como uma atualização que adiciona “um novo módulo da bandeira americana” em colors.js. No caso da biblioteca faker.js, a versão 6.6.6 é que desencadeou o comportamento anormal.

E que comportamento é esse? As tais atualizações adicionaram algumas linhas de código às bibliotecas que fazem as aplicações dependentes delas exibirem mensagens com o texto “LIBERTY LIBERTY LIBERTY” e uma sequência de caracteres estranhos.

Na busca de explicações, alguns desenvolvedores descobriram que o arquivo readme (leia-me) da biblioteca faker.js foi modificada para exibir a seguinte pergunta: “o que realmente aconteceu com Aaron Swartz?”.

Alteração no colors.js (imagem: BleepingComputer)
Alteração no colors.js (imagem: BleepingComputer)

Parece um ataque, mas é sabotagem interna

Na primeira olhada, o problema parecia fruto de uma ação de um hacker ou de alguma falha de segurança. Surpreendentemente, o BleepingComputer apontou, mais tarde, que o próprio desenvolvedor das bibliotecas, Marak Squires, foi responsável pelo código malicioso.

Por que Squires sabotaria projetos próprios? As motivações não estão claras, mas há uma pista: o BleepingComputer descobriu que, em novembro de 2020, o desenvolvedor postou uma mensagem no GitHub (já apagada) dizendo que não iria mais apoiar as empresas que aparecem na lista das 500 maiores companhias do mundo mantida pela Fortune.

Com base nessa mensagem, é de se presumir que, ao injetar o código nas bibliotecas, Squires estivesse protestando pelo o que considera uso abusivo ou desproporcional (sem nenhuma contrapartida) de softwares de código aberto por grandes corporações.

A menção a Aaron Swartz reforça a hipótese de protesto. Esse é o nome de um ativista e desenvolvedor que, entre outros feitos, participou da criação dos feeds RSS e ajudou a criar o Reddit. Swartz faleceu em 2013, por suicídio, aparentemente por não ter aguentado a pressão das investigações que sofria após ter sido acusado de invadir uma biblioteca digital do MIT e obter ilegalmente milhões de artigos acadêmicos da instituição.

O documentário O Menino da Internet: A História de Aaron Swartz dá detalhes sobre a trajetória do ativista.

E agora?

Em 6 de janeiro, dois dias depois de liberar a versão corrompida do pacote faker.js, Squires informou no Twitter, em uma mensagem com uma hashtag que novamente menciona Aaron Swartz, que a biblioteca anterior havia sido restaurada e que seu acesso ao GitHub tinha sido suspenso.

Mas, aparentemente, a suspensão foi temporária. Os changelogs da faker.js e da colours.js sugerem que o desenvolvedor teve acesso posterior ao serviço. Além disso, em 8 de janeiro, ele postou uma mensagem no GitHub da colours.js prometendo uma solução para o “zalgo” (o texto com caracteres estranhos exibido pelos sistemas afetados).

Apesar de a mensagem ter um tom sarcástico, a promessa foi cumprida. Tudo indica que a atual versão da biblioteca colours.js não é afetada pelo problema. Mas, com relação ao faker.js, ainda não há mudanças, razão pela qual desenvolvedores têm sido orientados a fazer downgrade para a versão anterior da biblioteca, a 5.5.3.

Além de questionamentos sobre a validade desse tipo de protesto, o assunto levantou discussões sobre se o GitHub agiu certo em bloquear o acesso do desenvolvedor a seus trabalhos na plataforma, afinal, as alterações envolvem apenas projetos próprios e mantidos por ele. Até a tarde desta segunda-feira (10), o serviço não havia se pronunciado a respeito.

Leia | O que é Node.js? [Guia para iniciantes]

Relacionados

Escrito por

Emerson Alecrim

Emerson Alecrim

Repórter

Emerson Alecrim cobre tecnologia desde 2001 e entrou para o Tecnoblog em 2013, se especializando na cobertura de temas como hardware, sistemas operacionais e negócios. Formado em ciência da computação, seguiu carreira em comunicação, sempre mantendo a tecnologia como base. Em 2022, foi reconhecido no Prêmio ESET de Segurança em Informação. Em 2023, foi reconhecido no Prêmio Especialistas, em eletroeletrônicos. Participa do Tecnocast, já passou pelo TechTudo e mantém o site Infowester.