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

Redis is an in-memory data structure store

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

This is a booby-trapped service hatch, not an open front door

CVE-2026-23479 is a use-after-free in Redis unblock-client handling. In affected redis-server builds, when a blocked client is evicted while Redis is re-executing that blocked command, the error path mishandles a freed object and can be steered toward remote code execution in the Redis server process. Authoritative upstream ranges are broad: GitHub and NVD track >= 7.2.0, < 8.6.3, while Redis separately published fixed builds across supported lines, including OSS/CE 6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3 and Redis Software fixed builds.

The vendor/NVD framing of HIGH is technically fair in a lab because the impact is full process compromise. But in enterprise reality this is not an unauthenticated edge bug: the attacker needs Redis access first, then a fairly specific blocked-command/eviction condition, and there is no KEV listing, no public in-the-wild evidence, and a very low EPSS. That makes this a meaningful post-auth hardening issue, not something that should outrank unauthenticated perimeter RCEs.

"RCE on paper, but it starts with Redis auth and a brittle trigger path, so this is post-compromise risk, not a fire drill"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get Redis reachability and credentials with redis-cli or a RESP client

The attacker first needs network access to the Redis listener and a credential or ACL context that can issue commands. In many enterprises that means compromising an application tier, stealing app secrets, abusing a sidecar, or landing on an internal host that already talks to Redis.
Conditions required:
  • Redis service is reachable from the attacker's network position
  • Authentication is disabled or the attacker has valid Redis credentials/ACL access
Where this breaks in practice:
  • Well-run Redis is usually bound to internal interfaces, private VPCs, or Kubernetes service networks
  • Managed Redis Cloud deployments were already fixed upstream at disclosure
  • MFA is irrelevant here, but secret management, SGs, mTLS, and ACLs sharply reduce exposure
Detection/coverage: External scanners can find exposed Redis and version strings; internal exposure depends on asset inventory and config collection. Credential theft and lateral movement into the app tier are more likely to generate useful telemetry than the exploit sequence itself.
STEP 02

Create the blocked-client state with a crafted command sequence

The bug lives in the blocked command re-execution path, so the attacker must drive Redis into that state first. Practically this means using a command flow that leaves a client blocked and then causes Redis to revisit that command later under the vulnerable logic.
Conditions required:
  • The chosen commands are permitted by the attacker's ACL
  • The target workload and timing allow creation of a blocked client state
Where this breaks in practice:
  • This is not a one-packet crash; it requires protocol-aware sequencing
  • ACLs that restrict command categories can remove useful primitives
  • Real application traffic patterns may make reliable setup harder than the CVSS base score suggests
Detection/coverage: Protocol logs are usually weak unless Redis command auditing is enabled through proxies, eBPF, or custom telemetry. Most commercial scanners will only flag vulnerable versions, not reproduce the blocked-client condition.
STEP 03

Force eviction during re-execution to trigger the use-after-free

The exploit needs the client to be evicted while Redis re-executes the blocked command. That is the pivotal condition called out by Redis and GitHub Security Advisory data, and it is what turns an ordinary error path into memory corruption.
Conditions required:
  • A blocked client exists
  • The attacker can reliably influence timing so eviction happens during re-execution
Where this breaks in practice:
  • This is the biggest practical brake: the trigger is timing-sensitive and stateful
  • Workload variance, memory pressure, and scheduler differences make exploitation less portable
  • GitHub's CVSS v4 rates attack complexity as High, which better matches reality than the NVD v3 AC:L label
Detection/coverage: You may see crashes, restarts, watchdog events, or odd Redis log entries, but deterministic exploit-specific signatures are unlikely. EDR on the host is more useful if the attacker reaches post-corruption code execution.
STEP 04

Weaponize memory corruption into process-level code execution

If the attacker can turn the UAF into controlled execution, they gain the privileges of the Redis process. From there the blast radius depends on host hardening: data theft, persistence, local pivots, and abuse of cloud metadata or nearby secrets become realistic.
Conditions required:
  • Successful memory corruption to code-exec transition
  • Redis process runs with access to sensitive data, local sockets, or cloud credentials
Where this breaks in practice:
  • Reliable RCE from memory corruption is harder than causing instability
  • Container isolation, seccomp, AppArmor/SELinux, non-root execution, and EDR can reduce host-level payoff
  • Single-purpose cache nodes limit downstream value compared with full app servers
Detection/coverage: EDR, container runtime telemetry, and child-process/network anomaly rules can catch post-exploit activity. Vulnerability scanners cannot validate this stage.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed active exploitation found in the sources reviewed; CISA's KEV catalog does not list this CVE as of 2026-06-02.
Proof-of-concept availabilityNo public PoC located in primary-source review. The public record is the Redis advisory and GitHub advisory, not exploit code.
EPSS0.00103 from the user-provided intel, which is very low and consistent with limited observed attacker interest.
KEV statusNot KEV-listed. That matters because KEV absence lowers urgency for broad emergency action when paired with no exploitation evidence.
CVSS / severity contextNVD scores it 8.8 HIGH with CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, but GitHub CNA publishes CVSS v4 7.7 HIGH with AC:H, which better reflects the exploit friction.
Affected versionsPrimary upstream range: >= 7.2.0, < 8.6.3 per NVD/GHSA. Redis' broader product advisory says impacted Redis Software is up to and including 8.0.6 unless on listed fixed builds, and Redis Cloud was already patched.
Fixed versionsRedis OSS/CE fixed builds: 6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3. Redis Software fixed builds: 8.0.10-64, 7.22.2-79, 7.8.6-253, 7.4.6-279, 7.2.4-153.
Distro / backport realityDebian tracks the CVE directly; Ubuntu OSV shows affected redis-server package revisions such as 24.04 5:7.0.15-1ubuntu0.24.04.4; SUSE shows a mixed picture with several redis7 not affected lines and redis/valkey released fixes on supported products.
Scanning / exposure dataInternet exposure is real but mostly misconfiguration-driven. Censys has documented hundreds of thousands of internet-accessible Redis services historically, but this bug still needs authentication or equivalent access, so exposure alone does not equal exploitability.
Disclosure / creditPublicly disclosed 2026-05-05. Redis credits Team Xint Code (Tim Becker, Jacob Newman, Juno IM) and says it was reported during the Wiz Zeroday Cloud event.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (6.6/10)

The single biggest reason this lands at MEDIUM is that exploitation starts with authenticated Redis access or equivalent internal trust position, which means the attacker is already partway through the kill chain. The second brake is the stateful, timing-sensitive blocked-client eviction trigger, which narrows the set of operators who can turn this from theory into stable RCE.

HIGH Technical impact is severe if successfully exploited
MEDIUM Real-world exploitability is lower than the NVD v3 score implies
MEDIUM Enterprise-wide urgency should be lower than unauthenticated edge RCEs

Why this verdict

  • Downgrade for attacker position: this requires authenticated remote access (PR:L) or an equivalently trusted internal foothold. In a 10,000-host estate, that means the attacker is usually already on the app path, not at the perimeter.
  • Downgrade for exploit friction: the vulnerable path is not generic command execution; it needs a blocked client to be evicted during re-execution. GitHub's CVSS v4 AC:H aligns better with that operational reality than NVD's v3 AC:L.
  • Downgrade for threat intel: no KEV, no confirmed in-the-wild exploitation, and very low EPSS (0.00103) all argue against emergency prioritization.
  • Hold at MEDIUM, not LOW: successful exploitation is still full Redis-process compromise with likely RCE, and Redis often sits near high-value data, session material, and application secrets.
  • Population adjustment: Redis is widely deployed, but many enterprise instances are internal-only, managed, or fronted by app tiers. Real exposed population is materially smaller than the raw install base.

Why not higher?

This is not an unauthenticated internet-edge bug. The chain assumes both reachability and low-privileged Redis access, then adds a specific runtime condition that is harder to satisfy reliably than the vendor's v3 score suggests. With no exploitation evidence, low EPSS, and no KEV listing, it does not justify HIGH or CRITICAL patch triage over active edge exposures.

Why not lower?

Once triggered, the outcome is not cosmetic: it can lead to remote code execution in a high-value infrastructure component. Redis commonly has access to sensitive in-memory data and may run on nodes that hold adjacent secrets or internal network reach, so the blast radius after success is still meaningful.

05 · Compensating Control

What to do — in priority order.

  1. Fence Redis off the network — Restrict Redis to application subnets, private service networks, or cluster-local access only. This removes the easiest precondition for exploitation; for a MEDIUM finding there is no noisgate mitigation SLA — go straight to the 365-day remediation window, but do this in the next routine network change if any instance is broader than intended.
  2. Require strong ACLs and rotate app credentials — Because the exploit needs Redis access, tightening ACL users, removing overly broad command categories, and rotating shared passwords directly attacks the most important prerequisite. No mitigation SLA applies at MEDIUM, so schedule through normal secret-rotation and config governance rather than emergency change.
  3. Move internet-facing or vendor-managed nodes to fixed builds first — If you do have directly exposed Redis, bastion-accessible admin Redis, or self-managed cloud cache nodes, those systems deserve the first patch wave because they collapse the reachability friction. Even at MEDIUM, use the early part of the remediation window for these outliers.
  4. Harden the runtime around Redis — Run Redis as non-root, keep filesystem permissions tight, enforce container/AppArmor/SELinux/seccomp where applicable, and monitor for child-process execution. These controls do not remove the bug, but they reduce host-level payoff if memory corruption becomes code execution.
  5. Alert on abnormal Redis command patterns and crashes — Track service restarts, segfaults, unusual blocked-client behavior, and unexpected command bursts from application identities. This is detective, not preventive, but it is the best way to catch a failed or partial exploitation attempt during the remediation window.
What doesn't work
  • A WAF does not help; this is Redis protocol traffic, not HTTP request filtering.
  • Relying on MFA does not help; Redis auth is typically app secret or ACL based, and the vulnerable path happens after connection establishment.
  • Simple version string matching alone is insufficient on distro-packaged systems because backports and vendor rebuilds can make raw semantic version checks misleading.
06 · Verification

Crowdsourced verification payload.

Run this on the target Redis host or inside the Redis container image you actually deploy. Invoke it as bash redis-cve-2026-23479-check.sh or bash redis-cve-2026-23479-check.sh /usr/local/bin/redis-server; no root is required if the redis-server binary is executable and in PATH. It checks upstream OSS/CE versions only and returns UNKNOWN for distro backports or custom vendor builds where version strings are ambiguous.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# redis-cve-2026-23479-check.sh
# Check Redis OSS/CE version exposure for CVE-2026-23479.
# Outputs exactly one of: VULNERABLE, PATCHED, UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

REDIS_BIN="${1:-redis-server}"

if ! command -v "$REDIS_BIN" >/dev/null 2>&1; then
  if [ -x "$REDIS_BIN" ]; then
    :
  else
    echo "UNKNOWN"
    exit 2
  fi
fi

OUT="$($REDIS_BIN --version 2>/dev/null || true)"
if [ -z "$OUT" ]; then
  echo "UNKNOWN"
  exit 2
fi

# Typical output contains: Redis server v=7.2.14 sha=...
VER="$(printf '%s' "$OUT" | sed -n 's/.*v=\([0-9][0-9.]*\).*/\1/p')"
if [ -z "$VER" ]; then
  echo "UNKNOWN"
  exit 2
fi

# If the operator is using a distro backport/custom build, the package manager should be consulted.
# This script only makes an upstream OSS/CE call on clean semantic versions.
case "$VER" in
  *[!0-9.]*|*.*.*.*)
    echo "UNKNOWN"
    exit 2
    ;;
esac

normalize() {
  local IFS=.
  local a=($1)
  printf '%03d%03d%03d' "${a[0]:-0}" "${a[1]:-0}" "${a[2]:-0}"
}

ver_ge() { [ "$(normalize "$1")" -ge "$(normalize "$2")" ]; }
ver_lt() { [ "$(normalize "$1")" -lt "$(normalize "$2")" ]; }
ver_eq() { [ "$(normalize "$1")" -eq "$(normalize "$2")" ]; }

# Upstream fixed OSS/CE versions published by Redis.
PATCHED_SET="6.2.22 7.2.14 7.4.9 8.2.6 8.4.3 8.6.3"
for p in $PATCHED_SET; do
  if ver_eq "$VER" "$p"; then
    echo "PATCHED"
    exit 0
  fi
done

# Versions older than 7.2.0 are outside the primary upstream GHSA/NVD affected range.
# However, Redis advisory also shipped fixes for 6.2.x; if you're on 6.2.x but not 6.2.22,
# package backports/customizations can make a simple check unreliable.
if ver_lt "$VER" "6.2.0"; then
  echo "PATCHED"
  exit 0
fi

if ver_ge "$VER" "6.2.0" && ver_lt "$VER" "7.2.0"; then
  if ver_eq "$VER" "6.2.22"; then
    echo "PATCHED"
    exit 0
  else
    echo "UNKNOWN"
    exit 2
  fi
fi

# Primary affected window from NVD/GHSA: >= 7.2.0 and < 8.6.3,
# minus the explicit fixed point releases listed by Redis.
if ver_ge "$VER" "7.2.0" && ver_lt "$VER" "8.6.3"; then
  echo "VULNERABLE"
  exit 1
fi

if ver_ge "$VER" "8.6.3"; then
  echo "PATCHED"
  exit 0
fi

echo "UNKNOWN"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: do not treat this like an internet-edge emergency unless you have Redis exposed more broadly than intended. First, identify every self-managed Redis instance and separate internet-facing / shared-service / secret-adjacent nodes from ordinary internal cache nodes; there is no noisgate mitigation SLA — go straight to the 365-day remediation window for this MEDIUM verdict. Use the first patch wave for externally reachable or high-value Redis, then clear the rest of the fleet within the noisgate remediation SLA of ≤365 days, while folding network fencing, ACL tightening, and runtime hardening into normal change cycles.

Sources

  1. Redis security advisory
  2. GitHub Security Advisory GHSA-93m2-935m-8rj3
  3. NVD CVE-2026-23479
  4. Redis 8.6 release notes
  5. Debian security tracker
  6. Ubuntu OSV entry
  7. SUSE CVE page
  8. CISA Known Exploited Vulnerabilities Catalog
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.