В ядре Linux устранена следующая уязвимость:
net: удалить заполнение нулями CAP_SYS_RAWIO в dev_validate_header
dev_validate_header() читает dev->hard_header_len напрямую, когда
заголовки уровня коротких ссылок с заполнением нулями для держателей CAP_SYS_RAWIO:
если (способен (CAP_SYS_RAWIO)) {
memset(ll_header + len, 0, dev->hard_header_len - len);
вернуть истину;
}
Пути отправки пакетов вызывают dev_validate_header() на skbs, чей запас был
выделенный из более раннего чтения hard_header_len. Если устройство
переконфигурирован так, чтобы dev->hard_header_len увеличивался перед проверкой,
memset записывает за пределы зарезервированного буфера, запись за пределами границ. Эта запись за пределами границ сегодня маскируется в некоторых путях SOCK_RAW, потому что
одно и то же одновременное увеличение может сначала привести к тому, что skb_push() превысит
зарезервированный запас и триггер skb_under_panic().
Удалить заполнение нулями
ветку, прежде чем делать эти операции чтения hard_header_len согласованными, поэтому
Исправления моментальных снимков не превращают громкую панику в тихую перезапись. Этот путь доступен только для протоколов L2 переменной длины, где
len <hard_header_len, но len >= min_header_len. В дереве не осталось
Протокол L2 переменной длины реализует header_ops->validate, а
Обход CAP_SYS_RAWIO, который заполняет нули и принимает короткие заголовки, не имеет
реальная ценность, выходящая за рамки возможности тестирования намеренно искаженных входных данных.
Удалите ветку CAP_SYS_RAWIO. Остальные чтения
dev->hard_header_len в dev_validate_header() предназначены только для сравнения и
не оказывают влияния на безопасность памяти.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header dev_validate_header() reads dev->hard_header_len directly when zero-padding short link layer headers for CAP_SYS_RAWIO holders: if (capable(CAP_SYS_RAWIO)) { memset(ll_header + len, 0, dev->hard_header_len - len); return true; } Packet send paths call dev_validate_header() on skbs whose headroom was allocated from an earlier hard_header_len read. If the device is reconfigured so that dev->hard_header_len increases before validation, the memset writes past the reserved buffer, an out-of-bounds write. This out-of-bounds write is masked in some SOCK_RAW paths today because the same concurrent increase can first make skb_push() exceed the reserved headroom and trigger skb_under_panic(). Remove the zero-padding branch before making those hard_header_len reads consistent, so the snapshot fixes do not turn a loud panic into a silent overwrite. This path is only reached for variable length L2 protocols, where len < hard_header_len but len >= min_header_len. No remaining in-tree variable length L2 protocol implements header_ops->validate, and the CAP_SYS_RAWIO bypass that zero-pads and accepts short headers has no real value beyond allowing testing of intentionally malformed input. Drop the CAP_SYS_RAWIO branch. The remaining reads of dev->hard_header_len in dev_validate_header() are comparisons only and have no memory safety impact.
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 13
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.2.80
|
3.2.81
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
5.10.265
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
5.15.216
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
6.1.183
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
6.6.152
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
6.12.104
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
6.18.45
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
7.1.9
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.6
|
7.2
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16.36
|
— |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.1.28
|
— |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.4.8
|
— |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
4.5.2
|
— |