TL, DR
nolimit-agent é um pacote npm cujas versões publicadas — 1.0.299 através 1.0.307, lançados ao longo de quatro dias, de 26/06/2026 a 29/06/2026 — cada um contendo um estrutura completa para phishing e envio de e-mails em massa dentro de um diretório oculto e totalmente ofuscado. Em todas as versões, a entrada principal resolve para .ad/x0.js, um dos cerca de 86 arquivos em uma pasta com nome de arquivo oculto contendo aproximadamente 4,200 blocos de strings de arrays de javascript-obfuscator; o gancho de instalação e o layout de entrada são idênticos em toda a linha.
Por trás da cortina de fumaça, esconde-se um Fluxo de código de dispositivo OAuth do Microsoft 365 (Conecte-se[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) que, uma vez aprovado o código, lê a caixa de entrada do Outlook da vítima e os itens enviados por meio da API do Microsoft Graph; um mecanismo de envio em massa de SMTP e SMS, alimentado por listas de destinatários fornecidas pela operadora; modelos de mensagens de falsificação de marca; construção de links de redirecionamento aberto; e reconhecimento via DNS sobre HTTPS, WHOIS e busca de código no GitHub. Sinalizadores de tráfego em tempo de execução para a infraestrutura da operadora em api[.]nolimitent[.]xyz:4100.
Afetado: qualquer pessoa que instale qualquer versão do pacote, e qualquer Caixa de correio do Microsoft 365 cujo proprietário aprova um código de dispositivo apresentado por meio dele. A versão mais recente, 1.0.307, é a tag mais recente atual e possui a mesma capacidade de caixa de correio de código de dispositivo — o código malicioso não está confinado a uma única versão anterior.
Gravidade: críticoEcossistema afetado: npmO primeiro indicador a ser procurado é o host. api[.]nolimitent[.]xyz.
O ataque: como funciona
Uma camada inofensiva sobre uma carga oculta.
A embalagem apresenta uma superfície comum. package.json declara um pós-instalação gancho -
text postinstall: node scripts/postinstall.js — e na inspeção scripts/postinstall.js É inofensivo: instala um shim de comando do Windows e encerra. O comportamento não está no gancho. principal e caixa ambos os campos apontam para .anúncio/, um diretório cujo ponto inicial o mantém fora do comum ls saída, e cujo conteúdo é uniformemente ofuscado por máquina. O scanner estático contabilizou aproximadamente 4,293 trechos de carga útil codificada em toda a .anúncio/ conjunto de módulos; ofuscador de javascript é uma dependência de desenvolvimento declarada, que corresponde ao formato de rotação de array de strings dos arquivos agrupados.
A divisão é o primeiro sinal que vale a pena mencionar: o gancho de instalação que um revisor analisaria está limpo, enquanto o código operacional fica em um diretório distante, oculto e ofuscado, acessível apenas quando o ponto de entrada exportado do pacote é executado.
Acesso à caixa de correio do Microsoft 365 por código de dispositivo
O módulo .ad/x12.js Ela carrega a funcionalidade mais importante da estrutura. Ela impulsiona a concessão de autorização de dispositivo OAuth 2.0 do Microsoft 365:
text POST Conecte-se[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode A concessão de código de dispositivo é um fluxo legítimo da Microsoft projetado para dispositivos com recursos de entrada limitados: um serviço solicita um código e o usuário digita esse código no dispositivo. microsoft.com/deviceConecte-seem um segundo dispositivo e aprova, e o serviço solicitante recebe tokens. Quando o serviço solicitante pertence a alguém diferente do proprietário da caixa de correio, a aprovação concede um token a esse terceiro. Uma vez obtido um token, O arquivo `.ad/x12.js` lê a caixa de correio diretamente através do Microsoft Graph:
text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients O $select As projeções extraem endereços de remetentes da caixa de entrada e endereços de destinatários dos itens enviados — a matéria-prima para mapear os correspondentes de uma vítima. Trata-se de um acesso do tipo "adversário no meio" (Ai™) por consentimento, em vez de captura de senha: não há credencial para phishing no sentido clássico, apenas um código para obter aprovação.
Um mecanismo para envio de e-mails em massa e SMS com modelos de falsificação.
Ao redor do acesso à caixa de correio encontra-se um dispositivo de envio de correspondências. O pacote envia arquivos de dados editáveis pelo operador — listas de remetentes (remetentes.txt, smtps.txt) e um arquivo de modelo (funções.txt) — cujos endereços fictícios funcionam como uma lista de candidatos a emprego para fins de personificação: segurança@apple.com, Conecte-se-verificação, serviço OAuth, faturamento e remetentes de notificações de conta em relação a um yourdomain.com substituto do operador. O lado do SMS carrega um telefoneebook e configuração do gateway. O programa de envio de e-mails itera sobre as listas de destinatários fornecidas pelo operador e envia através de servidores SMTP configurados.
Para que os links funcionem, .ad/xu.js e .ad/xq.js Criar URLs que explorem a ambiguidade na análise de URLs e o rastreamento de cliques. Os padrões de falsificação incorporam uma autoridade de aparência confiável antes de um @ Assim, o prefixo visível difere do host real:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? A estrutura também captura ícones favoritos dos principais consumidores e enterprise provedores de e-mail — uma técnica comum para criar uma página de aviso ou página de destino convincente com a marca do provedor.
Reconhecimento de alvos e infraestrutura
Diversos módulos coletam contexto antes de enviar. .ad/x0.js resolve nomes via DNS sobre HTTPS (dns[.]google/resolver), .ad/xa.js consultas WHOIS (api[.]whois[.]vu), E .ad/x9.js executa a pesquisa de código do GitHub (api[.]github[.]com/search/code?q=) — um padrão consistente com a descoberta de configurações expostas de servidores de e-mail e credenciais SMTP para alimentar a lista de retransmissão. .ad/xs.js consulta o índice CDX da Wayback Machine.
Comando e controle
Em todo o conjunto obscurecido, .ad/x4.js refere-se ao ponto de extremidade do operador:
text http://api[.]nolimitent[.]xyz:4100 O anfitrião compartilha o seu sem limite marca com o nome próprio da editora, e a : 4100 A porta é o canal de comunicação do framework. Este é o indicador mais confiável para os defensores: um pacote, uma estação de trabalho de desenvolvedor ou um agente de compilação alcançando api[.]nolimitent[.]xyz executou este código.
Indicadores de compromisso
Os indicadores abaixo são aqueles sobre os quais um defensor pode agir — buscar em um arquivo de bloqueio, bloquear um host ou pesquisar em logs de proxy e DNS. Os endpoints da Microsoft aparecem porque a estrutura os utiliza de forma abusiva; eles não são maliciosos em si e não devem ser bloqueados.
| Indicador | Formato | Onde | Ação do defensor |
|---|---|---|---|
nolimit-agent (todas as versões 1.0.299–1.0.307) | Pacote | npm | Procure por arquivos de bloqueio/logs de instalação no Grep |
api[.]nolimitent[.]xyz (:4100) | Host C2 | .ad/x4.js | Bloquear; pesquisar registros de DNS e proxy |
.ad/ diretório oculto como destino principal/bin | Estrutura | package.json | Sinal estático na revisão do registro |
trusted[.]com@ / %40 / :80@ formulários de link | Falsificação de URL | .ad/xu.js, .ad/xq.js | Inspeção de URL de e-mail/proxy |
Concessão de código de dispositivo + Gráfico inbox/sentitems ler | Comportamento | .ad/x12.js | Conecte-se no M365 + revisão de auditoria do Graph |
Hashes de arquivos capturados na triagem:
- pacote/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pacote/package.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Um sinal de locatário do Microsoft 365 que vale a pena investigar, independentemente deste pacote: Conecte-ses bem-sucedidos com código de dispositivo seguidos imediatamente por leituras do Graph de Pastas de e-mail/caixa de entrada e Pastas de e-mail/itens, especialmente a partir de uma sessão que o usuário não reconhece.
Atribuição e comportamento observado
O que é observável permanece separado de quem está por trás disso.
Fatos observáveis: o pacote é publicado sob o identificador agente sem limite com um endereço de Gmail não verificado e nenhum repositório de código-fonte vinculado; seu package.json descreve-o como um “remetente de e-mail avançado” e o etiqueta com o equipe vermelha palavra-chave; o código de tempo de execução está concentrado em um ambiente oculto e ofuscado .anúncio/ diretório cuja cadeia de ferramentas (ofuscador de javascript) é uma dependência declarada; e o host de chamada para casa api[.]nolimitent[.]xyz reutiliza o sem limite marca. Este é um pacote único com um ponto de referência de infraestrutura controlado pela operadora — não um conjunto de vários pacotes, e nenhuma sobreposição com uma campanha mencionada anteriormente foi identificada.
O equipe vermelha A palavra-chave não altera a classificação. Ferramentas legítimas de segurança ofensiva que oferecem capacidade de uso duplo fazem isso de forma transparente: código-fonte legível, alvos fornecidos pelo operador e nenhuma comunicação oculta com servidores externos. Este pacote inverte cada uma dessas propriedades — seu código operacional é ofuscado e oculto, e ele envia sinais para a infraestrutura fixa do operador em vez de para um alvo fornecido pelo usuário. O comportamento, e não o rótulo, determina o veredicto, que é malicioso.
A intenção não é declarada aqui. A postagem descreve o que o código faz — solicitar um código de dispositivo, ler uma caixa de correio via Graph, enviar e-mails em massa por meio de servidores de retransmissão configurados, enviar um sinal para um host fixo — e não explicita a motivação.
Impacto, tendências e orientações para defensores
Dois efeitos no momento da instalação são importantes. Primeiro, qualquer desenvolvedor ou agente de CI que instale agente sem limite traz a estrutura para esse host e estabelece a chamada para o servidor. api[.]nolimitent[.]xyzEm segundo lugar, a funcionalidade de código de dispositivo amplia o alcance para além do host de instalação: uma caixa de correio do Microsoft 365 cujo proprietário é induzido a aprovar um código apresentado é lida diretamente pelo Graph, sem que nenhuma senha seja transmitida pela rede.
A tendência mais ampla é aquela que deve ser internalizada. O phishing de código de dispositivo (AiTM) passou de uma infraestrutura de phishing independente para um pacote em um registro público — distribuído por npm install em vez de por meio de um link enviado por e-mail. Empacotar o kit dessa forma troca o problema de hospedagem e entrega de links do operador de phishing pelo alcance de um registro, e oculta o código operacional por trás de um gancho de instalação limpa e um diretório ofuscado com nome de arquivo oculto que impede uma rápida inspeção manual.
Para defensores:
- Revisão de registro e dependência. Trate um pacote cujo principal/caixa A estrutura oculta (com prefixo de ponto) de código próprio uniformemente ofuscado é considerada de alto risco, independentemente de o gancho de instalação parecer limpo. Minificação não é ofuscação — o critério de segurança é a assinatura do decodificador de array de strings, não o comprimento da linha.
- Reforço de segurança do Microsoft 365. Restrinja o fluxo de autorização por código de dispositivo com Acesso Condicional onde não for operacionalmente necessário; concessões de código de dispositivo são um vetor conhecido de AiTM e raramente são necessárias para usuários interativos. Audite os Conecte-ses por código de dispositivo seguidos de enumeração imediata da caixa de correio do Graph.
- Detecção de rede. Bloquear e alertar sobre api[.]nolimitent[.]xyz. Procure por ele nos logs de DNS e proxy de saída em toda a infraestrutura de desenvolvimento e compilação.
- Detecção do caminho do e-mail. O usuário @ host Formulários de falsificação de URL (trusted[.]com@…) são detectáveis no gateway de e-mail e no proxy; sinaliza links cujo componente de autoridade precede um @.
O pacote estava disponível no npm no momento da análise. Isso ocorre porque o framework oculto abrange toda a linha de versões publicadas e a versão atual. mais recente A tag (1.0.307) carrega a capacidade de código do dispositivo, a remoção do registro deve cobrir todas as versões, não apenas uma única versão anterior.




