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

exploitDog

redhat логотип

CVE-2024-50250

Опубликовано: 09 нояб. 2024
Источник: redhat
CVSS3: 7.3
EPSS Низкий

Описание

In the Linux kernel, the following vulnerability has been resolved: fsdax: dax_unshare_iter needs to copy entire blocks The code that copies data from srcmap to iomap in dax_unshare_iter is very very broken, which bfoster's recent fsx changes have exposed. If the pos and len passed to dax_file_unshare are not aligned to an fsblock boundary, the iter pos and length in the _iter function will reflect this unalignment. dax_iomap_direct_access always returns a pointer to the start of the kmapped fsdax page, even if its pos argument is in the middle of that page. This is catastrophic for data integrity when iter->pos is not aligned to a page, because daddr/saddr do not point to the same byte in the file as iter->pos. Hence we corrupt user data by copying it to the wrong place. If iter->pos + iomap_length() in the _iter function not aligned to a page, then we fail to copy a full block, and only partially populate the destination block. This is catastrophic for data confidentiality because we expose stale pmem contents. Fix both of these issues by aligning copy_pos/copy_len to a page boundary (remember, this is fsdax so 1 fsblock == 1 base page) so that we always copy full blocks. We're not done yet -- there's no call to invalidate_inode_pages2_range, so programs that have the file range mmap'd will continue accessing the old memory mapping after the file metadata updates have completed. Be careful with the return value -- if the unshare succeeds, we still need to return the number of bytes that the iomap iter thinks we're operating on.

A buffer overrun exists in the Linux kernel. When pos and len are passed to dax_file_unshare, they are not aligned to an fsblock boundary, and the iteration of pos and length in the _iter function will reflect this.

Отчет

A moderate-impact flaw was found in the Linux kernel's filesystem DAX (fsdax) implementation. When the file position and length passed to dax_file_unshare are not aligned to a filesystem block boundary, dax_unshare_iter() copies data using addresses that point to the start of the mapped page rather than to the requested file offset, so user data is copied to the wrong place and corrupted. Additionally, when the copy range does not end on a block boundary, only part of the destination block is populated, which exposes stale persistent-memory contents and results in an information disclosure. A local user with access to a file on a DAX-mounted persistent-memory filesystem could abuse unaligned unshare operations to corrupt data or disclose residual contents of other files. This issue affects the kernel and kernel-rt packages in Red Hat Enterprise Linux 9, where a fix is being pursued through the delegated maintenance process, and in Fedora. Red Hat Enterprise Linux 6, 7, and 8 streams and the hosted OpenShift cluster environments are not affected. Red Hat Product Security has rated this issue as MODERATE impact, lower than the upstream Important severity (NVD CVSS 3.1 score 7.1, CVE.org 7.8), because exploitation requires local access to a system configured with a DAX-enabled filesystem on persistent memory, which is not a common configuration.

Меры по смягчению последствий

Mitigation for this issue is either not available or the currently available options don't meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.

Затронутые пакеты

ПлатформаПакетСостояниеРекомендацияРелиз
Red Hat Enterprise Linux 6kernelNot affected
Red Hat Enterprise Linux 7kernelOut of support scope
Red Hat Enterprise Linux 7kernel-rtOut of support scope
Red Hat Enterprise Linux 8kernelNot affected
Red Hat Enterprise Linux 8kernel-rtNot affected
Red Hat Enterprise Linux 9kernelWill not fix

Показывать по

Дополнительная информация

Статус:

Moderate
Дефект:
CWE-835
https://bugzilla.redhat.com/show_bug.cgi?id=2324858kernel: fsdax: dax_unshare_iter needs to copy entire blocks

EPSS

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

7.3 High

CVSS3

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

CVSS3: 7.1
ubuntu
почти 2 года назад

In the Linux kernel, the following vulnerability has been resolved: fsdax: dax_unshare_iter needs to copy entire blocks The code that copies data from srcmap to iomap in dax_unshare_iter is very very broken, which bfoster's recent fsx changes have exposed. If the pos and len passed to dax_file_unshare are not aligned to an fsblock boundary, the iter pos and length in the _iter function will reflect this unalignment. dax_iomap_direct_access always returns a pointer to the start of the kmapped fsdax page, even if its pos argument is in the middle of that page. This is catastrophic for data integrity when iter->pos is not aligned to a page, because daddr/saddr do not point to the same byte in the file as iter->pos. Hence we corrupt user data by copying it to the wrong place. If iter->pos + iomap_length() in the _iter function not aligned to a page, then we fail to copy a full block, and only partially populate the destination block. This is catastrophic for data confidentiality beca...

CVSS3: 7.1
nvd
почти 2 года назад

In the Linux kernel, the following vulnerability has been resolved: fsdax: dax_unshare_iter needs to copy entire blocks The code that copies data from srcmap to iomap in dax_unshare_iter is very very broken, which bfoster's recent fsx changes have exposed. If the pos and len passed to dax_file_unshare are not aligned to an fsblock boundary, the iter pos and length in the _iter function will reflect this unalignment. dax_iomap_direct_access always returns a pointer to the start of the kmapped fsdax page, even if its pos argument is in the middle of that page. This is catastrophic for data integrity when iter->pos is not aligned to a page, because daddr/saddr do not point to the same byte in the file as iter->pos. Hence we corrupt user data by copying it to the wrong place. If iter->pos + iomap_length() in the _iter function not aligned to a page, then we fail to copy a full block, and only partially populate the destination block. This is catastrophic for data confidentiality be

CVSS3: 7.1
msrc
почти 2 года назад

fsdax: dax_unshare_iter needs to copy entire blocks

CVSS3: 7.1
debian
почти 2 года назад

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

CVSS3: 7.1
github
почти 2 года назад

In the Linux kernel, the following vulnerability has been resolved: fsdax: dax_unshare_iter needs to copy entire blocks The code that copies data from srcmap to iomap in dax_unshare_iter is very very broken, which bfoster's recent fsx changes have exposed. If the pos and len passed to dax_file_unshare are not aligned to an fsblock boundary, the iter pos and length in the _iter function will reflect this unalignment. dax_iomap_direct_access always returns a pointer to the start of the kmapped fsdax page, even if its pos argument is in the middle of that page. This is catastrophic for data integrity when iter->pos is not aligned to a page, because daddr/saddr do not point to the same byte in the file as iter->pos. Hence we corrupt user data by copying it to the wrong place. If iter->pos + iomap_length() in the _iter function not aligned to a page, then we fail to copy a full block, and only partially populate the destination block. This is catastrophic for data confidentiality...

EPSS

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

7.3 High

CVSS3