Progress Kemp LoadMaster — Pre-Auth RCE (CVE-2026-8037)
Executive Summary
CVE-2026-8037 (CVSS 9.6) is a pre-authentication remote code execution flaw in the Progress Kemp LoadMaster load-balancing appliance. The root cause is an uninitialized-heap bug in the API's escape_quotes() routine: the function allocates a buffer with malloc() and never writes a null terminator, so when the escaped value is folded into a validuser command line via __sprintf_chk() and executed through system(), an attacker can read past the buffer into adjacent heap memory and inject shell metacharacters — yielding full root code execution with no credentials.
watchTowr Labs published a working exploitation analysis on 2026-06-29, and The Hacker News reported active exploitation attempts beginning the same day. The exploit is delivered as a single POST to the /accessv2 endpoint: an apiuser value of four single quotes overwrites allocator metadata, while dozens of padding JSON keys (g0–g60+) spray the heap so the injected command lands in the shell.
Highest-value defensive angle: LoadMaster is a network appliance — it does not run the Falcon sensor — so the primary detections live in ingested appliance access/syslog (the /accessv2 exploit body and any post-exploit shell/egress) plus network- and host-side telemetry on the Falcon-covered assets behind the load balancer. Patch to 7.2.63.2 and restrict API exposure first; hunt second.
Defender priority: Treat any internet-reachable LoadMaster on GA ≤ 7.2.63.1 / LTSF ≤ 7.2.54.17 with the API enabled as presumed-targeted. Patch or take the API off the perimeter today, then hunt the /accessv2 access logs for the heap-spray body and the appliance's egress for reverse-shell callbacks.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | watchTowr Labs (2026-06-29) | Root-cause + working exploit: uninitialized malloc() in escape_quotes(), missing null terminator, validuser/system() chain, /accessv2 POST, four-quote apiuser + g0–g60+ heap spray. | yes |
| 1 | The Hacker News (2026-07-01) | Active exploitation attempts observed commencing 2026-06-29; CVSS 9.6; pre-auth; API-enabled devices only. | yes |
| 1 | Progress PSIRT advisory | Affected GA ≤ 7.2.63.1 and LTSF ≤ 7.2.54.17; fixed in 7.2.63.2 (malloc→calloc + explicit null termination). | yes |
| 2 | SC Media / GBHackers / cybersecuritynews (2026-06-30) | Corroborating coverage; exploitation via crafted /accessv2 requests; monitor for anomalous validuser calls and unexpected appliance egress. | partial |
Intel note: No public atomic IOCs (attacker IPs, payload hashes, C2) were published at time of writing — exploitation is characterized by the request shape against /accessv2 and post-exploit behavior, not by fixed indicators. IOC blocks below use placeholders to be filled from local findings.
Hunt Brief & Attack Chain
Hypotheses (fidelity-ordered)
- H1 (high): An unauthenticated POST to
/accessv2carrying four single quotes inapiuserand repeatedg0–g60+padding keys is an exploitation attempt for CVE-2026-8037 — visible in ingested LoadMaster web/API access logs. - H2 (medium): A successfully exploited LoadMaster will spawn a shell (
sh/bash) or fetch tooling (curl/wget) as a child of its web/API service — visible in appliance OS syslog/auditd if forwarded. - H3 (medium): A compromised appliance beacons or pulls a payload outbound to an unusual destination — visible in perimeter firewall/proxy logs as egress from the LoadMaster management IP to non-update destinations.
- H4 (medium): Post-foothold, the actor pivots from the appliance to a backend/web host that is Falcon-covered, spawning recon or web-shell processes off the web-server parent.
- H5 (medium): Pre-exploit reconnaissance shows a single source probing
/accessv2across multiple web-facing assets.
Attack chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Recon | Scan for exposed LoadMaster API / probe /accessv2 | Web/proxy access logs | Q5 |
| 2 · Exploit | POST /accessv2 with heap-spray body + four-quote apiuser | LoadMaster access logs | Q1 |
| 3 · Execute | validuser/system() runs injected shell command as root | Appliance syslog/auditd | Q3 |
| 4 · Pull / Beacon | Appliance fetches tooling or opens reverse shell | Firewall/proxy egress logs | Q2 |
| 5 · Pivot | Move from appliance to backend host | Falcon process/network on backend | Q4 |
Consolidated IOC Table
No vendor-published atomic IOCs at time of writing. The indicators below are behavioral / request-shape indicators derived from the watchTowr analysis; fill placeholder infrastructure values from local hunt findings.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| Request path | POST /accessv2 | med | hunt | Targeted endpoint (legitimate for API automation — qualify with body) |
| Body pattern | apiuser = four single quotes ('''') | high | hunt | Heap-metadata overwrite primitive |
| Body pattern | Repeated JSON keys g0–g60+ | high | hunt | Heap spray padding |
| Behavior | Shell/tool child of appliance web service | med | hunt | Post-exploit code execution |
| Behavior | Unexpected egress from LoadMaster mgmt IP | med | hunt | Reverse shell / payload pull |
| IP | REPLACE_WITH_ATTACKER_SRC | med | pivot | Source IP of confirmed exploit POST |
| Version | GA ≤ 7.2.63.1 / LTSF ≤ 7.2.54.17 | high | enrich | Vulnerable if API enabled |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
LoadMaster API (/accessv2) | Appliance web/API access logs → NG-SIEM | critical | high — often not forwarded |
| LoadMaster OS | Appliance syslog/auditd (process exec) | high | high — limited on appliance |
| Perimeter egress | Firewall/proxy connection logs | high | medium |
| Backend / web hosts | Falcon ProcessRollup2 / NetworkConnectIP4 | medium | low — Falcon-covered |
Telemetry reality: the appliance itself is the blind spot. If LoadMaster access/syslog is not already shipped to NG-SIEM, stand that up (Section 13) — it converts H1–H3 from theoretical to live.
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Reconnaissance | T1595.002 · Active Scanning: Vuln Scanning | Probing /accessv2 across assets | Q5 |
| Initial Access | T1190 · Exploit Public-Facing Application | Pre-auth RCE via /accessv2 | Q1 · Patch |
| Execution | T1059.004 · Command & Scripting: Unix Shell | system() runs injected command as root | Q3 |
| Command & Control | T1071.001 · Application Layer Protocol: Web | Appliance egress / reverse shell | Q2 |
| Persistence | T1505.003 · Server Software Component: Web Shell | Web shell on backend after pivot | Q4 |
Native Audit-Log Hunts (non-CQL)
- LoadMaster WUI: System Configuration → Logging Options → review the API/access log for POST
/accessv2entries with abnormally large bodies or repeated keys. - Version check: confirm running firmware against GA ≤ 7.2.63.1 / LTSF ≤ 7.2.54.17; anything at or below is vulnerable when the API is enabled.
- API exposure: confirm whether the RESTful API is enabled and whether the management/API interface is reachable from untrusted networks.
- Config drift: review LoadMaster admin users, SSH authorized keys, and cron/scheduled jobs for unauthorized additions (post-exploit persistence on the appliance).
- Perimeter: pull firewall logs for outbound sessions sourced from the LoadMaster management IP outside its normal update/NTP/DNS pattern.
CrowdStrike LogScale CQL Hunt Queries
Looks for: POST requests to /accessv2 in ingested LoadMaster access logs whose body carries the four-single-quote apiuser primitive or the g0–g60+ heap-spray padding keys. Point the query at the repo/parser where the appliance logs land.
// HUNT: LoadMaster pre-auth RCE — /accessv2 heap-spray exploitation body (CVE-2026-8037) // MITRE: T1190 // CONF: high FP: low COST: low | REQUIRES: LoadMaster API/access logs ingested to NG-SIEM // FALSE POSITIVES: none expected — the four-quote apiuser + g-key spray is exploit-specific #repo="appliance_web" | url=/accessv2/i | method=/^POST$/i | request_body=/(''''|"g\d+"\s*:)/ | table([@timestamp, src_ip, method, url, status, request_body], limit=200)
Looks for: outbound sessions in ingested firewall/proxy logs sourced from the LoadMaster management IP to destinations outside its normal update/NTP/DNS pattern. FP: legitimate firmware update, NTP, and DNS egress — exclude those destinations and set REPLACE_LM_MGMT_IP.
// HUNT: LoadMaster appliance anomalous egress after exploit (reverse shell / tool pull) // MITRE: T1071.001, T1105 // CONF: medium FP: medium COST: low | REQUIRES: perimeter firewall/proxy logs; LoadMaster mgmt IP known // FALSE POSITIVES: appliance update/NTP/DNS egress // TUNING: exclude sanctioned update/NTP/DNS destinations and the vendor update CIDR #repo="firewall" | src_ip=/^REPLACE_LM_MGMT_IP$/ | dest_port!=443 | dest_port!=53 | dest_port!=123 | table([@timestamp, src_ip, dest_ip, dest_port, action, bytes_out], limit=200)
Looks for: a shell or download utility spawned as a child of the LoadMaster web/API service in appliance OS syslog/auditd — the direct footprint of the injected validuser command. Requires appliance process logging to be forwarded.
// HUNT: LoadMaster shell/command execution via validuser injection (post-exploit) // MITRE: T1059.004 // CONF: medium FP: low COST: low | REQUIRES: LoadMaster OS syslog/auditd ingested // FALSE POSITIVES: rare — appliance internals seldom spawn interactive shells #repo="appliance_syslog" | process_name=/^(sh|bash|nc|ncat|curl|wget|python|perl)$/i | parent_process=/(httpd|nginx|lighttpd|bal|lmadmin|validuser)/i | table([@timestamp, host, parent_process, process_name, command], limit=200)
Looks for: on Falcon-covered backend/web hosts behind the load balancer, recon or shell utilities spawned as children of a web-server process — post-pivot activity. FP: legitimate health checks, deployment tooling, and admin scripts run under the web account — scope ParentBaseFileName to the real web binary and exclude monitoring agents.
// HUNT: Backend host — inbound from LB segment then recon/webshell spawn // MITRE: T1190, T1505.003 // CONF: medium FP: medium COST: medium | REQUIRES: Falcon on backend/web hosts // FALSE POSITIVES: health-check, deploy, and admin tooling under the web account // TUNING: scope ParentBaseFileName to the actual web-server binary; exclude monitoring agents #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/(w3wp|httpd|nginx|java|node|php-fpm)/i | FileName=/^(whoami|id|uname|hostname|cat|curl|wget|bash|sh|powershell)(\.exe)?$/i | table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
Looks for: a single source IP touching /accessv2 across many web-facing assets in ingested web/proxy logs — the recon sweep before exploitation. FP: sanctioned vulnerability scanners and KEMP API automation — exclude their source IPs.
// HUNT: External probing of /accessv2 across web-facing assets (pre-exploit recon) // MITRE: T1595.002 // CONF: medium FP: medium COST: low | REQUIRES: web/proxy access logs ingested // FALSE POSITIVES: internal vuln scanners, legitimate KEMP API automation // TUNING: exclude sanctioned scanner and automation source IPs #repo="web_access" | url=/accessv2/i | groupBy([src_ip], function=count(as=hits)) | sort(hits, order=desc)
CrowdStrike Custom IOA Recommendations
The appliance is not Falcon-covered, so IOAs apply to the backend/pivot hosts (Q4). Promote the rest as Scheduled Searches over the ingested appliance repos.
| IOA / Search | Pattern | Exclusions | Path |
|---|---|---|---|
| Web-parent shell spawn (IOA) | Parent = web-server binary; Child = sh/bash/whoami/curl/wget | Deploy/health/admin tooling accounts | Custom IOA on web-tier host group |
| /accessv2 exploit body (Sched. Search) | Q1 | None | Scheduled Search → SOC alert |
| Appliance shell child (Sched. Search) | Q3 | None | Scheduled Search → SOC alert |
Keep Q2 and Q5 as investigate-only hunts — their FP profile is environment-dependent and needs tuning before alerting.
Machine-Readable IOC Appendix
No atomic IOCs published — the blocks below use REPLACE_WITH_… placeholders. Fill from confirmed local findings before importing.
type,value,action,severity,expiration,description,tags ipv4,REPLACE_WITH_ATTACKER_SRC,detect,high,2027-01-02,CVE-2026-8037 exploit source,campaign:KempLoadMaster domain,REPLACE_WITH_C2,detect,high,2026-10-02,LoadMaster reverse-shell C2,campaign:KempLoadMaster sha256,REPLACE_WITH_TOOL_HASH,prevent,critical,2027-01-02,post-exploit tool pulled to appliance,campaign:KempLoadMaster
POST /accessv2 with apiuser value of four single quotes ('''')
POST /accessv2 body with repeated JSON keys g0..g60+
appliance web service spawning sh/bash/nc/curl/wget
outbound session from LoadMaster mgmt IP to non-update destination
web-server process spawning whoami/id/uname/curl on backend host
CVE: CVE-2026-8037 (CVSS 9.6) Product: Progress Kemp LoadMaster (load balancer appliance) Endpoint: /accessv2 (POST) — RESTful API Root cause: uninitialized malloc() in escape_quotes(), missing null terminator Chain: escape_quotes -> __sprintf_chk -> validuser -> system() Primitive: four-quote apiuser + g0..g60+ heap spray
Fixed: LoadMaster 7.2.63.2 (malloc -> calloc + null termination) Vulnerable: GA <= 7.2.63.1 | LTSF <= 7.2.54.17 (when API enabled) Audit: confirm firmware version in WUI (Home -> firmware) Audit: confirm RESTful API enabled state and mgmt-interface reachability Action: patch, then restrict API to trusted mgmt network only
Detection Validation Gates
| Gate | Check | Pass Criterion |
|---|---|---|
| Telemetry ready | Are LoadMaster access + OS logs reaching NG-SIEM? | Q1/Q3 return rows for known-good API traffic |
| Benign baseline | Run Q5 for 7 days | Known scanner/automation IPs identified & excluded |
| Positive test | Replay a benign four-quote / g-key body from an authorized test host | Q1 fires on the test request |
| Promotion | Q1/Q3 FP rate over baseline window | Zero benign hits → promote to alert |
Hardening — Tiered
- Patch to 7.2.63.2 (or later) — the fix converts
malloc→callocand adds explicit null termination. Primary control. (Vendor advisory · M1051 Update Software) - Remove the management/API interface from the internet. Bind the WUI/RESTful API to a dedicated management VLAN reachable only via VPN/jump host. (M1030 Network Segmentation)
- Disable the RESTful API if not actively used. (M1042 Disable or Remove Feature)
- Ship LoadMaster access + system logs to NG-SIEM so H1–H3 become detectable. (M1047 Audit)
- Restrict API source IPs at the firewall to a named admin allow-list. (M1037 Filter Network Traffic)
- Egress-filter the appliance: allow only vendor-update, NTP, and DNS destinations outbound from the LoadMaster mgmt IP. (M1037)
- Appliance inventory + lifecycle: track all LoadMaster instances, firmware, and API exposure in CMDB with an SLA for edge-device patching. (M1051)
- Front the management plane with MFA-gated PAM and session recording. (M1032 Multi-factor Authentication)
Deployable Playbooks
A · Confirm version & API exposure (appliance CLI / WUI)
# In the LoadMaster WUI: # Home -> confirm firmware version (compare to GA 7.2.63.1 / LTSF 7.2.54.17) # Certificates & Security -> Remote Access -> confirm "Enable API Interface" state # System Configuration -> Interfaces -> confirm mgmt bound to non-Internet interface # Any device at/below the vulnerable versions with API enabled = patch now.
B · Firewall egress allow-list for the appliance (illustrative iptables/edge policy)
# Replace 192.0.2.10 with the LoadMaster management IP. # Permit only vendor-update / NTP / DNS egress; drop the rest (reverse-shell containment). -A FORWARD -s 192.0.2.10 -p udp --dport 53 -j ACCEPT -A FORWARD -s 192.0.2.10 -p udp --dport 123 -j ACCEPT -A FORWARD -s 192.0.2.10 -d UPDATE_CIDR -p tcp --dport 443 -j ACCEPT -A FORWARD -s 192.0.2.10 -j DROP
C · Stand up appliance log forwarding (syslog)
# LoadMaster WUI: System Configuration -> Logging Options -> Syslog Options # Set the SIEM collector as the Info/Notice/Warn/Error/Critical syslog target. # Confirm ingestion, then point Q1/Q3 #repo at the parser that receives it.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Pull the mgmt/API interface off untrusted networks; block the appliance egress (Playbook B); if compromise confirmed, fail traffic to a standby and take the unit offline. | Network / Infra | Firewall change ticket; Q2 egress hits |
| Eradicate | Rebuild/reimage the appliance from vendor-clean firmware 7.2.63.2+; do not trust in-place cleanup of a root-compromised appliance. Rotate all secrets the appliance held (API keys, certs, admin creds). | Infra | Firmware hash; cert/key rotation log |
| Recover | Restore config from a known-good pre-incident backup; re-enable API only on the mgmt VLAN; verify version and egress policy. | Infra | Version readout; Q1 clean |
| Hunt-back | Run Q4 across backend hosts for pivot activity in the exposure window; run Q1/Q5 back to the earliest ingested logs. | SOC / Hunt | Q4 results; timeline |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1595.002 | /accessv2 recon sweep | Q5 | — | Partial |
| T1190 | /accessv2 exploit body | Q1 | Sched. Search | Good (if logs ingested) |
| T1059.004 | Shell child on appliance | Q3 | Sched. Search | Partial (appliance logs) |
| T1071.001 / T1105 | Appliance egress / tool pull | Q2 | — | Partial |
| T1505.003 | Web shell / recon on backend | Q4 | IOA | Good |
| On-appliance persistence | New admin/SSH key/cron on LoadMaster | — | — | GAP — no EDR on appliance; use §7 native checks |
Validation: the pack is only as strong as appliance log ingestion. Until LoadMaster access/syslog reaches NG-SIEM (Playbook C), Q1–Q3 are aspirational and the primary live coverage is Q4 on backend hosts plus §7 native WUI checks. Close the ingestion gap first.
Hunt Summary Ticket
TITLE: CVE-2026-8037 — Progress Kemp LoadMaster Pre-Auth RCE Hunt
SEVERITY: Critical (CVSS 9.6, exploited in the wild)
SCOPE: All Kemp LoadMaster appliances (GA <= 7.2.63.1 / LTSF <= 7.2.54.17, API enabled)
HYPOTHESIS: Unauthenticated POST /accessv2 with four-quote apiuser + g0..g60 heap
spray yields root RCE; look for the request body, appliance shell/egress,
and backend pivot.
QUERIES: Q1 exploit body | Q2 appliance egress | Q3 appliance shell child
Q4 backend recon/webshell | Q5 /accessv2 recon sweep
DO FIRST: 1) Patch to 7.2.63.2 2) Take API off the perimeter
3) Confirm LoadMaster logs reach NG-SIEM 4) Run Q1 + Q5
FINDINGS: ____________________________________________
GAPS: No EDR on the appliance; on-appliance persistence needs native WUI review
ACTIONS: Patch, segment API, egress-filter, forward logs, hunt-back backend hosts
OWNER: HuntPack
VERSION: v0.2 · 2026-07-02
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | watchTowr Labs — Kemp LoadMaster uninitialized-heap to pre-auth RCE | Root cause, exploit chain, /accessv2 body shape | 2026-07-02 |
| 1 | The Hacker News — LoadMaster pre-auth RCE faces active exploitation | Active exploitation timeline, CVSS, affected scope | 2026-07-02 |
| 1 | The Hacker News — LoadMaster flaw lets attackers run root commands pre-auth | Disclosure detail, affected/fixed versions | 2026-07-02 |
| 2 | SC Media — LoadMaster vulnerability actively exploited | Corroboration | 2026-07-02 |
| 2 | Cyber Security News — critical LoadMaster pre-auth RCE | Corroboration, defender guidance | 2026-07-02 |