
Scanner de IOC para ferramentas de codificação de IA agentic — detecta Mini Shai-Hulud, Gemini CLI RCE, Cursor CVE-2026-26268 e DPRK PromptMink.
Scanner de IOC para ferramentas de IA agentivas — detecta Mini Shai-Hulud, Gemini CLI RCE, Cursor CVE-2026-26268 e DPRK PromptMink.
Um kit de deteção para comprometimento de assistentes de codificação de IA agentivos (Claude Code, Gemini CLI, Cursor) e das dependências que eles puxam para os seus repositórios. Onze verificações em injeção de hooks, configurações de RCE, dependências maliciosas, backdoors em git hooks e adulteração de workflows de CI. A lista de IOC é externalizada — adicionar novos indicadores não requer alterações no código.
Post do blogue complementar: When the Tool Fights Back.
scanner/ais.sh)Onze verificações, cada uma com um What: (propósito) e Fix: (correção) inline, impressos abaixo do cabeçalho da secção para que o relatório seja autoexplicativo. A lista de IOC reside em scanner/iocs.txt (versionada; pode ser substituída com ).
IOC_FILE=/path/to/iocs.txt| § | Verificação | Ameaça coberta |
|---|---|---|
| 1 | Injeção de hook SessionStart do Claude Code em qualquer settings.json (baseado em jq, baixo FP) | Persistência do Mini Shai-Hulud |
| 2 | Assinaturas de dropper em runtime Bun em setup.mjs | Estágio de instalação do Mini Shai-Hulud |
| 3 | Payloads ofuscados execution.js — tamanho mais sinal de ofuscação (linha única, base64, eval(atob(, child_process) | Roubador de credenciais do Mini Shai-Hulud |
| 4 | Ficheiros de bloqueio de malware em $TMPDIR (nomes obtidos da lista de IOC) | Sentinela do Mini Shai-Hulud |
| 5 | Scripts preinstall em package.json referenciando nomes de ficheiros dropper | Ponto de entrada genérico de worm na cadeia de suprimentos |
| 6 | Commits escritos por IA que tocam em .github/workflows/ (filtro de lista de permissões de e-mail) | Adulteração de CI por identidade de agente IA comprometida |
| 7 | Ficheiros de configuração .gemini/ com padrões de meta-carateres de shell | Gemini CLI RCE CVSS 10.0 (pré-v0.39.1) |
| 8 | Configurações AGENTS.md e .cursor/ do Cursor referenciando hooks git / repositórios nus | Cursor CVE-2026-26268 |
| 9 | Hooks Git post-checkout / post-merge / post-rewrite / pre-commit contendo primitivas de fetch-and-execute, além de core.hooksPath redirecionado para fora da lista de permissões segura | CVE-2026-26268 primitiva exec + sequestro genérico de hook |
| 10 | Pacotes instalados globalmente e localmente node_modules referenciados cruzadamente com a lista de IOC | Conjunto SAP CAP do Mini Shai-Hulud, DPRK PromptMink, futuros pacotes maliciosos |
| 11 |
Uso:
bash scanner/ais.sh
# Introduza a pasta do seu projeto quando solicitado
# Lista personalizada de IOC:
IOC_FILE=./my-iocs.txt bash scanner/ais.sh
# Caminho personalizado do relatório (predefinição: ./agentic-ioc-scan-YYYYMMDD-HHMMSS.log):
REPORT_FILE=/var/log/agentic-scan.log bash scanner/ais.sh
Saída
agentic-ioc-scan-YYYYMMDD-HHMMSS.log por predefinição, com ANSI removido via tee → sed).[CRITICAL] (agir agora), [WARNING] (provavelmente malicioso — verificar), [REVIEW] (uso legítimo possível — confirmar), [OK] (limpo).caminho:linha). Secções que mostram números de linha: §1 hook, §2 assinatura Bun, §3 sinal de ofuscação, §5 chave preinstall, §7 meta-carater Gemini, §8 referência AGENTS.md a git hook, §9 conteúdo suspeito de hook..git/config infratora mais o URL remoto correspondente, para que possa ir diretamente à entrada que precisa de ser removida.core.hooksPath (§9) reporta o caminho absoluto para o .git/config do repositório para que a reatribuição seja auditável..git é um ficheiro (contendo gitdir: …), o diretório git real é resolvido antes da inspeção.Exemplo de descoberta
[CRITICAL] Repo points to known worm exfil name
Repo: /home/dev/projects/myrepo
Config: /home/dev/projects/myrepo/.git/config:9
URL: https://github.com/dhawaldesai/A-Mini-Shai-Hulud-has-Appeared
[CRITICAL] Malicious hook: /home/dev/projects/myrepo/.claude/settings.json:3
[CRITICAL] Suspicious git post-checkout hook: /home/dev/projects/myrepo/.git/hooks/post-checkout:2
Atualização de IOCs
Edite scanner/iocs.txt e aumente o cabeçalho # version:. O formato é TYPE|VALUE|NOTES. Tipos suportados:
| Tipo | Usado por | Exemplo |
|---|---|---|
FILENAME | §5 padrão preinstall | setup.mjs |
LOCKFILE | §4 verificação de ficheiro de bloqueio | tmp.987654321.lock |
NPM | §10 verificação de pacotes globais + locais | @validate-sdk/v2 |
PYPI | §10 (verificação cruzada quando um scanner PyPI é adicionado) | lightning |
HOOKSTRING | §1 correspondência de conteúdo de hook (atualmente codificado inline) | SessionStart |
REPONAME | §11 correspondência de remoto git | A Mini Shai-Hulud has Appeared |
EMAILSUBSTRING | reservado para correspondência futura de IOC de autor de commit | — |
CONFIGPATH | lista de referência de caminhos de configuração de ferramentas agentivas | .claude/settings.json |
Nenhuma alteração de código é necessária quando novos IOCs surgem — o scanner lê-os no arranque e imprime a versão carregada no banner.
Dependências
Necessário: bash, find, grep, awk, sed, git. Opcional: jq (preferido para §1 — recai para heurística grep se ausente), npm (necessário para §10 verificação de pacotes globais; a secção é ignorada silenciosamente se não estiver disponível).
scanner/pkg_version_check.sh)Complementar ao scanner de IOC. Lê um CSV de pares package,version afetados (por exemplo, o feed IOC do Mini Shai-Hulud em ~/Downloads/Mini Shai-Hulud - Sheet1.csv — 633 pares de pacote/versão npm) e verifica se aparecem em:
package.json, package-lock.json, yarn.lock, pnpm-lock.yaml e node_modules/<pkg>/package.json instalados. Manifestos PyPI (requirements.txt, poetry.lock, Pipfile.lock) também são verificados quando o CSV contém nomes sem âmbito.gh: pesquisa de código em tipos de ficheiro de bloqueio, depois validação de versão exata através da API SBOM do grafo de dependências (/repos/{owner}/{repo}/dependency-graph/sbom).Modelo de gravidade: correspondência exata pkg@versão num ficheiro de bloqueio, node_modules/ ou SBOM → [CRITICAL]. Especificador de intervalo (^1.2.3, ~1.2.3, >=…) que possa incluir a versão afetada → [REVIEW]. Correspondência de nome de pacote sem confirmação de versão → [REVIEW]. A saída é transmitida para o terminal e para ./shai-hulud-pkg-scan-YYYYMMDD-HHMMSS.log (com ANSI removido), com um resumo de distribuição de gravidade no final.
Uso:
# Interativo — solicita o diretório do projeto
bash scanner/pkg_version_check.sh
# Totalmente scriptado (substituições por variáveis de ambiente)
PROJECT_DIR=/path/to/project \
IOC_CSV="$HOME/Downloads/Mini Shai-Hulud - Sheet1.csv" \
REPORT_FILE=/var/log/pkg-scan.log \
bash scanner/pkg_version_check.sh --skip-node-modules
Formato CSV: col1 = nome do pacote (nomes com âmbito como @scope/pkg suportados), col2 = versão afetada exata. Uma linha de cabeçalho é detetada automaticamente e ignorada. Substitua o caminho com IOC_CSV=….
Dependências: bash, find, grep, awk, sed. Opcional: jq (melhora a precisão da análise de node_modules/<pkg>/package.json), gh (necessário para a fase GitHub — a fase é ignorada com uma mensagem clara se ausente ou não autenticado).
Limitações conhecidas:
grep, não totalmente analisada — formatação profundamente aninhada ou invulgar pode produzir falsos negativos. O seguimento de maior valor é a análise do ficheiro de bloqueio baseada em jq.[REVIEW].claude-code-policy/)Camada de prevenção para o Claude Code, complementando a camada de deteção acima.
allowManagedHooksOnly).claude/settings.jsoncurl, wget e bun do uso de ferramentas do agenteInstalação:
# Copiar definições geridas (não podem ser substituídas por projetos)
cp claude-code-policy/managed-settings.json ~/.claude/managed-settings.json
# Copiar o hook PreToolUse
mkdir -p ~/.claude/hooks
cp claude-code-policy/hooks/block_shai_hulud.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/block_shai_hulud.py
npm ls -g está ligado).pre-receive do lado do servidor para rejeitar pushes que adicionem ficheiros .claude/settings.json, .vscode/tasks.json ou .gemini/ de autores não permitidos.Issues e PRs bem-vindos — particularmente para novas submissões de IOC (adicionar a scanner/iocs.txt e aumentar o cabeçalho da versão), raízes de verificação adicionais específicas de plataforma e padrões de deteção para ferramentas agentivas adjacentes (Continue, Cody, Codex CLI, Aider).
MIT
Remotos Git correspondentes a nomes conhecidos de repositórios de exfiltração de worm (Shai-Hulud, A Mini Shai-Hulud has Appeared) |
| Sinal de comprometimento confirmado |