
Sites Ghost CMS desatualizados que foram comprometidos pelo CVE-2026-26980 podem sofrer com injeção de código spam em páginas. Use esta ferramenta para limpar e editar em massa campos de injeção de código.
Remove código injetado de cada post e página em um site Ghost CMS por meio da Admin API.
Use isto para limpar um site Ghost comprometido — por exemplo, um afetado pela vulnerabilidade de injeção de código CVE-2026-26980 — removendo tags <script> fornecidas pelo atacante e outras marcações injetadas dos campos de injeção de código Header e Footer de cada post e de cada página.
É seguro por padrão (dry-run primeiro, depois aplicar) e estritamente delimitado: ele apenas limpa esses dois campos por post. A injeção de código em todo o site (Ghost Admin → Settings → Code injection), o conteúdo dos posts e todas as outras configurações nunca são tocados.
requirements.txt):pip install -r requirements.txt
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
Crie um arquivo chamado ghost_cleaner_config.json no mesmo diretório do script:
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
Se você pular esta etapa, o script criará um arquivo de configuração de exemplo para você na primeira execução e encerrará — basta preenchê-lo e executar novamente.
Sempre execute isto primeiro para ver exatamente o que seria limpo antes de tocar em qualquer coisa:
python3 ghost_injection_cleaner.py
Exemplo de saída:
Ghost Injection Remover
Mode : DRY-RUN (read-only)
Target: https://yourdomain.com
NOTE: /ghost/api/admin/settings/ (site-wide injection) is
never read or written by this script.
============================================================
POSTS
============================================================
47 posts fetched.
✦ 'My First Post'
HEAD: '<script>(function(){var _x="...obfuscated..."</script>'
🔍 DRY-RUN - would be cleared.
============================================================
PAGES
============================================================
6 pages fetched.
============================================================
SUMMARY
============================================================
Would clear : 1 posts/pages
Already clean: 52 posts/pages
Re-run with --apply to commit these changes.
Quando estiver satisfeito com a saída do dry-run, execute com --apply. Será solicitado que você confirme:
python3 ghost_injection_cleaner.py --apply
Type YES to confirm changes to posts and pages: YES
...
✅ Cleared.
python3 ghost_injection_cleaner.py --config /path/to/my_config.json
Para cada post e página, ele define ambos os campos a seguir como null:
| Campo | Local no editor do Ghost |
|---|---|
codeinjection_head | Configurações do post/página → Injeção de código → Cabeçalho |
codeinjection_foot | Configurações do post/página → Injeção de código → Rodapé |
Posts e páginas que não possuem injeção são ignorados silenciosamente.
Missing dependencies
Execute pip install -r requirements.txt e tente novamente.
admin_api_key must be in 'id:secret' format
Certifique-se de que sua chave tenha dois-pontos no meio. Ela deve parecer com duas strings hexadecimais separadas por :. Copie-a diretamente do Ghost Admin sem adicionar espaços.
ERROR: Ghost API returned HTTP 401
Sua chave da Admin API pode estar incorreta ou a integração pode ter sido excluída. Volte ao Ghost Admin → Configurações → Integrações e verifique.
ConnectionError ou timeout
Verifique se ghost_url na sua configuração está correto e se o site é acessível a partir da máquina em que você está executando o script.
O script trava em um site grande Cada página de 50 posts gera um novo JWT e aguarda a API. Isso é normal — dê um minuto a ele.