← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-6787 · CWE-321 · Disclosed 2026-05-06

Use of Hard-coded Cryptographic Key vulnerability in WatchGuard Agent on Windows

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a spare master key hidden inside the janitor’s closet, not the front door to the building

CVE-2026-6787 is a *local* flaw in WatchGuard Agent on Windows caused by a hard-coded cryptographic key. On affected WatchGuard Agent for Windows versions up to and including 1.25.02.0000, a low-privileged local user can abuse that embedded key to help include attacker-controlled code into an existing process. On its own, this is already bad design; in practice, WatchGuard frames it as part of a chained privilege-escalation path to NT AUTHORITY\SYSTEM alongside CVE-2026-6788.

The vendor's HIGH label matches the *technical impact* but overshoots the *enterprise patch priority* once you audit the friction. This is not unauthenticated remote access, not internet-reachable, not KEV-listed, and not backed by meaningful EPSS or public exploitation evidence. The real risk is that endpoint agents run with elevated trust, so once an attacker already lands on a Windows host, this can turn a minor foothold into full local control.

"Real bug, real SYSTEM impact, but it is a post-compromise local chain with very low exploitation pressure"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Gain a low-privileged foothold on a Windows endpoint

The attacker first needs code execution or an interactive logon as a normal user on a host that has the vulnerable WatchGuard Agent installed. In real operations that usually means phishing, malware, stolen credentials, or abuse of another software flaw. *Weaponized tool:* whatever delivered the foothold; there is no public named exploit chain for this CVE yet.
Conditions required:
  • Attacker has local code execution or a valid low-privileged account
  • Target runs WatchGuard Agent for Windows <= 1.25.02.0000
Where this breaks in practice:
  • This is already post-initial-access; the attacker is on the box
  • Only endpoints with the Windows agent installed are in scope
  • EDR, application control, and user-rights hardening can stop or expose the foothold stage
Detection/coverage: Exposure scanners can identify installed version, but they cannot prove exploitability from outside because the precondition is local access.
STEP 02

Abuse the embedded key to influence a trusted process

Per NVD/CVE, the hard-coded key can be used to enable inclusion of code in an existing process. That makes the agent's trust boundary meaningless: secrets that should separate trusted from untrusted input are effectively shared with the attacker. *Weaponized tool:* no public PoC is named; expect a custom local loader or helper binary derived from reverse engineering the agent.
Conditions required:
  • Attacker can read or reverse engineer local agent components
  • The vulnerable code path is reachable by an unprivileged local user
Where this breaks in practice:
  • There is no broadly circulated exploit kit or commodity PoC
  • Reverse engineering effort is higher than one-click LPEs
  • Modern EDR can flag suspicious code injection or tampering against security software processes
Detection/coverage: Behavioral telemetry is more valuable than signature matching here: look for abnormal child processes, memory injection, or tampering with WatchGuard-related binaries and services.
STEP 03

Chain with CVE-2026-6788 to complete SYSTEM escalation

WatchGuard's own advisory describes CVE-2026-6787 and CVE-2026-6788 as *chained agent service vulnerabilities* enabling local privilege escalation to SYSTEM. The second bug is an uncontrolled search path issue, which likely supplies the attacker-controlled file-loading leg needed to convert process influence into privileged execution. *Weaponized tool:* attacker-controlled DLL/binary placed in a searched path, again with no public named exploit released.
Conditions required:
  • The companion flaw CVE-2026-6788 is also present
  • The attacker can place files in a reachable path/location
Where this breaks in practice:
  • This is not a clean single-bug win; it depends on a chain
  • File-write controls, WDAC/AppLocker, and EDR can break the malicious-file stage
  • Some environments restrict writable paths well enough to raise attacker cost
Detection/coverage: Version-based scanners should flag both CVEs on vulnerable builds. Hunt for unexpected DLLs/binaries near WatchGuard service load paths and for service-start events followed by unsigned module loads.
STEP 04

Operate as NT AUTHORITY\SYSTEM and blind the host

Once SYSTEM is obtained, the attacker can disable protections, tamper with files, implant persistence, dump local secrets, and use the endpoint as a stronger beachhead. Because the target is an endpoint security agent, the optics are worse than a random desktop app: compromise lands inside a trusted operational component. *Weaponized tool:* common post-exploitation utilities or native Windows service-control and task-scheduling functions.
Conditions required:
  • Privilege escalation chain succeeds
  • Host defenses do not block privileged post-exploitation actions
Where this breaks in practice:
  • Blast radius is one host at a time unless the attacker already has lateral movement capability
  • Enterprise logging often catches service disablement, scheduled task creation, or token abuse after SYSTEM is gained
Detection/coverage: Strong EDR should catch follow-on actions even if it misses the exact exploit sequence. Watch for service stoppage, policy changes, new local admins, LSASS access, and persistence creation immediately after WatchGuard service anomalies.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public evidence of active exploitation found. CVE-2026-6787 is not in CISA KEV, and the Baden-Württemberg cyber defense note said there were *no current findings on attackers* at publication.
Proof-of-concept availabilityNo verified public PoC repo or named exploit tool surfaced in primary-source review. That raises attacker effort compared with commodity LPE bugs.
EPSS0.00013 per the user-supplied intel and mirrored by Tenable — effectively near-floor exploitation likelihood, which is strong downward pressure on urgency.
KEV statusNot listed in the CISA Known Exploited Vulnerabilities Catalog as reviewed. No KEV date applies.
CVSS vector reality checkCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H means local access and low privileges are enough, but *local* is doing a lot of work. This is post-compromise severity, not edge-exposure severity.
Affected versionsWatchGuard Agent on Windows <= 1.25.02.0000 is affected, per WatchGuard and NVD.
Fixed versionVendor fix is WatchGuard Agent on Windows 1.25.03.0000. No workaround was published by WatchGuard.
Exposure / scanning realityThere is no meaningful internet exposure census here because this is an endpoint-local agent flaw, not a remotely reachable service bug. *Inference from the local attack vector and product role:* Shodan/Censys-style external enumeration is largely irrelevant to prioritization.
Disclosure datePublished by WatchGuard on 2026-05-06; NVD published on 2026-05-06 and added v3.1 enrichment on 2026-05-11.
Reporter / attributionWatchGuard's public advisory does not credit an external researcher. Public reporting attributes the issue to WatchGuard's PSIRT disclosure only.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.9/10)

The decisive factor is attacker position: exploitation requires an existing local foothold on a Windows host with the WatchGuard agent installed, which makes this a post-compromise privilege-escalation path rather than an initial-access event. SYSTEM impact keeps it out of LOW, but the combination of local-only reachability, chain dependency, and negligible exploitation evidence keeps it out of HIGH.

HIGH Affected version range and fixed version
HIGH Exploit preconditions are local and post-compromise
MEDIUM Practical exploit chain details beyond the vendor's brief description

Why this verdict

  • Downgrade for attacker position: AV:L + PR:L means the attacker already has code execution or a user session on the endpoint. That is a major real-world narrowing versus remotely reachable bugs.
  • Downgrade for chain dependency: WatchGuard explicitly describes this as part of a *chained* path with CVE-2026-6788, so CVE-2026-6787 is not the whole kill chain by itself.
  • Downgrade for exploitation pressure: EPSS is effectively floor-level, there is no KEV entry, and no verified public PoC or campaign evidence turned up in primary-source review.
  • Hold at MEDIUM for impact: If the chain is used successfully, the result is NT AUTHORITY\SYSTEM on a protected endpoint, which is absolutely meaningful for lateral movement, defense evasion, and persistence.

Why not higher?

This is not an unauthenticated remote bug, not an internet-facing service issue, and not a one-bug-to-domain-compromise story. The reachable population is limited to hosts running a specific Windows agent, and the attacker must already be on the machine with at least low privileges before this matters.

Why not lower?

Local privilege escalation on an endpoint security or management agent is still operationally important because those components sit in trusted positions on the box. Once exploited, the attacker can jump from a weak foothold to SYSTEM and then disable controls or establish durable persistence, so dismissing it as hygiene would understate the damage potential.

05 · Compensating Control

What to do — in priority order.

  1. Harden local execution policy — Use WDAC or AppLocker to restrict unsigned or user-writable binaries and DLLs on endpoints running WatchGuard Agent. This directly raises friction against the malicious-file and process-injection stages of the chain; because the verdict is MEDIUM, there is no mitigation SLA — go straight to the 365-day remediation window, but apply this sooner on admin workstations and jump hosts if already available.
  2. Tighten user rights on WatchGuard hosts — Reduce local interactive logon where not needed, remove stale local users, and review who can write to service-adjacent directories. This cuts off the low-privileged foothold and file-placement assumptions the chain relies on; with MEDIUM severity, fold it into normal hardening work while patching inside the 365-day window.
  3. Hunt for service tampering — Create detections for WatchGuard service changes, unexpected child processes, suspicious module loads, and abrupt security-agent stoppage. These controls do not fix the bug, but they improve odds of catching abuse if an attacker is already on the host; use them as part of standard monitoring while remediation is scheduled.
  4. Prioritize high-value endpoint rings — Move shared admin endpoints, jump boxes, help-desk systems, and any Windows servers running the agent into the earliest upgrade ring. Even without a formal mitigation SLA, those systems amplify the value of a local SYSTEM escalation and deserve earlier treatment than ordinary user laptops.
What doesn't work
  • Perimeter firewall changes do not solve this, because the exploit path is local rather than internet-exposed.
  • MFA does not stop an attacker who already has local code execution or has stolen a session on the endpoint.
  • Network vulnerability scans alone are weak here; they can inventory the version, but they cannot meaningfully validate exploitability of a local chain from off-host.
06 · Verification

Crowdsourced verification payload.

Run this on the target Windows host or through your EDR/RMM remote shell. Invoke with powershell.exe -ExecutionPolicy Bypass -File .\check-watchguard-agent-cve-2026-6787.ps1; no admin rights are usually required for registry reads, but elevated rights help if you want to expand it later to inspect service paths.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
# check-watchguard-agent-cve-2026-6787.ps1

# Purpose: Detect whether WatchGuard Agent for Windows is vulnerable to CVE-2026-6787 based on installed version.

# Output: VULNERABLE / PATCHED / UNKNOWN

# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN


$ErrorActionPreference = 'SilentlyContinue'
$fixedVersion = [version]'1.25.3.0'

function Get-WGAgentVersion {
    $paths = @(
        'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
        'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
    )

    $hits = foreach ($path in $paths) {
        Get-ItemProperty $path | Where-Object {
            $_.DisplayName -match 'WatchGuard Agent'
        } | Select-Object DisplayName, DisplayVersion, Publisher, InstallLocation
    }

    if ($hits) {
        $best = $hits | Where-Object { $_.DisplayVersion } | Select-Object -First 1
        if ($best -and $best.DisplayVersion) {
            return $best.DisplayVersion
        }
    }

    # Fallback: inspect common service binary paths if uninstall entry was not found

    $candidatePaths = @(
        'C:\Program Files\WatchGuard\*\*.exe',
        'C:\Program Files (x86)\WatchGuard\*\*.exe'
    )

    foreach ($pattern in $candidatePaths) {
        $file = Get-ChildItem -Path $pattern -Recurse -File | Select-Object -First 1
        if ($file) {
            return $file.VersionInfo.ProductVersion
        }
    }

    return $null
}

$rawVersion = Get-WGAgentVersion

if (-not $rawVersion) {
    Write-Output 'UNKNOWN: WatchGuard Agent not found or version could not be determined.'
    exit 2
}

# Normalize 4-part version like 1.25.03.0000 -> 1.25.3.0

try {
    $normalized = ($rawVersion -replace '^v','').Trim()
    $parts = $normalized.Split('.')
    while ($parts.Count -lt 4) { $parts += '0' }
    $parts = $parts[0..3] | ForEach-Object { [int]$_ }
    $installedVersion = [version]::new($parts[0], $parts[1], $parts[2], $parts[3])
}
catch {
    Write-Output "UNKNOWN: Found WatchGuard Agent version '$rawVersion' but failed to parse it."
    exit 2
}

if ($installedVersion -lt $fixedVersion) {
    Write-Output "VULNERABLE: WatchGuard Agent version $installedVersion is older than fixed version $fixedVersion."
    exit 1
}
else {
    Write-Output "PATCHED: WatchGuard Agent version $installedVersion is at or above fixed version $fixedVersion."
    exit 0
}
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, pull an inventory of every Windows endpoint running WatchGuard Agent and split them into high-value rings first: admin workstations, jump hosts, shared IT systems, and any servers using the agent. This is a post-compromise LPE, so there is no noisgate mitigation SLA — go straight to the 365-day remediation window; still, you should schedule the vendor upgrade to 1.25.03.0000 in your normal endpoint release train rather than let it drift. For formal tracking, treat the upgrade as due within the noisgate remediation SLA of 365 days, while using existing application-control and EDR telemetry to watch for service tampering or suspicious local privilege escalation attempts in the meantime.

Sources

  1. WatchGuard advisory WGSA-2026-00013
  2. NVD entry for CVE-2026-6787
  3. CVE.org record for CVE-2026-6787
  4. NVD entry for CVE-2026-6788
  5. CISA Known Exploited Vulnerabilities Catalog
  6. Government of Canada alert on WatchGuard advisories
  7. WatchGuard Agent supported operating systems
  8. Tenable CVE page mirroring EPSS for CVE-2026-6787
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.