[{"data":1,"prerenderedAt":165},["ShallowReactive",2],{"seo-verification":3,"blog-migrar-uptime-kuma-v1-v2-seguridad-ma-es":6,"promo-bar-likely":164},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-migrar-uptime-kuma-v1-v2-seguridad-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":103,"ctaBody":104,"ctaButton":105,"ctaUrl":106,"relatedPosts":107},289,"migrar-uptime-kuma-v1-v2-seguridad",{"fr":12,"en":13,"ar":14,"es":10},"migrer-uptime-kuma-v1-v2-securite","migrating-uptime-kuma-from-v1-to-v2-security-guide","ترقية-uptime-kuma-من-v1-إلى-v2-دليل-الأمان","Migrar Uptime Kuma de v1 a v2: guía de seguridad","CVE-2026-45618 expone Uptime Kuma 1.x a la ejecución remota de código. Migre a v2 y refuerce su instancia con esta guía paso a paso.",10,2,false,"2026-08-21T00:00:00+00:00","2026-11-09T20:55:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-uptime-kuma-v1-v2-securite-poster.svg",{"categorySlug":25,"appSlug":34},"uptime-kuma","La rama 1.x de Uptime Kuma ya no recibe correcciones de seguridad. CVE-2026-45618, un fallo de ejecución remota de código en el motor de plantillas LiquidJS, ha puesto de manifiesto ese riesgo: en una instancia sin migrar, un atacante puede ejecutar comandos arbitrarios. Esta guía conduce la migración a la versión 2.x, respalda los datos, detalla las comprobaciones posteriores a la migración y refuerza la instancia antes del próximo intento de explotación.",[37,41,50,53,56,69,90,93,97,100],{"type":38,"title":39,"body":40},"h2","Por qué migrar ahora: CVE-2026-45618 y fin del mantenimiento de la rama 1.x","CVE-2026-45618 es una vulnerabilidad crítica con puntuación CVSS 10.0 en LiquidJS, el motor de plantillas que Uptime Kuma utiliza para las plantillas de notificación. Las versiones de LiquidJS anteriores a la 10.26.0 están afectadas: al explotar el filtro `valueOf` en una plantilla —en Uptime Kuma, la plantilla del mensaje de una notificación— un atacante puede encadenar una manipulación de prototipos para alcanzar el constructor `Function` de JavaScript y ejecutar comandos arbitrarios en el host. Una prueba de concepto pública demuestra la lectura de archivos del sistema y la ejecución mediante `child_process.execSync`.\n\nLa rama 1.x no recibió ninguna corrección: su última versión, 1.23.17 (octubre de 2025), incluye LiquidJS 10.22.0, y el proyecto marca ahora los tags Docker `1` y `latest` como obsoletos. Modificar una plantilla de notificación requiere una cuenta: un atacante que obtenga acceso de administrador —por robo de credenciales o por fuerza bruta— dispone de esa superficie. La rama 2.x incorpora LiquidJS 10.26.0 desde la versión 2.4.0 (mayo de 2026) y sigue recibiendo correcciones: la 2.5.8, por ejemplo, corrigió una ejecución de código autenticada mediante Apprise (GHSA-v2p3-6f5h-6hhf) que afecta también a toda la rama 1.x. La última versión, 2.5.9, salió en octubre de 2026. Seguir operando una instancia 1.x significa exponer cada monitor —y los clientes a los que vigila— a una superficie de ataque sin fecha de cierre conocida.",{"type":42,"title":43,"items":44},"ul","Impactos concretos de una instancia sin migrar",[45,46,47,48,49],"Ejecución remota de código: un atacante que pueda modificar una plantilla de notificación puede ejecutar comandos del sistema en el VPS anfitrión.","Exposición del parque de clientes: una agencia que aloja una instancia compartida expone las configuraciones, las URL internas y las credenciales de notificación de todos sus clientes.","Responsabilidad trasladada: en caso de incidente en una instancia sin mantenimiento, la negligencia de no migrar tras la publicación de una CVE crítica constituye un factor agravante.","Acumulación de CVE: la rama 1.x ya no recibirá parches de seguridad ni actualizaciones de dependencias; cada nuevo fallo en LiquidJS o en sus dependencias se acumula allí sin remedio.","Detección silenciosa: LiquidJS evalúa las plantillas del lado del servidor; una explotación puede permanecer invisible en los logs de aplicación de Uptime Kuma.",{"type":38,"title":51,"body":52},"Requisitos previos antes de empezar","Compruebe los siguientes puntos antes de iniciar la migración. Una omisión puede hacer imposible el rollback.\n\n**Recursos mínimos recomendados.** La documentación de Uptime Kuma no fija ninguna cifra: una instancia pequeña cabe en un VPS de gama de entrada, pero la RAM y el disco crecen con el número de monitores y el historial conservado. La migración agrega la tabla de heartbeats: el mantenedor indica unos 7 minutos para 20 monitores y 90 días de datos, y varias horas en un hardware lento: un VPS con SSD NVMe reduce esa ventana.\n\n**Docker Compose v2.** El comando requerido es `docker compose` (plugin integrado), y no `docker-compose` (binario autónomo v1). Compruébelo con `docker compose version`: espere la versión 2 o posterior (la rama actual es la v5). Si el comando falla, instale el plugin mediante el gestor de paquetes de su distribución antes de continuar.\n\n**Acceso root o sudo.** El procedimiento manipula volúmenes Docker y archivos del sistema; un acceso privilegiado es indispensable.\n\n**Instancia v1 operativa.** Confirme la versión actual desde la interfaz web (Configuración → Acerca de). La migración presupone que la instancia arranca y que su base de datos es coherente: si ya está dañada, restaure una copia de seguridad antes de proceder.",{"type":38,"title":54,"body":55},"Copia de seguridad obligatoria antes de la migración","La migración v1 → v2 transforma el esquema de la base SQLite de forma irreversible. Sin una copia de seguridad válida, un rollback completo es imposible.\n\n**Identificar el volumen o la carpeta de datos.** Si utiliza Docker Compose con un volumen con nombre, su nombre completo combina el nombre del proyecto Compose y el del volumen, por ejemplo `uptime-kuma_uptime-kuma-data`. Confírmelo con `docker volume ls | grep kuma`. Si monta una carpeta del host (bind mount), localice la ruta en su `docker-compose.yml`: normalmente `.\u002Fdata:\u002Fapp\u002Fdata`.\n\n**Detener el contenedor antes de la copia.** Una base SQLite copiada mientras hay escrituras activas puede quedar dañada. No utilice nunca el flag `-v` al detenerla: eliminaría el volumen y su contenido.",{"type":57,"title":58,"steps":59},"steps","Copia de seguridad del volumen de datos",[60,63,66],{"title":61,"body":62},"Detener Uptime Kuma","Detenga el contenedor sin eliminar el volumen:\n```bash\ndocker compose down\n```\nEspere la confirmación `Container uptime-kuma Stopped` antes de continuar.",{"title":64,"body":65},"Copiar un volumen Docker con nombre","Utilice un contenedor busybox para crear un archivo comprimido del volumen:\n```bash\ndocker run --rm \\\n  --volume uptime-kuma_uptime-kuma-data:\u002Fapp\u002Fdata \\\n  --volume $(pwd):\u002Fbackup \\\n  busybox \\\n  tar czf \u002Fbackup\u002Fuptime-kuma-v1-backup.tar.gz -C \u002Fapp\u002Fdata .\n```\nCompruebe el tamaño del archivo con `ls -lh uptime-kuma-v1-backup.tar.gz`. Un archivo de solo unos pocos bytes indica un problema de montaje: corríjalo antes de continuar.",{"title":67,"body":68},"Copiar un bind mount","Si sus datos están en una carpeta del host (por ejemplo: `.\u002Fdata`):\n```bash\ntar czf uptime-kuma-v1-backup.tar.gz .\u002Fdata\n```\nGuarde este archivo fuera del servidor (almacenamiento de objetos, servidor remoto) antes de pasar a la migración.",{"type":57,"title":70,"steps":71},"Migración v1 → v2: procedimiento paso a paso",[72,75,78,81,84,87],{"title":73,"body":74},"Actualizar la imagen en docker-compose.yml","Abra su archivo `docker-compose.yml` y sustituya el tag de la imagen:\n```yaml\n# Antes\nimage: louislam\u002Fuptime-kuma:1\n# Después\nimage: louislam\u002Fuptime-kuma:2\n```\nSi utiliza el tag `latest`, prefiera un tag de versión explícito como `louislam\u002Fuptime-kuma:2.5.9` (última versión, octubre de 2026) para evitar regresiones en una futura actualización automática de versión, y siga los avisos de seguridad del repositorio para actualizarlo. Evite los tags `rootless` para esta migración: la guía oficial los desaconseja al venir de v1.",{"title":76,"body":77},"Descargar la nueva imagen","Obtenga la imagen v2 antes de arrancar el servicio:\n```bash\ndocker pull louislam\u002Fuptime-kuma:2\n```\nCompruebe que la imagen está presente: `docker images | grep uptime-kuma`.",{"title":79,"body":80},"Arrancar el contenedor v2","Inicie el servicio. Docker Compose detecta el cambio de imagen y recrea el contenedor:\n```bash\ndocker compose up -d\n```\nEspere la confirmación `Container uptime-kuma Started`.",{"title":82,"body":83},"Seguir la migración de la base de datos","En el primer arranque, Uptime Kuma migra el esquema SQLite al formato v2. Esta operación puede durar desde unos segundos hasta varias horas según el tamaño de la base y la velocidad del hardware:\n```bash\ndocker compose logs -f uptime-kuma\n```\nNo interrumpa el contenedor durante esta fase. Espere una línea que confirme el final de la migración antes de continuar.",{"title":85,"body":86},"Comprobar el healthcheck","Compruebe que el contenedor está en estado `healthy`:\n```bash\ndocker compose ps\n```\nLa columna `Status` debe mostrar `healthy`. Si permanece en `starting` más de dos minutos después del final de los logs de migración, consulte los logs para identificar el error.",{"title":88,"body":89},"Confirmar la versión activa en la interfaz","Conéctese a la interfaz web. Vaya a **Configuración → Acerca de** y compruebe que la versión mostrada empieza por `2.`. Confirme que todos sus monitores están presentes y que sus estados corresponden al estado real de sus servicios.",{"type":38,"title":91,"body":92},"Comprobaciones posteriores a la migración","Una migración correcta no se limita a un contenedor que arranca. Repase estos puntos antes de dar la operación por terminada.\n\n**Monitores.** Abra el panel y compare el número de monitores con su inventario v1. Un monitor ausente puede indicar un problema de migración parcial: revise los logs de nivel `ERROR` o `WARN`.\n\n**Notificaciones.** Lance manualmente una notificación de prueba para cada canal configurado (email, Telegram, webhook). En v2, las plantillas del email (SMTP) pasan de un reemplazo por expresión regular a LiquidJS: las variables distinguen mayúsculas y minúsculas y una variable desconocida se ignora sin error. Aproveche para auditar la plantilla de cada notificación y eliminar cualquier contenido inesperado (etiquetas `{% %}`, filtro `valueOf`): es el vector de CVE-2026-45618.\n\n**Página de estado.** Si expone una página de estado pública, compruebe que responde correctamente y que lista los servicios correctos. La URL y el slug se conservan tras la migración.\n\n**Certificados SSL.** Las sondas TLS reinician su ciclo de verificación tras la migración. Un certificado próximo a caducar antes de la migración puede disparar una alerta de inmediato: compruebe la fecha real antes de tratarlo como una regresión.",{"type":94,"title":95,"body":96},"tip","Refuerzo de la instancia tras la migración","**Autenticación obligatoria.** En v2, la autenticación está activada por defecto. Compruebe en Configuración → Seguridad que el acceso sin contraseña está desactivado. En una instancia recién desplegada y sin cuenta configurada, la interfaz es públicamente accesible durante la configuración inicial: cree la cuenta de administrador en los primeros minutos tras el primer arranque.\n\n**Subdominio dedicado detrás de un reverse proxy.** No exponga Uptime Kuma en un puerto directo (`:3001`). Colóquelo detrás de Nginx o Caddy en un subdominio dedicado (`status.sudominio.com`) con TLS. Un `ufw deny 3001` no basta: los puertos publicados por Docker eluden las reglas de ufw. Publique el puerto solo en la interfaz local en `docker-compose.yml` (`\"127.0.0.1:3001:3001\"`) para que solo el reverse proxy lo alcance.\n\n**Fail2ban o CrowdSec delante del proxy.** Añada una regla de detección de fuerza bruta sobre los intentos de conexión a la interfaz. El Hub de CrowdSec ofrece una colección comunitaria, `timokoessler\u002Fuptime-kuma`, con un escenario de fuerza bruta. Consulte el artículo \u003Ca href=\"\u002Fes\u002Fblog\u002Fproteger-vps-con-crowdsec\">Proteger su VPS con CrowdSec\u003C\u002Fa> para el procedimiento completo.\n\n**Aislamiento de red.** Coloque Uptime Kuma en una red Docker dedicada. Solo necesita acceder a los objetivos que supervisa, no a las bases de datos de producción ni a las API internas.",{"type":38,"title":98,"body":99},"Solución de problemas: errores frecuentes","**Volumen incompatible o base dañada.** Si los logs muestran `SQLITE_ERROR: no such table` o `database disk image is malformed`, la base montada no es válida o la copia se hizo con la base en plena escritura. Restaure el archivo, detenga el contenedor correctamente y reinicie el procedimiento desde el paso de copia de seguridad.\n\n**Puerto 3001 ya ocupado.** Un error `port is already allocated` o `address already in use` en el puerto 3001 indica que un proceso ya utiliza ese puerto. Identifíquelo con `ss -tlnp | grep 3001` y deténgalo, o modifique el mapeo en `docker-compose.yml` (por ejemplo `127.0.0.1:3002:3001`) y actualice la configuración del reverse proxy.\n\n**Plantilla de notificación rechazada tras la migración.** Si un canal de notificación muestra un error de plantilla, la plantilla contiene una sintaxis que LiquidJS rechaza; en v1, el email SMTP no usaba LiquidJS sino un simple reemplazo por expresión regular. Edite la plantilla afectada en Configuración → Notificaciones y elimine o corrija las etiquetas erróneas.\n\n**Certificado TLS mostrado como caducado.** Las sondas TLS reinician su ciclo tras la migración. Compruebe la fecha real con `echo | openssl s_client -connect your-domain.com:443 -servername your-domain.com 2>\u002Fdev\u002Fnull | openssl x509 -noout -dates` antes de tratar esta alerta como un incidente.\n\n**Contenedor en bucle de reinicio.** Si la migración falla y la política es `restart: always` o `unless-stopped`, Docker reinicia el contenedor indefinidamente. Cambie a `restart: \"no\"` (entre comillas en YAML), corrija el problema a partir de los logs y después restaure la política original.",{"type":38,"title":101,"body":102},"Qué protege esta migración","Migrar a Uptime Kuma 2.x cierra CVE-2026-45618 en una superficie directamente accesible desde la interfaz de administración. Para una agencia que gestiona el parque de varios clientes desde una instancia compartida, esa superficie es proporcional al número de cuentas y de monitores configurados: cada cliente adicional ampliaba el perímetro expuesto.\n\nLa v2 aporta además cambios estructurales que reducen la superficie de ataque a largo plazo: imágenes Docker rootless ofrecidas como opción (tags `2-rootless`), dependencias mantenidas activamente y una espera de 14 días antes de incorporar nuevas versiones de dependencias npm (`min-release-age=14` en el `.npmrc` del proyecto), para limitar los ataques a la cadena de suministro.\n\nCon una oferta Agency de ServOrbit.com, crea y sigue las cuentas cPanel de sus clientes desde un solo espacio.","Las cuentas cPanel de sus clientes, en un mismo lugar","Con una oferta Agency de ServOrbit.com, crea y sigue las cuentas cPanel de sus clientes desde un solo espacio. Usted gestiona la relación con el cliente, nosotros mantenemos la infraestructura.","Descubrir la oferta para agencias","\u002Fsolutions\u002Fagences",[108,126,145],{"id":109,"slug":110,"slugs":111,"title":115,"excerpt":116,"readTime":23,"views":117,"isPinned":19,"noindex":19,"publishedAt":118,"updatedAt":119,"category":120,"categories":121,"featuredImage":30,"bgImage":31,"posterImage":123,"relatedSolution":124},105,"supervisar-vps-con-uptime-kuma",{"fr":112,"en":113,"ar":114,"es":110},"superviser-vps-uptime-kuma","monitoring-your-vps-with-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","Supervisar su VPS con Uptime Kuma","Despliegue Uptime Kuma en su VPS para supervisar sus sitios y servicios en self-hosted, con alertas y página de estado pública.",0,"2026-03-07T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[122],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":125,"appSlug":34},"monitorizacion-observabilidad",{"id":127,"slug":128,"slugs":129,"title":133,"excerpt":134,"readTime":135,"views":18,"isPinned":19,"noindex":19,"publishedAt":136,"updatedAt":137,"category":138,"categories":139,"featuredImage":30,"bgImage":31,"posterImage":141,"relatedSolution":142},108,"proteger-vps-con-crowdsec",{"fr":130,"en":131,"ar":132,"es":128},"securiser-vps-crowdsec","securing-your-vps-with-crowdsec","تأمين-خادمك-الافتراضي-vps-باستخدام-crowdsec","Proteger su VPS con CrowdSec","Despliegue CrowdSec en su VPS para bloquear los ataques gracias a una detección de comportamiento y a una blocklist comunitaria compartida.",4,"2026-03-04T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[140],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsecuriser-vps-crowdsec-poster.svg",{"categorySlug":143,"appSlug":144},"ciberseguridad-bastion","crowdsec",{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":155,"isPinned":19,"noindex":19,"publishedAt":156,"updatedAt":157,"category":158,"categories":159,"featuredImage":30,"bgImage":31,"posterImage":161,"relatedSolution":162},106,"monitorizacion-vps-grafana-prometheus",{"fr":149,"en":150,"ar":151,"es":147},"monitoring-vps-grafana-prometheus","vps-monitoring-with-grafana-and-prometheus","مراقبة-الخادم-الافتراضي-vps-باستخدام-grafana-و-prometheus","Monitorización de VPS con Grafana y Prometheus","Despliegue Prometheus 3.x, Grafana 13.x, Node Exporter y Alertmanager en su VPS con Docker Compose. Paneles, alertas y bastionado.",11,1,"2026-03-06T00:00:00+00:00","2026-10-05T14:05:27+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[160],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmonitoring-vps-grafana-prometheus-poster.svg",{"categorySlug":125,"appSlug":163},"grafana",true,1794270629412]