Ad

CVE-2026-13214

CRITICAL CVSS 3.1: 9,8 EPSS 0.51%
Обновлено 25 августа 2026
Payload
Параметр Значение
CVSS 9,8 (CRITICAL)
Тип уязвимости CWE-787 (Запись за пределами буфера)
Поставщик Payload
Публичный эксплойт Нет

Клиент OCPP 1.6 в subsys/net/lib/ocpp/ocpp_j.c содержит переполнение буфера стека в parse_getconfig_msg(). При обработке запроса GetConfiguration из центральной системы обработчик копировал контролируемую злоумышленником строку «ключа» JSON в фиксированный 50-байтовый буфер стека вызывающей стороны (skey[CISTR50], объявленный в subsys/net/lib/ocpp/ocpp.c), используя неограниченную функцию strcpy(). Проанализированное значение ключа указывает непосредственно на буфер приема, поэтому его длина ограничена только размером сообщения (CONFIG_OCPP_RECV_BUFFER_SIZE, по умолчанию 2048).

Сообщение GetConfiguration доставляется через соединение WebSocket, которое открывает точка оплаты, к настроенной центральной системе. Поток чтения ocpp_wsreader() считывает сообщение в ui->recv_buf и отправляет его в parse_getconfig_msg() через таблицу функций PDU. Злоумышленник, контролирующий конечную точку центральной системы, или посредник в незашифрованном соединении может отправить запрос GetConfiguration, поле «ключ» которого превышает 50 байт, и переполнить стек потока чтения байтами, выбранными злоумышленником.

Последствием является удаленно вызываемый сбой стека в потоке чтения OCPP: как минимум отказ в обслуживании и возможное удаленное выполнение кода в зависимости от мер по усилению защиты во время сборки, таких как канарейки стека и конфигурация MPU. Исправление заменяет strcpy() ограниченным strncpy(key, payload.key[0], CISTR50 - 1), за которым следует явное завершение NUL, что соответствует ограниченным копиям, уже используемым родственными обработчиками.

Показать оригинальное описание (EN)

The OCPP 1.6 client in subsys/net/lib/ocpp/ocpp_j.c contains a stack buffer overflow in parse_getconfig_msg(). When handling a GetConfiguration request from the central system, the handler copied the attacker-controlled JSON "key" string into the caller's fixed 50-byte stack buffer (skey[CISTR50], declared in subsys/net/lib/ocpp/ocpp.c) using an unbounded strcpy(). The parsed key value points directly into the receive buffer, so its length is bounded only by the message size (CONFIG_OCPP_RECV_BUFFER_SIZE, default 2048). The GetConfiguration message is delivered over the WebSocket connection that the charge point opens to its configured central system. The reader thread ocpp_wsreader() reads the message into ui->recv_buf and dispatches it to parse_getconfig_msg() via the PDU function table. An attacker who controls the central system endpoint, or a man-in-the-middle on an unencrypted connection, can send a GetConfiguration request whose "key" field exceeds 50 bytes and overflow the reader thread's stack with attacker-chosen bytes. The consequence is a remotely triggerable stack smash on the OCPP reader thread: at minimum a denial of service, and plausibly remote code execution depending on build-time hardening such as stack canaries and MPU configuration. The fix replaces the strcpy() with a bounded strncpy(key, payload.key[0], CISTR50 - 1) followed by explicit NUL termination, matching the bounded copies already used by the sibling handlers.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1