
Siti web Ghost CMS obsoleti che sono stati compromessi da CVE-2026-26980 possono subire l'iniezione di codice spam nelle pagine. Utilizza questo strumento per cancellare e modificare in massa i campi di iniezione del codice.
Rimuove il codice iniettato da ogni post e pagina di un sito Ghost CMS tramite l'Admin API.
Usalo per ripulire un sito Ghost compromesso — ad esempio, uno colpito dalla vulnerabilità di code injection CVE-2026-26980 — rimuovendo i tag <script> inseriti dall'attaccante e altro markup iniettato dai campi di code injection Header e Footer di ogni post e di ogni pagina.
È sicuro per impostazione predefinita (prima dry-run, poi applicazione) e rigorosamente circoscritto: cancella solo quei due campi per-post. La code injection a livello di sito (Ghost Admin → Settings → Code injection), il contenuto dei post e tutte le altre impostazioni non vengono mai toccati.
requirements.txt):pip install -r requirements.txt
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
Crea un file chiamato ghost_cleaner_config.json nella stessa directory dello script:
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
Se salti questo passaggio, lo script creerà per te un file di configurazione di esempio alla prima esecuzione e terminerà — compilalo e rieseguilo.
Esegui sempre prima questa per vedere esattamente cosa verrebbe cancellato prima di toccare qualsiasi cosa:
python3 ghost_injection_cleaner.py
Esempio di output:
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.
Una volta soddisfatto dell'output del dry-run, esegui con --apply. Ti verrà chiesto di confermare:
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
Per ogni post e pagina, imposta entrambi questi campi su null:
| Campo | Posizione nell'editor di Ghost |
|---|---|
codeinjection_head | Impostazioni post/pagina → Code injection → Header |
codeinjection_foot | Impostazioni post/pagina → Code injection → Footer |
I post e le pagine che non hanno alcuna injection vengono saltati silenziosamente.
Missing dependencies
Esegui pip install -r requirements.txt e riprova.
admin_api_key must be in 'id:secret' format
Assicurati che la tua chiave contenga i due punti al centro. Dovrebbe apparire come due stringhe esadecimali separate da :. Copiala direttamente da Ghost Admin senza aggiungere spazi.
ERROR: Ghost API returned HTTP 401
La tua Admin API key potrebbe essere errata o l'integrazione potrebbe essere stata eliminata. Torna su Ghost Admin → Settings → Integrations e verifica.
ConnectionError o timeout
Verifica che ghost_url nella tua configurazione sia corretto e che il sito sia raggiungibile dalla macchina su cui stai eseguendo lo script.
Lo script si blocca su un sito di grandi dimensioni Ogni pagina di 50 post genera un nuovo JWT e attende l'API. È normale — concedigli un minuto.