Uma versão maliciosa de uma ferramenta de software utilizada pelos programadores da Injective foi concebida para recolher chaves privadas de carteiras e frases-semente, levantando preocupações para as aplicações que tratavam informações sensíveis de carteiras através da versão afetada. Hackers comprometeram um pacote de software utilizado por programadores que construíam carteiras e aplicações para a blockchain Injective, adicionando código capaz de recolher secretamente credenciais de carteiras de criptomoedas.
A empresa de segurança Socket encontrou o código malicioso na versão 1.20.21 do @injectivelabs/sdk-ts, um pacote que ajuda as aplicações a ligarem-se à Injective e a gerir funções relacionadas com a carteira. O pacote recebe normalmente cerca de 50.000 descargas por semana, embora esse número inclua todas as versões e não represente o número de pessoas afetadas pelo incidente.
A Socket afirmou que a versão comprometida foi descarregada cerca de 310 vezes. No entanto, uma descarga não significa automaticamente que uma chave de carteira tenha sido exposta. O código perigoso teria de ser executado enquanto uma aplicação estivesse a processar uma chave privada ou uma frase-semente. Não foi divulgado nenhum número confirmado de carteiras afetadas, e não há provas públicas de que fundos tenham sido roubados.
O incidente não envolveu uma violação da própria blockchain Injective. Em vez disso, os atacantes visaram um componente de software confiável utilizado pelos programadores, um método comumente descrito como um ataque à cadeia de fornecimento de software.
Os programadores dependem frequentemente de pacotes de software prontos, em vez de escreverem cada parte de uma aplicação do zero. Estes pacotes podem lidar com tarefas como a ligação a uma blockchain, a criação de carteiras e a assinatura de transações. Neste caso, o código malicioso foi colocado dentro de um pacote oficial da Injective e foi concebido para ativar quando uma aplicação processava informações sensíveis da carteira. A Socket afirmou que podia capturar uma chave privada ou uma frase-semente mnemónica e tentar enviar os dados para fora, disfarçando a atividade como relatórios técnicos ordinários.
Uma chave privada dá ao seu detentor controlo sobre a carteira de criptomoedas associada. Uma frase-semente pode ser usada para restaurar a mesma carteira noutro dispositivo. Ao contrário de uma palavra-passe de conta normal, estas credenciais não podem simplesmente ser redefinidas após serem expostas.
As violações de chaves privadas tornaram-se uma das formas mais prejudiciais de ataque cripto, porque os criminosos podem assumir o controlo direto das carteiras sem precisar de quebrar a blockchain subjacente. Uma revisão de segurança recente descobriu que os incidentes com chaves privadas representaram cerca de 40% das perdas registadas no conjunto de dados examinado. O incidente da Injective também mostra por que razão os atacantes visam cada vez mais software e plataformas em que os utilizadores já confiam. Um nome de pacote familiar, uma conta de programador estabelecida ou uma aplicação reconhecida podem fazer com que a atividade maliciosa pareça legítima e reduzir a probabilidade de os utilizadores a questionarem.
A Socket afirmou que as alterações não autorizadas foram submetidas através da conta GitHub de um programador com um histórico estabelecido de contribuições para o projeto Injective. O verdadeiro proprietário da conta detetou posteriormente a atividade e reverteu as alterações. O relatório disponível não identifica o atacante nem explica como a conta foi acedida.
O código de roubo de carteiras estava localizado na versão 1.20.21 do pacote principal do SDK da Injective. No entanto, outros 17 pacotes dentro da coleção npm da Injective foram lançados com ligações à mesma versão afetada. Isto significava que alguns programadores poderiam ter recebido o software comprometido indiretamente. Uma aplicação pode ter instalado um pacote da Injective, enquanto esse pacote trouxe automaticamente o SDK afetado nos bastidores.
O incidente não deve, portanto, ser descrito como 18 pacotes separadamente infetados. As provas disponíveis mostram que o SDK principal continha a funcionalidade maliciosa, enquanto 17 pacotes relacionados dependiam direta ou indiretamente dessa versão. A Socket afirmou que a versão afetada foi marcada como obsoleta após a descoberta do comprometimento e que uma versão limpa foi publicada. No entanto, no momento do relatório da Socket, a versão comprometida não tinha sido completamente removida do npm, e o material de lançamento relacionado permanecia disponível através do GitHub.
Os relatórios também diferiram quanto à data exata do incidente. A cronologia publicada pela Socket refere 8 de junho, enquanto alguns relatórios secundários situaram a atividade em julho. Como o mês não foi resolvido independentemente, a data exata deve ser atribuída à fonte em vez de ser apresentada como um facto indiscutível.
Os programadores que utilizaram a versão 1.20.21, seja diretamente ou através de outro pacote da Injective, foram aconselhados a assumir que as credenciais da carteira processadas pelo software afetado podem ter sido expostas.
As ações recomendadas incluem:
Atualizar apenas o pacote pode não proteger uma carteira se as suas credenciais já tiverem sido copiadas. Assim que outra parte obtiver uma chave privada ou uma frase-semente, a carteira antiga não deve mais ser considerada segura. Os utilizadores de carteiras também devem examinar as permissões que aprovam. Num caso separado, um atacante roubou cerca de 92.000 dólares em Tether Gold depois de uma vítima ter assinado um pedido de permissão malicioso, mostrando que os criminosos nem sempre precisam de obter diretamente uma frase-semente para levar ativos.
Embora esse caso tenha utilizado uma técnica diferente, destaca o mesmo problema mais amplo: a segurança cripto depende não apenas da blockchain, mas também do software, aprovações e serviços que envolvem uma carteira. Atualmente, não há provas de que a blockchain Injective tenha sido hackeada, de que todas as carteiras Injective tenham sido colocadas em risco ou de que uma quantidade confirmada de criptomoeda tenha sido roubada. O perigo conhecido limita-se às aplicações que instalaram o pacote comprometido e processaram credenciais de carteira através dele.

