Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

fstec логотип

BDU:2026-03811

Опубликовано: 22 фев. 2022
Источник: fstec
CVSS3: 5.5
CVSS2: 4.6
EPSS Низкий

Описание

Уязвимость функции skb_unclone_keeptruesize() модуля net/core/skbuff.h поддержки сетевых функций ядра операционной системы Linux связана с несанкционированным вызовом утверждения. Эксплуатация уязвимости может позволить нарушителю вызвать отказ в обслуживании

Вендор

Canonical Ltd.
Red Hat Inc.
Сообщество свободного программного обеспечения

Наименование ПО

Ubuntu
Red Hat Enterprise Linux
Linux

Версия ПО

16.04 LTS (Ubuntu)
18.04 LTS (Ubuntu)
20.04 LTS (Ubuntu)
9 (Red Hat Enterprise Linux)
от 5.16 до 5.16.18 включительно (Linux)
от 5.17 до 5.17.1 включительно (Linux)
от 4.4.260 до 4.5 (Linux)
от 4.9.260 до 4.10 (Linux)
от 4.14.224 до 4.15 (Linux)
от 4.19.179 до 4.20 (Linux)
от 5.4.103 до 5.5 (Linux)
от 5.10.21 до 5.11 (Linux)
от 5.11.4 до 5.15.32 включительно (Linux)

Тип ПО

Операционная система

Операционные системы и аппаратные платформы

Canonical Ltd. Ubuntu 16.04 LTS
Canonical Ltd. Ubuntu 18.04 LTS
Canonical Ltd. Ubuntu 20.04 LTS
Red Hat Inc. Red Hat Enterprise Linux 9
Сообщество свободного программного обеспечения Linux от 5.16 до 5.16.18 включительно
Сообщество свободного программного обеспечения Linux от 5.17 до 5.17.1 включительно
Сообщество свободного программного обеспечения Linux от 4.4.260 до 4.5
Сообщество свободного программного обеспечения Linux от 4.9.260 до 4.10
Сообщество свободного программного обеспечения Linux от 4.14.224 до 4.15
Сообщество свободного программного обеспечения Linux от 4.19.179 до 4.20
Сообщество свободного программного обеспечения Linux от 5.4.103 до 5.5
Сообщество свободного программного обеспечения Linux от 5.10.21 до 5.11
Сообщество свободного программного обеспечения Linux от 5.11.4 до 5.15.32 включительно

Уровень опасности уязвимости

Средний уровень опасности (базовая оценка CVSS 2.0 составляет 4,6)
Средний уровень опасности (базовая оценка CVSS 3.1 составляет 5,5)

Возможные меры по устранению уязвимости

В условиях отсутствия обновлений безопасности от производителя рекомендуется придерживаться "Рекомендаций по безопасной настройке операционных систем LINUX", изложенных в методическом документе ФСТЭК России, утверждённом 25 декабря 2022 года.
Использование рекомендаций:
Для Linux:
https://git.kernel.org/stable/c/a9a6d30264327d8ff7f23da33e7a77ffb793fa3f
https://git.kernel.org/stable/c/a903e516f5df44b46d526b403d93e7be1a425538
https://git.kernel.org/stable/c/23629b673b780d967b88a850b1518cf0f0ffc6aa
Для программных продуктов Red Hat Inc.:
https://access.redhat.com/security/cve/cve-2022-49142
Для программных продуктов Ubuntu:
https://ubuntu.com/security/CVE-2022-49142
Компенсирующие меры:
- минимизация пользовательских привилегий;
- отключение/удаление неиспользуемых учётных записей пользователей;
- контроль журналов аудита кластера для отслеживания попыток эксплуатации уязвимости.

Статус уязвимости

Подтверждена производителем

Наличие эксплойта

Данные уточняются

Информация об устранении

Уязвимость устранена

Идентификаторы других систем описаний уязвимостей

EPSS

Процентиль: 47%
0.0062
Низкий

5.5 Medium

CVSS3

4.6 Medium

CVSS2

Связанные уязвимости

CVSS3: 7.5
ubuntu
больше 1 года назад

In the Linux kernel, the following vulnerability has been resolved: net: preserve skb_end_offset() in skb_unclone_keeptruesize() syzbot found another way to trigger the infamous WARN_ON_ONCE(delta < len) in skb_try_coalesce() [1] I was able to root cause the issue to kfence. When kfence is in action, the following assertion is no longer true: int size = xxxx; void *ptr1 = kmalloc(size, gfp); void *ptr2 = kmalloc(size, gfp); if (ptr1 && ptr2) ASSERT(ksize(ptr1) == ksize(ptr2)); We attempted to fix these issues in the blamed commits, but forgot that TCP was possibly shifting data after skb_unclone_keeptruesize() has been used, notably from tcp_retrans_try_collapse(). So we not only need to keep same skb->truesize value, we also need to make sure TCP wont fill new tailroom that pskb_expand_head() was able to get from a addr = kmalloc(...) followed by ksize(addr) Split skb_unclone_keeptruesize() into two parts: 1) Inline skb_unclone_keeptruesize() for the common case, when skb is not cl...

CVSS3: 5.5
redhat
больше 1 года назад

In the Linux kernel, the following vulnerability has been resolved: net: preserve skb_end_offset() in skb_unclone_keeptruesize() syzbot found another way to trigger the infamous WARN_ON_ONCE(delta < len) in skb_try_coalesce() [1] I was able to root cause the issue to kfence. When kfence is in action, the following assertion is no longer true: int size = xxxx; void *ptr1 = kmalloc(size, gfp); void *ptr2 = kmalloc(size, gfp); if (ptr1 && ptr2) ASSERT(ksize(ptr1) == ksize(ptr2)); We attempted to fix these issues in the blamed commits, but forgot that TCP was possibly shifting data after skb_unclone_keeptruesize() has been used, notably from tcp_retrans_try_collapse(). So we not only need to keep same skb->truesize value, we also need to make sure TCP wont fill new tailroom that pskb_expand_head() was able to get from a addr = kmalloc(...) followed by ksize(addr) Split skb_unclone_keeptruesize() into two parts: 1) Inline skb_unclone_keeptruesize() for the common case, when skb is not cl...

CVSS3: 7.5
nvd
больше 1 года назад

In the Linux kernel, the following vulnerability has been resolved: net: preserve skb_end_offset() in skb_unclone_keeptruesize() syzbot found another way to trigger the infamous WARN_ON_ONCE(delta < len) in skb_try_coalesce() [1] I was able to root cause the issue to kfence. When kfence is in action, the following assertion is no longer true: int size = xxxx; void *ptr1 = kmalloc(size, gfp); void *ptr2 = kmalloc(size, gfp); if (ptr1 && ptr2) ASSERT(ksize(ptr1) == ksize(ptr2)); We attempted to fix these issues in the blamed commits, but forgot that TCP was possibly shifting data after skb_unclone_keeptruesize() has been used, notably from tcp_retrans_try_collapse(). So we not only need to keep same skb->truesize value, we also need to make sure TCP wont fill new tailroom that pskb_expand_head() was able to get from a addr = kmalloc(...) followed by ksize(addr) Split skb_unclone_keeptruesize() into two parts: 1) Inline skb_unclone_keeptruesize() for the common case, when sk

CVSS3: 7.5
debian
больше 1 года назад

In the Linux kernel, the following vulnerability has been resolved: n ...

CVSS3: 5.5
github
10 месяцев назад

In the Linux kernel, the following vulnerability has been resolved: net: preserve skb_end_offset() in skb_unclone_keeptruesize() syzbot found another way to trigger the infamous WARN_ON_ONCE(delta < len) in skb_try_coalesce() [1] I was able to root cause the issue to kfence. When kfence is in action, the following assertion is no longer true: int size = xxxx; void *ptr1 = kmalloc(size, gfp); void *ptr2 = kmalloc(size, gfp); if (ptr1 && ptr2) ASSERT(ksize(ptr1) == ksize(ptr2)); We attempted to fix these issues in the blamed commits, but forgot that TCP was possibly shifting data after skb_unclone_keeptruesize() has been used, notably from tcp_retrans_try_collapse(). So we not only need to keep same skb->truesize value, we also need to make sure TCP wont fill new tailroom that pskb_expand_head() was able to get from a addr = kmalloc(...) followed by ksize(addr) Split skb_unclone_keeptruesize() into two parts: 1) Inline skb_unclone_keeptruesize() for the common case, when...

EPSS

Процентиль: 47%
0.0062
Низкий

5.5 Medium

CVSS3

4.6 Medium

CVSS2