Problema

En entornos de Remote Desktop Services (RDS) con Windows Server 2025 (o Windows 11 24H2) es frecuente que los usuarios marcados con “User must change password at next logon” no puedan iniciar sesión mediante RDP. En lugar de aparecer el cuadro de cambio de contraseña, el cliente muestra el mensaje “You must change your password before logging on the first time” y la conexión se cierra. El mismo comportamiento se reproduce con herramientas de línea de comandos como runas o net use, devolviendo el error 1907 (The user’s password must be changed before signing in).

El síntoma se manifiesta independientemente de:

  • Si la conexión pasa por RD Gateway, RD Broker o se dirige directamente al Session Host.
  • El tipo de cliente (Thin Client, Windows 11, cliente RDP nativo o de terceros).
  • La política de contraseñas (solo la política de dominio, sin PSO ni Fine‑Grained Password Policies).

En la práctica, cualquier intento de autenticación que dependa de Network Level Authentication (NLA) y CredSSP falla en la fase de “first‑logon password change”.

Causa

El proceso de cambio de contraseña en el primer inicio de sesión está estrechamente ligado a la negociación de credenciales que realiza NLA. Cuando NLA está habilitado, el cliente envía un ticket Kerberos o NTLM cifrado mediante CredSSP antes de que el servidor haya creado la sesión interactiva. Si el controlador de dominio informa que la cuenta requiere un cambio de contraseña, el servidor RDS no tiene una sesión de usuario donde presentar el diálogo de cambio; simplemente aborta la autenticación y devuelve 1907.

Los escenarios que suelen desencadenar este comportamiento son:

  1. Controladores de dominio “fantasma” o metadatos obsoletos – Un DC que fue eliminado sin democión deja referencias en AD y en DNS. Los controladores restantes pueden intentar validar la cuenta contra el DC inexistente, lo que provoca que la respuesta de “password must be changed” no se propague correctamente a la capa CredSSP.
  2. Desincronización de los relojes – CredSSP verifica la validez temporal del ticket. Un desfase de más de 5 minutos entre cliente, servidor RDS y DC puede hacer que la petición de cambio sea rechazada antes de que el servidor la procese.
  3. Política de “Password must change at next logon” aplicada a cuentas que nunca han completado un logon interactivo – En entornos donde la única forma de acceso es a través de RDP, la cuenta nunca llega a crear una sesión local que permita el cambio de contraseña.
  4. Configuración de seguridad de CredSSP – Desde Windows 10 1809 y Server 2019, Microsoft introdujo la validación de la firma de CredSSP. Si el cliente y el servidor no coinciden en la versión de la política (por ejemplo, “AllowEncryptionOracle” deshabilitado), la negociación falla antes de que el servidor pueda solicitar el cambio de contraseña.

En la mayoría de los casos, el problema desaparece al desactivar NLA o al forzar la autenticación basada en TLS (RDP sin CredSSP). Sin embargo, esa solución rompe la capa de seguridad que NLA aporta y no es aceptable en entornos productivos.

Solución

La estrategia consiste en restaurar una cadena de confianza completa entre el cliente, el servidor RDS y los controladores de dominio, y ajustar la configuración de CredSSP/NLA para que permita la fase de cambio de contraseña. Los pasos se pueden aplicar de forma genérica a cualquier versión de Windows Server que utilice RDS y NLA.

1. Verificar y limpiar controladores de dominio huérfanos

  1. Ejecutar repadmin /showrepl en cada DC y buscar entradas con estado Failed o Missing que apunten a un DC que ya no exista.
  2. Si aparecen controladores inexistentes, ejecutar:
repadmin /removemaster <NombreDCObsoleto> <NombreDominio>
  1. Eliminar los registros DNS correspondientes (_msdcs.<dominio>, DC=<nombre>,CN=Domain Controllers) y, si es necesario, usar ntdsutil para limpiar metadatos:
ntdsutil
metadata cleanup
remove selected server <NombreDCObsoleto>
quit
quit
  1. Forzar la replicación con repadmin /syncall /AdeP.

2. Sincronizar relojes

Asegurarse de que todos los servidores (DC, RD Gateway, RD Broker, Session Hosts) y los clientes usan la misma fuente NTP. En cada nodo:

w32tm /config /manualpeerlist:"time.windows.com,0x1" /syncfromflags:manual /reliable:yes /update
w32tm /resync /nowait

Verificar la diferencia con w32tm /query /status.

3. Ajustar la política de CredSSP

En los servidores RDS, habilitar la opción “Allow delegating fresh credentials with NTLM-only server authentication” para que CredSSP acepte la solicitud de cambio de contraseña aunque el ticket aún no esté completamente validado.

  1. Abrir gpedit.mscComputer Configuration → Administrative Templates → System → Credentials Delegation.
  2. Habilitar “Allow delegating fresh credentials with NTLM-only server authentication” y añadir TERMSRV/* a la lista.
  3. Aplicar la política con gpupdate /force.

En entornos donde la política de seguridad es más estricta, se puede crear una excepción mediante registro:

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2 /f

Nota: El valor 2 permite la delegación de credenciales sin validar la firma del servidor. Use con precaución y solo en redes controladas.

4. Habilitar “Password change on first logon” mediante RDP

A partir de Windows Server 2022, Microsoft introdujo la capacidad de forzar el cambio de contraseña a través de NLA usando el parámetro forcecredsspsupport:i:1 en el archivo .rdp. Para entornos que ya usan archivos RDP personalizados, añada:

enablecredsspsupport:i:1
authentication level:i:2

Esto indica al cliente que la autenticación debe realizarse mediante CredSSP pero permite que el servidor solicite el cambio de contraseña una vez que la negociación haya concluido.

5. Validar la cuenta con una sesión local antes del primer acceso remoto

Como medida preventiva, cree una cuenta de prueba, inicie sesión localmente en el Session Host (con teclado y monitor o mediante consola de hypervisor) y cambie la contraseña allí. Esto “marca” la cuenta como ya haber completado un primer logon interactivo, evitando que NLA bloquee el acceso remoto.

Cuándo aplicar esta solución

Aplica cuando se presenten los siguientes indicadores:

  • Error 1907 en runas, net use o al iniciar sesión RDP.
  • Mensaje “You must change your password before logging on the first time” sin cuadro de cambio.
  • El problema ocurre en varios servidores RDS y no se limita a un solo host.
  • Se está usando NLA/CredSSP (valor predeterminado en Windows 10/11 y Server 2019+).

No aplica si:

  • La política de contraseñas está configurada para permitir cambios sin requerir un logon previo (por ejemplo, mediante Self‑Service Password Reset).
  • El entorno está completamente aislado de AD (por ejemplo, RDS en un dominio workgroup).
  • La solución de desactivar NLA es aceptable por requisitos de seguridad (aunque no recomendado).

Código

# 1. Eliminar metadatos de un DC huérfano
ntdsutil
metadata cleanup
remove selected server DC-Obsoleto
quit
quit

# 2. Forzar replicación y comprobar estado
repadmin /syncall /AdeP
repadmin /showrepl

# 3. Sincronizar reloj en cada nodo
w32tm /config /manualpeerlist:"time.windows.com,0x1" /syncfromflags:manual /reliable:yes /update
w32tm /resync /nowait

# 4. Habilitar delegación de credenciales (registro)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2 /f

Verificación

  1. Prueba de credenciales: Ejecutar runas /user:DOM\testuser cmd. La ventana debe abrirse sin error 1907.
  2. Conexión RDP: Crear un archivo .rdp con enablecredsspsupport:i:1 y conectarse. Aparecerá el cuadro de cambio de contraseña; después de cambiarla, la sesión debe iniciarse correctamente.
  3. Replicación: En cada DC, repadmin /showrepl debe listar todos los partners con estado Success.
  4. Sincronización horaria: w32tm /query /status debe mostrar una diferencia menor a 5 segundos entre los nodos.
  5. Registro de eventos: Revisar el visor de eventos en Security y System en los Session Hosts; no deben aparecer eventos 4625 con sub‑status 0xC0000234 (password must change).

Notas adicionales

  • Backup antes de tocar AD – Siempre exporte una copia de seguridad de AD (ntdsutil "activate instance ntds" "ifm" "create full c:\ADBackup").
  • Impacto de AllowEncryptionOracle – Esta configuración reduce la protección contra ataques de “Man‑in‑the‑Middle” en CredSSP. Limítela a redes totalmente controladas y revísela después de completar los cambios de contraseña.
  • Política de expiración – Si la organización usa expiración de contraseñas, considere habilitar Self‑Service Password Reset (SSPR) para evitar este tipo de bloqueos en entornos RDS.
  • Monitoreo – Añada una alerta en System Center o en el SIEM que detecte el Event ID 4625 con sub‑status 0xC0000234; esto permite identificar rápidamente nuevos casos de bloqueo.

Con estos pasos se restablece la cadena de confianza entre NLA y el proceso de cambio de contraseña, evitando que los usuarios queden atrapados en un bucle de error 1907 y manteniendo la capa de seguridad que NLA proporciona.