← Back to Feed CACHED · 2026-09-29 15:36:20 · CACHE_KEY CVE-2026-8037
CVE-2026-8037 · CWE-77 · Disclosed 2026-06-04

Progress Kemp LoadMaster API Unauthenticated OS Command Injection (escape_quotes Heap Overflow to Root RCE)

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

Like discovering your building's front gate has no lock, the guard is asleep, and every room key is hanging on a hook inside

CVE-2026-8037 is an unauthenticated OS command injection vulnerability in the management API of Progress Kemp LoadMaster, an application delivery controller deployed in over 100,000 instances across 80% of the Fortune 500. The flaw lives in the escape_quotes() function, which allocates heap memory via malloc() without initialization and fails to null-terminate the escaped output. An attacker sends four single quotes in the apiuser parameter to the /accessv2 endpoint; the resulting 16-byte expansion overwrites allocator metadata in an adjacent freed heap chunk. A preceding heap spray fills neighboring allocations with command injection payloads. When __sprintf_chk() reads the unterminated buffer, it continues past the boundary into the sprayed payload, which flows straight into a system() call and executes as root. Affected versions: LoadMaster GA ≤ 7.2.63.1, LTSF ≤ 7.2.54.17, ECS Connection Manager ≤ 7.2.63.1, ObjectScale Connection Manager ≤ 7.2.63.1, and MOVEit WAF sharing the same API code.

The vendor scored this 9.6 CRITICAL using AV:A (adjacent network), reflecting the architectural expectation that the management API sits on a dedicated management VLAN. That's technically honest but operationally naïve. Shadowserver found ~300 LoadMaster management interfaces directly exposed to the internet, and eSentire logged 792 exploit attempts from 65 IPs across 18 countries within 41 days of PoC publication. The NVD independently scored this 9.8 with AV:N, recognizing the real-world exposure pattern. For the vast majority of deployments behind firewalls, any compromised internal host or contractor VPN session reaches the management VLAN anyway. watchTowr published a fully weaponized proof-of-concept on June 29, 2026, and CISA added it to the Known Exploited Vulnerabilities catalog on August 7. The vendor's 9.6 understates the deployed risk — this is a 9.8 in practice.

"Root RCE on your load balancer, no auth, actively exploited — stop everything and patch"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Target Discovery

The attacker identifies internet-exposed or internally-reachable LoadMaster management interfaces. Shodan and Censys queries for the LoadMaster login page on port 443 return results immediately. Internally, standard network scanning (nmap, masscan) against management VLANs locates the appliance. No credentials or special tooling are required at this stage.
Conditions required:
  • Network path to LoadMaster management interface (port 443)
  • LoadMaster REST API is enabled (common for automation workflows)
Where this breaks in practice:
  • Well-segmented environments restrict management interface to a dedicated VLAN reachable only from a jumpbox
  • Only ~300 of 100,000+ deployments are directly internet-exposed per Shadowserver
Detection/coverage: Shodan/Censys dorks: http.title:"LoadMaster" or ssl.cert.subject.CN:"kemp". GreyNoise tags scanning activity targeting LoadMaster.
STEP 02

Heap Spray via JSON Parameters

The attacker sends a JSON POST request to /accessv2 containing 60+ key-value pairs (e.g., g0 through g60), each filled with the command injection payload such as '; cat /etc/shadow #'. These allocations populate the heap with attacker-controlled data adjacent to where the escape_quotes() buffer will be allocated. The spray is deterministic — the glibc allocator places same-sized chunks contiguously.
Conditions required:
  • Reachability to the /accessv2 endpoint
  • No authentication required
Where this breaks in practice:
  • An IDS/IPS with signatures for shell metacharacters in JSON API parameters could flag this
  • Request is a single standard HTTPS POST — nothing anomalous at the network layer
Detection/coverage: Suricata/Snort rules matching base64-decoded apiuser containing shell metacharacters (;, ', backticks). Nuclei template available via community.
STEP 03

Trigger escape_quotes() Overflow

Within the same request, the apiuser parameter is set to '''' (four single quotes). The escape_quotes() function expands each ' into '\'' (four bytes), producing 16 bytes of output. Because malloc() was used without initialization and no null terminator is written, the 16-byte expansion overwrites the malloc metadata header of the adjacent freed heap chunk, erasing the allocator's size/flags.
Conditions required:
  • The escape_quotes() function must process the apiuser field before command construction
  • Vulnerable firmware version (GA ≤ 7.2.63.1 or LTSF ≤ 7.2.54.17)
Where this breaks in practice:
  • The patched version (GA 7.2.63.2 / LTSF 7.2.54.18) replaces malloc() with calloc() and adds a null terminator — the chain dies here on patched systems
Detection/coverage: Version-based detection: any scanner checking LoadMaster firmware version against fixed releases (Tenable plugin, Qualys QID, Rapid7 module).
STEP 04

Out-of-Bounds Read into Sprayed Payload

With the adjacent chunk's metadata erased, __sprintf_chk() reads the unterminated escape_quotes() output buffer as a C string. Without a null terminator, the read continues past the buffer boundary into the next heap chunk — which contains the attacker's sprayed command injection payload from Step 2. The sprintf output now includes the injected shell commands.
Conditions required:
  • Heap layout must place sprayed data adjacent to the escape buffer — achieved reliably via the 60+ spray parameters
Where this breaks in practice:
  • ASLR and heap randomization provide negligible defense here because the spray is large and the relative positioning is what matters, not absolute addresses
STEP 05

Root Command Execution via system()

The concatenated string — now containing the attacker's injected commands — is passed to system() which constructs a shell command like validuser -b -u '<payload>' -p '<pass>'. The injected semicolons and quotes break out of the intended argument context, and the attacker's commands execute as root on the LoadMaster appliance. Full control of the load balancer is achieved: TLS private keys, traffic interception, configuration modification, and lateral pivot to backend servers.
Conditions required:
  • Successful heap spray and overflow from prior steps
Where this breaks in practice:
  • No additional friction — once the heap layout is achieved, code execution is deterministic
Detection/coverage: Post-exploitation: unexpected processes, modified configuration files, outbound connections from the LoadMaster management IP to C2 infrastructure. eSentire published IoC IPs: 192.42.116[.]58, 192.42.116[.]105, 146.70.139[.]154.
03 · Compensating Control

1
CRITICAL 9.8→MEDIUM 5.5
SEVERITY REDUCED
Restrict management API to a hardened jumpbox on a dedicated management VLAN — ACL the LoadMaster management interface (port 443) to accept connections only from a single hardened jumpbox or a small set of management IPs. Block all other inbound access, especially from the internet and general internal subnets. This eliminates the network reachability prerequisite for the entire attack chain. Deploy within hours per the KEV active-exploitation override of the noisgate mitigation SLA (≤ 3 days for CRITICAL, but KEV means immediate).
2
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Disable the REST API if not operationally required — If your LoadMaster automation workflows do not depend on the REST API, disable it entirely via the LoadMaster management UI (System Configuration → API Interface). The vulnerable /accessv2 endpoint becomes unreachable. This is a zero-cost control that eliminates the attack surface completely for organizations that manage LoadMaster exclusively via the GUI. Deploy immediately.
3
CRITICAL 9.8→HIGH 8.5
SEVERITY REDUCED
Deploy IDS/IPS signatures for CVE-2026-8037 exploit pattern — Configure Suricata, Snort, or your NGFW inline IPS to inspect HTTPS traffic (after TLS termination or via the management network tap) for POST requests to /accessv2 containing base64-decoded apiuser values with shell metacharacters (;, ', backtick sequences). Block matching requests. This provides defense-in-depth but is bypassable by encoding variations. Deploy within the noisgate mitigation SLA of ≤ 3 days for CRITICAL.
4
CRITICAL 9.8→CRITICAL 9.5
Block known attacker IPs at the perimeter — Add 192.42.116.58, 192.42.116.105, and 146.70.139.154 to your perimeter firewall and SIEM blocklists immediately. These are confirmed exploitation sources per eSentire TRU. This blocks known actors but does nothing against new IPs — treat as supplementary, not primary. Deploy immediately.
5
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Patch to GA 7.2.63.2 or LTSF 7.2.54.18 — The definitive fix. Progress replaced malloc() with calloc() and added explicit null termination, eliminating both root causes. The noisgate remediation SLA for CRITICAL is ≤ 90 days, but with KEV listing and active exploitation, aim to complete fleet-wide patching within 2 weeks. Schedule a maintenance window and upgrade all LoadMaster, ECS Connection Manager, and ObjectScale Connection Manager instances.
What doesn't work
  • LoadMaster's own WAF features — the vulnerability is in the management plane API, not the data plane. WAF rules configured for virtual services do not inspect traffic to the management interface.
  • MFA or stronger authentication on the management interface — the vulnerability is pre-authentication. The escape_quotes() bug fires during the authentication parsing stage, before any credential check occurs. MFA is bypassed entirely.
  • Rate limiting on the management API — a single HTTP request is sufficient for full exploitation. Rate limiting has no meaningful effect on a one-shot attack.
  • TLS certificate pinning or mutual TLS on the management interface — while mTLS would restrict which clients can connect, the vulnerability is in the application layer *after* the TLS handshake completes. If the attacker can establish a TLS session (e.g., with a valid client cert or if mTLS is not enforced), the exploit still works.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationConfirmed active. eSentire TRU logged 792 exploitation attempts from 65 unique IPs across 18 countries (incl. Australia, China, Indonesia, Japan, Poland, US) over a 41-day window (June 30 – August 10, 2026). CISA added to KEV on August 7, 2026. Known attacker IPs: 192.42.116.58, 192.42.116.105, 146.70.139.154.
Proof-of-ConceptWeaponized PoC public. watchTowr Labs published a full technical walkthrough and working exploit on June 29, 2026. Aggregated on pocindex.io and SecureWithUmer/CVE-2026-PoCs on GitHub. Nuclei community template available.
EPSS0.99571 (99th percentile) — top 1% of all tracked CVEs by exploitation probability. This is near the theoretical maximum.
KEV StatusListed. Added August 7, 2026. BOD 26-04 mandated federal agencies patch by August 10, 2026 (3-day deadline).
CVSS VectorVendor: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H (9.6). NVD: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). The discrepancy is AV:A vs AV:N — vendor assumes management VLAN isolation; NVD reflects real-world internet exposure. noisgate aligns with AV:N.
Affected VersionsLoadMaster GA: 7.2.60.0 – 7.2.63.1. LoadMaster LTSF: 7.2.45.12 – 7.2.54.17. Also: ECS Connection Manager ≤ 7.2.63.1, ObjectScale Connection Manager ≤ 7.2.63.1, MOVEit WAF (shared API codebase).
Fixed VersionsLoadMaster GA 7.2.63.2, LoadMaster LTSF 7.2.54.18. Patch replaces malloc() with calloc() (zero-fills buffer) and adds explicit null terminator after escape loop.
Exposure SurfaceShadowserver: ~300 LoadMaster management interfaces internet-exposed. Total installed base: 100,000+ deployments across 80% of Fortune 500. Attackers enumerate via Shodan dork http.title:"LoadMaster" on port 443.
Disclosure DateJune 4, 2026 (vendor advisory + patch release). PoC published June 29 (25-day gap). KEV listing August 7 (64 days post-disclosure).
Reporting ResearcherSyed Ibrahim Ahmed, TrendAI Research. CVE-2024-1212 (prior LoadMaster injection) discovered by Rhino Security Labs — same component, similar class of bug.

Sources.

  1. watchTowr Labs — Full Exploit Analysis & PoC
  2. CISA KEV Alert — August 7, 2026
  3. eSentire TRU Advisory — Exploitation Telemetry & IoCs
  4. The Hacker News — 792 Exploit Attempts, CISA KEV Coverage
  5. ZeroPath Blog — Technical Summary & Version Matrix
  6. GitHub Advisory — GHSA-57pc-jm9r-hgj4
  7. NVD Entry — CVE-2026-8037
  8. Decryption Digest — Patch Guidance & Exposure Analysis
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

Why this verdict

  • Pre-auth root RCE, single HTTP request: The chain requires zero authentication, zero user interaction, and low attack complexity. Once an attacker reaches the management interface, a single crafted POST to /accessv2 delivers root-level code execution. The EPSS score of 99% and 792 confirmed exploit attempts leave no ambiguity about real-world weaponization.
  • Active exploitation with public weaponized PoC: watchTowr published a complete, reproducible exploit on June 29, 2026. Exploitation began the same day. eSentire documented 65 attacker IPs across 18 countries. CISA KEV-listed on August 7. This is not theoretical — it is happening now, at scale, against your peers.
  • Vendor AV:A understates real-world reachability: The vendor scored this with Attack Vector: Adjacent, assuming the management interface sits on a segmented VLAN. Shadowserver data shows ~300 instances are directly internet-exposed, and for the remaining 99,700+ behind firewalls, any post-initial-access attacker (compromised workstation, contractor VPN, phished employee) typically has a network path to the management VLAN. The NVD correctly scored AV:N. Upgrading from 9.6 to 9.8 reflects this.
  • Role multiplier: LoadMaster is a canonical network-edge appliance — effectively 100% of installs occupy the high-value role by definition. Root access on a load balancer yields: (1) TLS private keys for every virtual service, enabling passive decryption of all transit traffic; (2) ability to inject or modify HTTP responses to downstream clients; (3) visibility into backend server IPs, health-check credentials, and topology; (4) a pivot point into every backend server the LB fronts. Blast radius is fleet-scale — a single compromised LoadMaster can expose or redirect traffic for dozens to hundreds of backend applications. This floors the verdict at CRITICAL regardless of management-interface segmentation friction.

Why not higher?

A 9.8 is near the CVSS ceiling. The only path to 10.0 would require Scope:Changed in combination with AV:N — arguing that the vulnerability's impact extends beyond the LoadMaster into downstream systems as a direct, automatic consequence. While root access on a LB *enables* downstream compromise, the pivot to backend systems requires additional attacker steps (credential extraction, lateral movement) that are not part of this CVE's direct impact chain. The 9.8 accurately captures the direct blast radius.

Why not lower?

Every friction point that might support a downgrade is overridden by hard evidence. Management interface segmentation? ~300 are internet-facing and 792 exploit attempts confirm reachability. Niche product with limited exposure? 100,000+ deployments across 80% of the Fortune 500. Theoretical PoC only? watchTowr published a fully weaponized exploit and CISA confirmed active exploitation in the wild. The EPSS score is 99th percentile. There is no defensible argument for anything below CRITICAL.

06 · Verification

Crowdsourced verification payload.

Run from an auditor workstation with network access to the LoadMaster management interface. Requires curl and coreutils (sort, grep). No special privileges needed — the script makes only an HTTPS GET to the login page to parse the firmware version, plus an optional authenticated API call. Usage: bash check_cve-2026-8037.sh 10.0.1.50 or bash check_cve-2026-8037.sh lb.corp.local my-api-key

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# CVE-2026-8037 Version Checker for Progress Kemp LoadMaster
# Usage: bash check_cve-2026-8037.sh <host> [api-key]
# Exit: 0=PATCHED  1=VULNERABLE  2=UNKNOWN
set -euo pipefail

TARGET="${1:?Usage: $0 <loadmaster-mgmt-ip-or-hostname> [api-key]}"
API_KEY="${2:-}"
FIXED_GA="7.2.63.2"
FIXED_LTSF="7.2.54.18"
VERSION=""

ver_gte() {
  printf '%s\n%s' "$1" "$2" | sort -V | head -n1 | grep -qx "$2"
}

echo "[*] CVE-2026-8037 Check - Target: ${TARGET}"

# Method 1: Authenticated API version query
if [[ -n "$API_KEY" ]]; then
  RESP=$(curl -sk --connect-timeout 10 \
    -H "Authorization: Bearer ${API_KEY}" \
    "https://${TARGET}/access/system/version" 2>/dev/null) || true
  VERSION=$(echo "$RESP" | grep -oP '"version"\s*:\s*"\K[^"]+' 2>/dev/null) || true
fi

# Method 2: Parse firmware version from login page
if [[ -z "${VERSION}" ]]; then
  RESP=$(curl -sk --connect-timeout 10 "https://${TARGET}/" 2>/dev/null) || true
  VERSION=$(echo "$RESP" | grep -oP 'LoadMaster\s+v?\K[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' 2>/dev/null | head -1) || true
fi

if [[ -z "${VERSION}" ]]; then
  echo "[!] Could not determine LoadMaster firmware version."
  echo "UNKNOWN"
  exit 2
fi

echo "[*] Detected firmware: ${VERSION}"

# Determine branch (GA vs LTSF) and set fixed version
if echo "$VERSION" | grep -qP '^7\.2\.5[0-9]'; then
  BRANCH="LTSF"; FIXED="$FIXED_LTSF"
elif echo "$VERSION" | grep -qP '^7\.2\.6[0-9]'; then
  BRANCH="GA"; FIXED="$FIXED_GA"
else
  echo "[!] Unrecognized firmware branch: ${VERSION}"
  echo "UNKNOWN"
  exit 2
fi

echo "[*] Branch: ${BRANCH} - Fixed in: ${FIXED}"

if ver_gte "$VERSION" "$FIXED"; then
  echo "[+] Firmware ${VERSION} >= ${FIXED}"
  echo "PATCHED"
  exit 0
else
  echo "[-] Firmware ${VERSION} < ${FIXED} - AFFECTED by CVE-2026-8037"
  # Probe whether the vulnerable endpoint is reachable
  HTTP=$(curl -sk --connect-timeout 5 -o /dev/null -w "%{http_code}" \
    "https://${TARGET}/accessv2" 2>/dev/null) || HTTP="000"
  if [[ "$HTTP" != "000" ]]; then
    echo "[!] WARNING: /accessv2 reachable (HTTP ${HTTP}) - exploit path OPEN"
  else
    echo "[*] /accessv2 not reachable from this host - management segmentation may be in place"
  fi
  echo "VULNERABLE"
  exit 1
fi