
Les sites Ghost CMS obsolètes qui ont été compromis via CVE-2026-26980 peuvent subir une injection de code spam dans leurs pages. Utilisez cet outil pour nettoyer et modifier en masse les champs d'injection de code.
Supprime le code injecté de chaque article et page d'un site Ghost CMS via l'API Admin.
Utilisez cet outil pour nettoyer un site Ghost compromis — par exemple, un site affecté par la vulnérabilité d'injection de code CVE-2026-26980 — en retirant les balises <script> fournies par l'attaquant et les autres balises injectées des champs d'injection de code Header et Footer de chaque article et de chaque page.
Il est sûr par défaut (d'abord une simulation, puis l'application) et strictement limité : il ne vide que ces deux champs par article. L'injection de code à l'échelle du site (Ghost Admin → Settings → Code injection), le contenu des articles et tous les autres réglages ne sont jamais touchés.
requirements.txt) :pip install -r requirements.txt
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
Créez un fichier nommé ghost_cleaner_config.json dans le même répertoire que le script :
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
Si vous ignorez cette étape, le script créera un fichier de configuration d'exemple pour vous lors de la première exécution et se terminera — il vous suffit de le remplir et de relancer.
Exécutez toujours ceci en premier pour voir exactement ce qui serait effacé avant de toucher à quoi que ce soit :
python3 ghost_injection_cleaner.py
Exemple de sortie :
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.
Une fois que le résultat du dry-run vous convient, exécutez avec --apply. Une confirmation vous sera demandée :
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
Pour chaque article et page, il définit ces deux champs à null :
| Champ | Emplacement dans l'éditeur Ghost |
|---|---|
codeinjection_head | Paramètres de l'article/de la page → Injection de code → En-tête |
codeinjection_foot | Paramètres de l'article/de la page → Injection de code → Pied de page |
Les articles et pages sans injection sont ignorés silencieusement.
Missing dependencies
Exécutez pip install -r requirements.txt et réessayez.
admin_api_key must be in 'id:secret' format
Assurez-vous que votre clé contient un deux-points au milieu. Elle doit ressembler à deux chaînes hexadécimales séparées par :. Copiez-la directement depuis Ghost Admin sans ajouter d'espaces.
ERROR: Ghost API returned HTTP 401
Votre clé Admin API est peut-être incorrecte ou l'intégration a peut-être été supprimée. Retournez dans Ghost Admin → Settings → Integrations et vérifiez.
ConnectionError ou délai d'attente
Vérifiez que ghost_url dans votre configuration est correct et que le site est accessible depuis la machine sur laquelle vous exécutez le script.
Le script se bloque sur un site volumineux Chaque page de 50 articles génère un nouveau JWT et attend l'API. C'est normal — laissez-lui une minute.