This is a booby-trapped maintenance hatch, not a front-door smash-and-grab
CVE-2026-25588 is a memory-safety bug in the RedisTimeSeries module's handling of serialized payloads passed through the Redis RESTORE command. The practical blast radius is narrower than generic Redis RCE headlines imply: the target must be running Redis with the RedisTimeSeries module loaded, and the vulnerable upstream module range is versions before 1.12.14, with vendor-fixed branches also called out as 1.10.24 and 1.8.23; Redis also published fixed OSS/CE builds 6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, and 8.6.3, plus Redis Software fixed builds 8.0.10-64, 7.22.2-79, 7.8.6-253, 7.4.6-279, and 7.2.4-153.
The vendor's HIGH label is technically defensible if you score pure impact in a lab, because successful exploitation can hand over the Redis process. In real enterprise operations, though, this is not an unauthenticated internet worm: it requires valid Redis access, permission to run a dangerous administrative command, and the specific module to be present, while EPSS is low and there is no KEV listing or vendor evidence of active exploitation, so the operational priority lands a notch lower at MEDIUM.
4 steps from start to impact.
Reach a Redis endpoint that actually loads RedisTimeSeries
RESTORE, so plain Redis exposure without that module does not satisfy the chain. Weaponized tool: any Redis RESP client, usually stock redis-cli or a custom client.- Network path to the Redis service
- RedisTimeSeries module loaded on the target
- Target running an affected branch
- Many enterprise Redis deployments are internal-only
- RedisTimeSeries is a subset of Redis estates, not the default everywhere
- External scanners usually fingerprint Redis, not always the loaded module set
Obtain authenticated Redis access
redis-cli -a, application credentials, or stolen service secrets.- Valid Redis authentication material or trusted access path
- Protected mode / network controls not fully blocking the attacker
- This prerequisite implies prior compromise or privileged insider access
- Modern secret management and segmented service networks reduce the exposed population
- MFA does not apply directly to Redis, but vaulting and rotation often do
Hold permission to execute RESTORE
RESTORE, which is exactly why the vendor workaround is to block that command with ACLs. In mature estates, application users often do not need data-import style commands, so this is a meaningful choke point. Weaponized tool: redis-cli RESTORE with a crafted serialized payload.- Authenticated principal allowed to invoke
RESTORE - ACLs not explicitly denying dangerous administrative/import commands
- Least-privilege Redis ACLs can break the chain completely
- Many service accounts only need read/write data commands, not restore/import paths
- Managed cloud services may already constrain risky command use
RESTORE; command auditing and Redis ACL log events are the best direct detections.Deliver malformed serialized data and win code execution
RESTORE. If exploit engineering succeeds, impact can range from crash to arbitrary code execution in the Redis server context. Weaponized tool: custom serializer or exploit client; no broadly cited public PoC was found in the sources reviewed.- Precisely malformed payload compatible with the vulnerable code path
- Runtime conditions that allow memory corruption to become reliable impact
- Memory-corruption exploitation is less turnkey than command injection
- No public PoC or in-the-wild evidence was cited by vendor/NVD-linked sources
- Reliability can vary by build, allocator, and surrounding hardening
RESTORE usage, suspicious child process/network egress from redis-server, and EDR telemetry on the host.The supporting signals.
| In-the-wild status | Redis states it had no evidence of exploitation in its environment or customer environments at publication on 2026-05-05; no primary-source campaign reporting was found in the reviewed materials. Source: Redis advisory. |
|---|---|
| KEV status | Not KEV-listed. A search for CVE-2026-25588 returned no CISA KEV result, and the user-provided intel also says no. Reference catalog: CISA KEV. |
| PoC availability | No authoritative public exploit or GitHub PoC surfaced in the reviewed primary sources. The best available signal is negative evidence: Docker Scout reports Exploits found: -, and Redis/GitHub advisories do not link a PoC. Sources: Docker Scout, GitHub advisory. |
| EPSS | 0.00267 (~0.27%), roughly 50th percentile from the surfaced EPSS mirrors, which is low for a bug with this headline impact. Sources: Docker Scout, Snyk. |
| CVSS and what it really means | NVD shows CVSS v3.1 8.8 HIGH (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) while the GitHub CNA CVSS v4 base is 7.7 HIGH with AC:H. The delta matters: the v3 vector underrates the real exploit friction introduced by post-auth access plus dangerous-command permission plus module presence. Sources: NVD, GitHub advisory. |
| Attack prerequisites | Primary-source prerequisites are explicit: RedisTimeSeries loaded, attacker authenticated, and permission to execute RESTORE. That is a materially narrower path than a generic network RCE. Source: GitHub advisory. |
| Affected versions | NVD describes the vulnerable module range as all versions before 1.12.14. Redis separately states impacted product lines include all Redis OSS/CE releases until the fixed builds listed in its advisory, because the vulnerable module path ships inside those product releases. Sources: NVD, Redis advisory. |
| Fixed versions | Redis lists fixed module branches as RedisTimeSeries 1.12.14, 1.10.24, and 1.8.23. It also lists fixed product releases: OSS/CE 6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3 and Redis Software 8.0.10-64, 7.22.2-79, 7.8.6-253, 7.4.6-279, 7.2.4-153. Source: Redis advisory. |
| Downstream/backport posture | Ubuntu tracks this as Medium and shows multiple releases still at Needs evaluation, which means distro consumers cannot assume instant downstream coverage. Bitnami also maps impacted Redis image ranges and fix version 8.2.6 for its container stream. Sources: Ubuntu CVE page, Docker Scout / Bitnami. |
| Exposure data | There is no strong internet-scale fingerprint in the reviewed sources for RedisTimeSeries specifically, which itself is a friction point for attackers and scanners. As a rough exposure backdrop, Censys previously observed 350,675 internet-accessible Redis services and 39,405 unauthenticated ones; that supports caution on Redis exposure generally, but inferring RedisTimeSeries population from it is only an approximation. Source: Censys exposed Redis analysis. |
| Disclosure and credit | Published 2026-05-05. Redis credits Team Skateboarding Dog (Joseph Surin, John Stephenson, and Annie Nie) and says the issue was identified during Wiz ZeroDay.Cloud activity. Source: Redis advisory. |
noisgate verdict.
The decisive factor is that this is not initial-access friendly: exploitation requires authenticated Redis access plus permission to run RESTORE, and that combination sharply narrows who can realistically hit it. Impact is unquestionably serious if triggered, but the reachable population is much smaller than the vendor's network-RCE framing suggests.
Why this verdict
- Start from 8.8 HIGH, then subtract for post-auth reality: the attacker must already hold valid Redis access, which usually means stolen creds, app compromise, or insider misuse rather than clean-sheet internet exploitation.
- Subtract again for command-level privilege: needing
RESTOREpermission is not cosmetic; mature Redis ACLs often deny risky import/admin commands to application users, and the vendor workaround exists precisely because this breaks the chain. - Subtract again for module gating and population narrowing: only Redis servers with RedisTimeSeries loaded are in scope, and RedisTimeSeries is a subset of Redis deployments; Redis Cloud is already fixed and generic Redis scan counts overstate this module's reachable population.
- Subtract for current threat intel: no KEV listing, no vendor-confirmed exploitation, no authoritative public PoC in reviewed sources, and a low EPSS all argue against treating this as emergency-wide incident response.
- Keep it above LOW because the impact is still ugly: if an attacker already sits in the right seat, this can become code execution in the Redis process and lead to data theft, tampering, or service loss.
Why not higher?
A higher rating would fit an unauthenticated or broadly reachable exploit path. This one is gated by authentication, by a dangerous command privilege, and by the presence of a specific optional module, so it behaves like a post-compromise amplifier rather than a universal external break-in. The lack of active exploitation evidence and low EPSS reinforce the downgrade.
Why not lower?
This is still memory corruption with plausible RCE in a high-value data service. Once an attacker has the needed access, the impact ceiling is full compromise of the Redis process, so writing it off as hygiene would understate the consequence.
What to do — in priority order.
- Deny
RESTOREto app identities — Use Redis ACLs to removeRESTOREfrom every service account that does not explicitly need import/restore workflows. For a MEDIUM noisgate verdict there is no mitigation SLA, so treat this as immediate hardening work while you schedule patching inside the 365-day remediation window. - Fence Redis behind trusted networks only — Restrict source IPs and service-to-service paths so only known application tiers and admin jump points can reach Redis. This reduces the odds that stolen cloud creds, developer laptops, or adjacent workloads can reach the vulnerable code path; again, there is no mitigation SLA for MEDIUM, but this is worth doing now because it cuts exposure for more than this CVE.
- Inventory Redis modules explicitly — Update your CMDB, discovery jobs, or config scans to record whether RedisTimeSeries is loaded and which branch it is on. That lets you avoid wasting cycles on plain Redis nodes that are not affected and focus remediation within the 365-day window on the systems that actually carry the module.
- Alert on
RESTOREusage — Create detections forRESTOREexecution by non-admin identities and for any sudden spike in data-import style commands. This will not fix the bug, but it is a strong tripwire for attempted exploitation and high-risk misuse while you work through remediation.
- Relying on Redis authentication alone does not help, because the vulnerability is explicitly reachable by an authenticated user.
- Patching only the core
redis-serverpackage while leaving an old RedisTimeSeries module in place does not solve the module bug. - An HTTP WAF is irrelevant for native Redis/RESP traffic on port
6379and will not inspect the payloads that matter here. - Generic unauthenticated network scans will miss the decisive question: whether RedisTimeSeries is loaded and on a vulnerable branch.
Crowdsourced verification payload.
Run this from an auditor workstation or admin jump host that can reach the Redis service, or directly on the target host if that's easier. Invoke it as ./check_redistimeseries_cve_2026_25588.sh 10.0.12.34 6379 'SuperSecret'; it needs redis-cli installed and a Redis credential allowed to run MODULE LIST.
#!/usr/bin/env bash
# check_redistimeseries_cve_2026_25588.sh
# Exit codes:
# 0 = PATCHED / not affected
# 1 = VULNERABLE
# 2 = UNKNOWN / error
set -u
HOST="${1:-127.0.0.1}"
PORT="${2:-6379}"
PASS="${3:-}"
if ! command -v redis-cli >/dev/null 2>&1; then
echo "UNKNOWN - redis-cli not found"
exit 2
fi
REDIS_CMD=(redis-cli -h "$HOST" -p "$PORT" --raw)
if [ -n "$PASS" ]; then
REDIS_CMD+=( -a "$PASS" )
fi
OUTPUT="$(${REDIS_CMD[@]} MODULE LIST 2>&1)"
RC=$?
if [ $RC -ne 0 ]; then
echo "UNKNOWN - failed to query Redis: $OUTPUT"
exit 2
fi
if echo "$OUTPUT" | grep -qiE 'NOAUTH|WRONGPASS|AUTH failed|DENIED'; then
echo "UNKNOWN - authentication/authorization failed for MODULE LIST"
exit 2
fi
if [ -z "$OUTPUT" ]; then
echo "UNKNOWN - empty response from MODULE LIST"
exit 2
fi
# Parse raw MODULE LIST output. In --raw mode it is typically key/value lines per module.
current_name=""
current_ver=""
found_name=""
found_ver=""
expect=""
while IFS= read -r line; do
case "$line" in
name)
expect="name"
;;
ver)
expect="ver"
;;
*)
if [ "$expect" = "name" ]; then
current_name="$line"
expect=""
elif [ "$expect" = "ver" ]; then
current_ver="$line"
expect=""
case "$current_name" in
timeseries|RedisTimeSeries|redistimeseries)
found_name="$current_name"
found_ver="$current_ver"
;;
esac
fi
;;
esac
done <<< "$OUTPUT"
if [ -z "$found_name" ]; then
echo "PATCHED - RedisTimeSeries module not loaded on this Redis instance"
exit 0
fi
if ! [[ "$found_ver" =~ ^[0-9]+$ ]]; then
echo "UNKNOWN - could not parse RedisTimeSeries module version: $found_ver"
exit 2
fi
# Redis modules often encode semver as integer, e.g. 1.12.14 -> 11214.
# Vendor fixed branches cited by Redis: 1.12.14, 1.10.24, 1.8.23.
ver="$found_ver"
is_patched=1
if [ "$ver" -ge 11214 ]; then
is_patched=0
elif [ "$ver" -ge 11024 ] && [ "$ver" -lt 11100 ]; then
is_patched=0
elif [ "$ver" -ge 10823 ] && [ "$ver" -lt 10900 ]; then
is_patched=0
fi
if [ $is_patched -eq 0 ]; then
echo "PATCHED - RedisTimeSeries module version integer $ver is on a cited fixed branch"
exit 0
fi
echo "VULNERABLE - RedisTimeSeries module version integer $ver is below cited fixed branches (1.12.14 / 1.10.24 / 1.8.23)"
exit 1
If you remember one thing.
RESTORE from non-admin identities where possible, and queue the affected module/product branches for normal patch execution. For a MEDIUM verdict, there is no noisgate mitigation SLA — go straight to the 365-day remediation window; in practice that means use ACL/network hardening now as sensible hygiene, then complete the actual vendor upgrade within the noisgate remediation SLA of 365 days unless your environment knowingly exposes Redis to untrusted users, in which case you should accelerate locally based on exposure.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.