Linux Distros 未修补的漏洞:CVE-2025-39844

critical Nessus 插件 ID 265845

语言:

简介

Linux/Unix 主机上安装的一个或多个程序包存在漏洞,但供应商表示不会修补此漏洞。

描述

Linux/Unix 主机中安装的一个或多个程序包受到一个漏洞影响,而供应商没有提供补丁程序。

- mm将页面表同步声明移动到 linux/pgtable.h 在内部测试期间当计算机使用 4 级分页并具有大量持久性内存时我们开始观察到间歇性引导失败缺陷无法处理 的页面错误addressffffe70000000034 #PF内核模式下的监控程序写入访问 #PFerror_code(0x0002) - 不存在页 PGD 0 P4D 0 Oops0002 [#1] SMP NOPTI RIP
0010:__init_single_page+0x9/0x6d Call Trace: <TASK> __init_zone_device_page+0x17/0x5d memmap_init_zone_device+0x154/0x1bb pagemap_range+0x2e0/0x40f memremap_pages+0x10b/0x2f0 devm_memremap_pages+0x1e/0x60 dev_dax_probe+0xce/0x2ec [device_dax] dax_bus_probe+0x6d/0xc9 [... snip ...] </TASK> 事实证明当 vmemmap 区域跨越两个 PGD 条目时初始化 vmemmap结构页面数组时会发生内核错误因为新 PGD 条目只安装在 init_mm.pgd 中而未安装在 init_mm.pgd 中。在其他任务的页表中。并查看 __populate_section_memmap() if (vmemmap_can_optimize(altmap, pgmap)) // does not sync top level page tables r = vmemmap_populate_compound_pages(pfn, start, end, nid, pgmap); else // 同步 x86 中的顶级页面表 r = vmemmap_populate(start, end, nid, altmap);在正常路径中arch/x86/mm/init_64.c 中的 vmemmap_populate() 同步顶级页表请参阅提交 9b861528a801 (x86-64、mem更新直接映射和 vmemmap 映射变更的所有 PGD)以便所有系统中的任务可发现新的 vmemmap 区域。但是当 vmemmap_can_optimize() 返回 true 时优化路径会跳过顶层页表的同步。这是因为 vmemmap_populate_compound_pages() 是在核心 MM 代码中实现的而该代码不处理顶级页表的同步。相反,核心 MM 历史上一直依赖每个架构来手动执行此同步。我们不是第一个遇到因未同步的顶级页表而造成的崩溃的人今年早些时候Gwan-geek Mun 在执行 x86 代码时遇到内核错误之后尝试解决问题 [1] [2]在相应的顶级条目同步之前访问了 vmemmap 区域。当时据认为仅当出于调试目的扩大结构页面时才会触发问题并且该补丁未得到进一步更新。事实证明当前依赖每个 arch 手动处理页表同步的方法很不稳定因为 1) 很容易忘记同步顶级页表 2) 也很容易忽略内核不应访问同步前的 vmemmap 和 direct 映射区域。 # 解决方案使页表同步代码更健全更不易遗漏为解决此问题Dave Hansen 建议 [3] [4] 引入 {pgd,p4d}_populate_kernel() 来更新页表的内核部分并允许每个架构在安装顶级条目时明确执行同步。通过此方法,我们无需再担心缺少同步步骤,从而降低了未来发生回归的风险。
新接口重新使用 vmalloc 和 ioremap 用于同步页表的现有 ARCH_PAGE_TABLE_SYNC_MASK、PGTBL_P*D_MODIFIED 和 arch_sync_kernel_mappings() 设施。
pgd_populate_kernel() 看起来像这样 static inline void pgd_populate_kernel(unsigned long addr, pgd_t
*pgd, p4d_t *p4d) { pgd_populate(&init_mm, pgd, p4d); if (ARCH_PAGE_TABLE_SYNC_MASK & PGTBL_PGD_MODIFIED) arch_sync_kernel_mappings(addr, addr);值得注意的是 vmalloc() 和 apply_to_range() 通过调用 p*d_alloc_track() 和 arch_sync_kernel_mappings() 仔细地同步页表因此它们不受 ---truncated--- (CVE-2025-39844)

请注意,Nessus 依赖供应商报告的程序包是否存在进行判断。

解决方案

目前尚未有任何已知的解决方案。

另见

https://security-tracker.debian.org/tracker/CVE-2025-39844

插件详情

严重性: Critical

ID: 265845

文件名: unpatched_CVE_2025_39844.nasl

版本: 1.1

类型: local

代理: unix

系列: Misc.

发布时间: 2025/9/25

最近更新时间: 2025/9/25

支持的传感器: Frictionless Assessment Agent, Nessus Agent, Agentless Assessment, Nessus

风险信息

VPR

风险因素: Medium

分数: 5.9

CVSS v2

风险因素: High

基本分数: 7.5

时间分数: 5.5

矢量: CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P

CVSS 分数来源: CVE-2025-39844

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 8.5

矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

时间矢量: CVSS:3.0/E:U/RL:O/RC:C

漏洞信息

CPE: p-cpe:/a:debian:debian_linux:linux, cpe:/o:debian:debian_linux:13.0, cpe:/o:debian:debian_linux:12.0

必需的 KB 项: Host/local_checks_enabled, Host/cpu, global_settings/vendor_unpatched, Host/OS/identifier

易利用性: No known exploits are available

漏洞发布日期: 2025/9/19

参考资料信息

CVE: CVE-2025-39844