В ядре Linux была решена следующая уязвимость: can: ucan: исправление чтения вне границы в strscpy() источнике. Коммит 7fdaf8966aae ("can: …
В ядре Linux была решена следующая уязвимость: can: ucan: исправление чтения вне границы в strscpy() источнике. Коммит 7fdaf8966aae ("can: ucan: использовать strscpy() вместо strncpy()") непреднамеренно ввел одно байтовое чтение вне границы аргумента source strscpy() (что несколько иронично, учитывая, что strscpy() предназначен быть более безопасной альтернативой :)). Рассмотрим следующие буферы: dest[len + 1]; /* завершится нулевым символом */ src[len]; /* может не завершиться нулевым символом */ При выполнении: strncpy(dest, src, len); dest[len] = '\0'; strncpy() будет читать до len байтов из src. С другой стороны: strscpy(dest, src, len + 1); приведет к чтению до len + 1 байтов из src, то есть произойдет чтение вне границ на один байт из src, если он не завершен нулевым символом. Обратите внимание, что байт src[len] никогда не копируется, но strscpy() все еще необходим для проверки произошла ли усеченность или нет. Это точный случай произошел в ucan. Коренная причина заключается в том, что источник не завершен нулевым символом. Вместо то чтобы делать копию в локальном буфере, немедленно завершите нулевым символом, как только usb_control_msg() возвращает. С этим локальная переменная firmware_str[] может быть убрана. Сверх этого выполните несколько рефакторингов: - ucan_ctl_payload->raw используется только для строки прошивки, поэтому переименуйте его в ucan_ctl_payload->fw_str и измените его тип с u8 на char. - ucan_device_request_in() используется только для получения строки прошивки, поэтому переименуйте его в ucan_get_fw_str() и рефакторинг, чтобы он непосредственно обрабатывал всю логику завершения строки.
Продукт читает данные за пределами конца или до начала предназначенного буфера.
https://cwe.mitre.org/data/definitions/125.html →Открыть в коллекции CWE →Злоумышленник атакует цель, передавая входные данные, вынуждающие приложение читать за пределами границы определённого буфера. Как правило, это происходит, когда значение, определяющее начало или конец чтения, установлено на позиции за пределами допустимой области памяти буфера. Атака данного типа может привести к раскрытию конфиденциальной информации, аварийному завершению работы системы или выполнению произвольного кода.
https://capec.mitre.org/data/definitions/540.html →Открыть в коллекции CAPEC →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-5.10 | Отслеживается | |
| linux-5.10 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |