
Los sitios web de Ghost CMS desactualizados que han sido comprometidos por CVE-2026-26980 pueden sufrir inyección de código de spam en las páginas. Utilice esto para limpiar y editar en masa los campos de inyección de código.
Elimina toda inyección de código por publicación y por página de un sitio Ghost CMS a través de la API de Admin.
La inyección de código a nivel de sitio (Ghost Admin → Configuración → Inyección de código) nunca se modifica.
pip install requests PyJWT
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
Crea un archivo llamado ghost_cleaner_config.json en el mismo directorio que el script:
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
Si omites este paso, el script creará un archivo de configuración de ejemplo en la primera ejecución y saldrá — solo rellénalo y vuelve a ejecutarlo.
Ejecuta esto primero para ver exactamente qué se borraría antes de modificar nada:
python3 ghost_injection_cleaner.py
Ejemplo de salida:
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 vez que estés satisfecho con la salida de la simulación, ejecuta con --apply. Se te pedirá que confirmes:
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 publicación y página, establece ambos campos a null:
| Campo | Ubicación en el editor de Ghost |
|---|---|
codeinjection_head | Configuración de publicación/página → Inyección de código → Cabecera |
codeinjection_foot | Configuración de publicación/página → Inyección de código → Pie de página |
Las publicaciones y páginas que no tienen inyección se omiten silenciosamente.
Missing dependencies
Ejecuta pip install requests PyJWT e inténtalo de nuevo.
admin_api_key must be in 'id:secret' format
Asegúrate de que tu clave tenga dos puntos en medio. Debería verse como dos cadenas hexadecimales separadas por :. Cópiala directamente desde Ghost Admin sin añadir espacios.
401 Unauthorized
Tu clave de API de Admin puede ser incorrecta o la integración puede haber sido eliminada. Vuelve a Ghost Admin → Configuración → Integraciones y verifica.
ConnectionError o tiempo de espera
Verifica que ghost_url en tu configuración sea correcto y que el sitio sea accesible desde la máquina donde ejecutas el script.
El script se cuelga en un sitio grande Cada página de 50 publicaciones genera un nuevo JWT y espera a la API. Esto es normal — dale un minuto.