github Devolutions/devolutions-gateway v2026.3.1

5 hours ago

Security

  • agent: use TLS for PowerShell Universal gRPC over HTTPS (#2017) (d0f13ef9ff) (PSU-1420)

    Previously, a PowerShell Universal Agent configured with an https:// ServerUrl connected without TLS, so its AppToken could have been sent unencrypted.
    The connection now uses TLS with the system's trusted root certificates, and plain http:// URLs keep working.
    If you configured an HTTPS ServerUrl on 2026.3.0 or earlier, rotate the AppToken.

Features

  • agent,agent-installer: make the package broker available (#1975) (504e9908ba) (#1977) (a9e1555a66) (#1978) (16658918bb) (#1980) (e9934c2aee) (#2020) (f52641f2e3) (#2023) (b0b5d86b7c) (#2024) (45a51c2137) (#2025) (5fcfa7fc64) (#2037) (446842aabc)

    The package broker runs package manager operations requested by Windows users, as allowed by an administrator-managed JSON package policy.
    Enable it with the Package Broker feature of the Agent installer, which is off by default; for unattended installs, add F.PackageBroker to ADDLOCAL.
    The installer doesn't deploy a policy: the broker rejects package requests until one is deployed, by default in %ProgramData%\Devolutions\PackageBroker\.
    Administrators can validate and manage the policy through the broker API, and policy changes and rejected change attempts are logged to the Windows Event Log.
    Deny rules match whenever a request might fall within them, while Allow rules require a definite match.
    The broker verifies the calling process and its signature, resolves package manager executables as the requesting user, and validates package ids, versions, source names and install locations before running a package manager.

  • agent: clarify RDP Extension description (#1998) (722227d326)

    The Agent installer describes the RDP Extension as enabling RDP session features such as remote execution, jump sessions and remote logoff.

  • agent: remove experimental label from PowerShell Universal Agent (#2016) (3a3714e0a4)

    The Agent installer no longer marks the PowerShell Universal Agent feature as experimental.

  • installer: support custom service accounts (2f382935c2)

    Choose a custom service account when installing Devolutions Gateway, and keep the existing identity during upgrades.
    Regular users, managed service accounts and the Gateway virtual account are supported.
    Regular user accounts require their password again on each major upgrade.

  • agent: support custom Gateway service accounts (c5dd1e9e57)

    Gateway updates follow the selected Gateway service account.
    Unattended updates are limited to passwordless accounts, and the Agent reports when an update requires credentials supplied manually.

  • dgw,installer: configure service accounts from PowerShell (1d09b259b3)

    Install or upgrade Gateway on Windows under a chosen service account from PowerShell.
    Failed installations now report the MSI error and keep diagnostic logs.
    Password-based accounts require credentials again for major upgrades, and the password is visible to privileged users who can inspect process command lines.

  • agent,agent-installer: refresh Agent branding (#2018) (86df61e965)

    The service, shell extension, Desktop Agent tray and installer use the new Agent icon and images.

  • dgw: list Gateway-generated artifacts in the recording manifest (#2003) (4e18d9c1a7)

    The recording manifest format supports an artifacts object next to files for Gateway-generated, non-playable files such as a future AI analysis.
    Gateway doesn't generate any artifacts yet; artifacts is omitted when empty, so manifests are unchanged.

  • dgw: honor an explicit agent on JMUX tokens (#2021) (20e5861680) (DGW-451)

    JMUX tokens can name an explicit agent with jet_agent_id, as association tokens already do.
    Every JMUX channel of the session then goes through that agent or fails with OPEN_FAILURE, without falling back to a direct connection or route matching.
    If Agent Tunnel is disabled, the session is rejected up front; tokens without the claim keep working as before.
    The .NET JmuxClaims and tokengen support the optional claim.

  • agent,agent-installer: add Swedish localization (#2031) (f13a9a1615)

    Devolutions Agent now installs in Swedish on systems using a Swedish UI language, and the Desktop Agent tray menu and messages are translated.
    Swedish was contributed by Daniel Nylander.

  • dgw: stream reconnecting WebM sessions (#1942) (81a3141c5e) (RDMW-24281)

    Live shadowing of a WebM recording keeps playing when the recorded session reconnects or changes size: Gateway re-encodes the clips into fixed-size segments and streams them over one WebSocket.
    Players opt in with the jrec-shadow.v2 WebSocket subprotocol and get a SegmentStarted message before each new segment; other players' streams end cleanly at the first reconnect or resize instead of freezing.
    Viewers get StreamEnded when the recorded session disconnects and can't reconnect, and requests that can't be streamed are closed with 4001, 4002 or 4003 instead of failing the upgrade.

  • webapp: play session-protocol WebM streams (#1943) (62de985e3e) (RDMW-24281)

    The shadow player keeps playing live recordings that reconnect or change size, with its own controls and one timeline across segments.
    Against an older Gateway, it reconnects without jrec-shadow.v2 and plays the single segment that Gateway sends.

Bug Fixes

  • agent: start the session process only for remote sessions (#1995) (13919492a0)

    The Devolutions Session process is no longer started in console sessions, where it can't serve the RDP dynamic virtual channel and exited with an error.

  • dgw: identify subscriber requests (#1996) (ad4d129051)

    Every subscriber notification carries a versioned Devolutions Gateway User-Agent header so endpoints can identify the caller.

  • installer: respect certificate store context (912fd9a889)

    Certificate warnings are resolved against the existing or selected service account.
    Manually managed user or service certificate stores are kept only when the service account is unchanged, and named machine stores are supported.

  • agent: report product update failures alongside an Agent self-update (28da053f73)

    Product update failures are now published even when an Agent self-update in the same run succeeds.

  • agent: improve PowerShell Universal Agent connection resilience (#2022) (7b512121bc)

    The PowerShell Universal Agent now recovers on its own from conditions that previously required a service restart.
    A $secret: AppToken is resolved on every connection attempt with a 30-second limit, silently dropped connections are detected with TCP and HTTP/2 keepalives, and connection attempts are bounded by timeouts.
    A job that stops reading its input no longer stalls other jobs, stop requests or service shutdown; memory is bounded to 64 MiB per job and 256 MiB for all jobs.
    ServerUrl must now use the http or https scheme: other schemes such as grpcs previously connected in plaintext and are now rejected at startup.
    The AppToken, and any credentials or query parameters in ServerUrl, are no longer written to logs.

  • agent: harden PowerShell Universal Agent job supervision (#2030) (abe40edfc1)

    A job whose stdin input makes no progress for 5 minutes is now stopped, reported as "no stdin consumed for 300s while input was unread", even when its backlog is below the 16 MiB stall threshold.
    A $secret: AppToken lookup completes when the PowerShell worker exits, even if a vault helper keeps its output open.
    Stop requests apply while the process start notification is held back, failed resumes are reported as start failures, and gracefully stopped jobs are reported as canceled.

  • agent: make PowerShell Universal Agent stdin limits and job start more reliable (#2032) (b4ad554637)

    Jobs stopped for exceeding a stdin limit can no longer make the Agent buffer more than 64 MiB beyond the per-connection stdin budget.
    Stalled jobs are stopped only when that frees enough budget for the incoming input; otherwise, only the job receiving it fails.
    On Windows, a job no longer fails to start when a thread injected into its process, for example by security software, exits before the Agent resumes the process.

  • webapp: honor the RDP port in the host field (#2038) (92b746928e)

    RDP sessions started from the standalone web client now use a non-default port entered as host:port, as the SSH, VNC and ARD clients already did, instead of always connecting to 3389.

Don't miss a new devolutions-gateway release

NewReleases is sending notifications on new releases.