Hoverfly CVE-2026-50013
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Hoverfly proxy port (Diff mode enabled)
-
DeliverySend many simultaneous proxied requests
-
ExploitConcurrent goroutines call AddDiff()
-
ExecutionUnsynchronized writes to responsesDiff map
-
PersistGo runtime fatal() concurrent map access
-
ImpactProcess crashes, denial of service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Hoverfly must be running in Diff mode - set explicitly via |
| Impact | This is a genuine, easy-to-trigger availability issue, not a paper high-CVSS. The supplied CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (7.5) is consistent with the description: network reachable via the proxy port, low complexity, no privileges, no user interaction, and impact confined to availability (C:N/I:N/A:H). The important caveat is that exploitation is conditional on a non-default deployment state - Hoverfly must be running in Diff mode, which is set explicitly via the admin API and is not the default capture/simulate mode - so the raw PR:N/AC:L score somewhat overstates blanket exposure; in practice only teams actively using Diff mode for API comparison are affected. No EPSS score, KEV entry, or SSVC decision data was provided, so probabilistic and decision-framework signals are unknown; assessment rests on the CVSS vector plus the vendor-published POC. Because the crash is unrecoverable and trivially reproducible with a handful of concurrent requests, for any Diff-mode deployment this should be treated as a real priority. |
| Exploit ScenarioDerived | An attacker (or even ordinary load) with access to the Hoverfly proxy port on a Diff-mode instance sends a burst of simultaneous requests that produce diff entries; multiple goroutines then write to the unsynchronized |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 14, 2026
Denial of service in Hoverfly's Diff mode (versions ≤ 1.12.7) lets any client with proxy access crash the entire process by sending concurrent requests. The AddDiff() function writes to the shared responsesDiff map without a mutex, so simultaneous proxy requests - the normal case for a proxy - trigger Go's built-in concurrent-map detector, producing an unrecoverable fatal error: concurrent map read and map write that kills the process. Publicly available exploit code exists (a working POC is embedded in the GitHub advisory), though there is no public exploit identified as actively used in the wild and no KEV listing.
RemediationAI
Vendor-released patch: upgrade to Hoverfly v1.12.8 (release https://github.com/SpectoLabs/hoverfly/releases/tag/v1.12.8), which adds a dedicated responsesDiffMu sync.RWMutex guarding all reads, writes, and range iterations over responsesDiff (fix PR https://github.com/SpectoLabs/hoverfly/pull/1227). If you cannot upgrade immediately, the most effective compensating control is to avoid Diff mode: run Hoverfly in capture, simulate, spy, or modify mode instead, since only Diff mode reaches the vulnerable AddDiff() path - the trade-off is you lose live request/response diffing. Additionally restrict network exposure of the proxy port so only trusted, low-concurrency clients can reach it (trade-off: does not fix the bug and even trusted concurrent traffic can still trigger the crash), and consider running Hoverfly under a supervisor (systemd, Kubernetes restart policy) so it auto-restarts after the fatal crash (trade-off: mitigates duration of outage, not the DoS itself). Full details in the advisory: https://github.com/SpectoLabs/hoverfly/security/advisories/GHSA-qrh4-p6v4-mrfg.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Hoverfly is a Go-based HTTP(S) service-virtualization / API-simulation proxy from SpectoLabs (Go module github.com/SpectoLabs/hoverfly, package pkg:go/github.com_spectolabs_hoverfly). The root cause is CWE-362 (Concurrent Execution using Shared Resource with Improper Synchronization, i.e. a race condition). Each proxied request is served in its own goroutine by Go's net/http server; in Diff mode each goroutine calls AddDiff() (core/hoverfly_service.go:417-421), which reads and appends to the shared responsesDiff map[v2.SimpleRequestDefinitionView][]v2.DiffReport with no synchronization. Go's map runtime deliberately performs concurrent-access checks and calls fatal() - distinct from ordinary silent data races on scalar values - and fatal() cannot be intercepted by recover(). Notably the adjacent hf.state map is already guarded by a sync.RWMutex, so responsesDiff was simply missing the equivalent protection.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Reachable over the network proxy port with low complexity and no auth or interaction; impact is a full process crash (A:H) with no confidentiality or integrity effect, though it requires the non-default Diff mode.
Primary rating from Vendor (https://github.com/SpectoLabs/hoverfly).
CVSS VectorVendor: https://github.com/SpectoLabs/hoverfly
DescriptionCVE.org
Summary:
When Hoverfly is running in Diff mode, the AddDiff() function writes to the shared responsesDiff map without any synchronization (no mutex). When multiple proxy requests are processed concurrently (the normal case for any proxy), the concurrent map writes trigger Go's built-in race detector which causes a fatal error: concurrent map read and map write, immediately killing the entire Hoverfly process. This is trivially exploitable by sending multiple simultaneous requests.
Details:
1. Unsynchronized map access in AddDiff() (core/hoverfly_service.go:417-421):
func (hf *Hoverfly) AddDiff(requestView v2.SimpleRequestDefinitionView, diffReport v2.DiffReport) {
if len(diffReport.DiffEntries) > 0 {
diffs := hf.responsesDiff[requestView] // UNSYNCHRONIZED READ
hf.responsesDiff[requestView] = append(diffs, diffReport) // UNSYNCHRONIZED WRITE
}
}2. This function is called from Diff mode processing, which runs concurrently per request (core/modes/diff_mode.go):
Each incoming proxy request is handled in its own goroutine by Go's net/http server. In Diff mode, each request calls AddDiff() after comparing the simulated and actual responses. With multiple concurrent requests, multiple goroutines write to the same map simultaneously.
3. Go's runtime detects concurrent map access and terminates the process:
Unlike data races on simple values (which produce undefined behavior silently), Go's map implementation includes a built-in concurrent access check. When two goroutines access the same map and at least one is writing, the runtime calls fatal() which is unrecoverable, it cannot be caught by recover().
4. No mutex protection exists on responsesDiff:
The field is declared as a plain map[v2.SimpleRequestDefinitionView][]v2.DiffReport with no associated sync.RWMutex. Compare with hf.state which properly uses sync.RWMutex for its map access.
Environment:
- Hoverfly version: v1.12.7
- Operating System: macOS Darwin 25.4.0
- Go version: 1.26.2
- Configuration: Hoverfly in Diff mode (
PUT /api/v2/hoverfly/mode {"mode":"diff"})
POC:
Step 1: Start Hoverfly and set Diff mode
./hoverfly &
sleep 2
# Set diff mode
curl -X PUT http://localhost:8888/api/v2/hoverfly/mode \
-H "Content-Type: application/json" \
-d '{"mode": "diff"}'
# Load a simulation for diff comparison
curl -X PUT http://localhost:8888/api/v2/simulation \
-H "Content-Type: application/json" \
-d '{
"data": {
"pairs": [{
"request": {"path": [{"matcher": "glob", "value": "*"}]},
"response": {"status": 200, "body": "expected"}
}],
"globalActions": {"delays": [], "delaysLogNormal": []}
},
"meta": {"schemaVersion": "v5.2"}
}'Step 2: Send concurrent requests to trigger the race
# Send 50 concurrent requests, race condition triggers within seconds
for i in $(seq 1 50); do
curl -s -x http://localhost:8500 "http://httpbin.org/get?id=$i" &
done
waitStep 3: Observe the crash
# Check if process is still running
pgrep -f hoverflycrash output on Hoverfly v1.12.7:
fatal error: concurrent map read and map write
goroutine 892 [running]:
github.com/SpectoLabs/hoverfly/core.(*Hoverfly).AddDiff(...)
/core/hoverfly_service.go:419
github.com/SpectoLabs/hoverfly/core/modes.(*DiffMode).Process(...)The process crashes with ~50 concurrent requests. In production with real traffic, it crashes almost immediately.
Impact:
- Full denial of service: The process terminates immediately and cannot be recovered without a restart
- Trivial exploitation: Any attacker with proxy access can trigger this by sending multiple concurrent requests
- No admin API access required: Only proxy port access is needed to trigger the crash
- Unrecoverable:
fatal errorin Go cannot be caught byrecover()- the process is unconditionally killed - Affects all Diff mode users: Any team using Diff mode for API comparison testing is vulnerable
Executive ViewAI
Hoverfly's Diff mode in versions 1.12.7 and earlier contains a denial-of-service vulnerability allowing any network user to crash the entire proxy process. While publicly available exploit code exists, there is no evidence of active exploitation. Organizations running Hoverfly should prioritize patching to prevent service outages that would disrupt API testing and traffic management operations.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Affected Products (CPE)CVE.org
Same weakness CWE-362 – Race Condition
View allSame technique Denial Of Service
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
GHSA-qrh4-p6v4-mrfg
NVD
CVE.org
EPSS
Exploit-DB