LWN:安全路径遍历的挑战

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03 需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。 阅读详情

关注了就能看到更多这么棒的文章哦~

By *Daroc Alden*, January 6, 2026
 Gemini translation
https://lwn.net/Articles/1050887/

LPC

Aleksa Sarai 作为 runc 容器运行时 (runc container runtime) 的维护者,一直面临着不断出现的安全挑战。最近,runc 又发现了一个安全漏洞 (CVE-2025-52565),该漏洞可以追溯到 Linux 上处理文件路径的难题。Sarai 在 2025 年 Linux Plumbers Conference (LPC) 上发表了演讲(幻灯片;视频),探讨了 runc 在处理路径遍历漏洞 (path-traversal vulnerabilities) 时遇到的一些问题,并呼吁大家使用他正在开发的用于安全路径遍历的库 libpathrs。 

Sarai 首先定义了什么是路径安全。他表示,有两种路径安全与 runc 相关。第一种是“常规”路径安全,适用于任何处理文件的应用程序:在对路径进行操作时,其中的某个组件可能会意外发生变化。例如,一个程序可能正使用绝对路径从某个目录读取多个文件,结果路径中间的一个目录被更改了,导致程序看到的是来自不同目录的文件组合。这种检查时间与使用时间 (Time-of-Check to Time-of-Use, TOCTTOU) 错误在路径处理代码中屡见不鲜。他展示了一张幻灯片,列出了自 2017 年以来 runc 中的 14 个不同 CVE,所有这些漏洞都涉及此类问题。LWN 曾报道过 2024 年和 2019 年发生的两次特别值得关注的相关漏洞。Sarai 补充说,第二种路径安全涉及虚拟文件系统 (virtual filesystems) 的特性,需要单独处理。 

Sarai 指出,目前对常规路径安全有一些部分解决方案。例如,openat2() 系统调用允许程序员向内核指定应如何处理某些类型的歧义。但另一方面,openat2() 经常被 seccomp() 拦截,因为其参数之一是指针。因此,唯一真正的替代方案是在用户空间实现路径遍历,即手动打开路径上的每个目录。这虽然“相当棘手,但确实可行”。例如,Go 语言最近在其标准库中增加了对这种遍历的支持。Sarai 建议使用 libpathrs,这是他编写的一个采用 MPL 与 LGPL 许可 (MPL-and-LGPL-licensed) 的 Rust 库(带有 C 绑定),旨在正确处理这种复杂的操作。 

除了大多数应用程序面临的问题外,runc 还需要处理 Sarai 所称的“严格”路径安全 (strict path safety)。一些虚拟文件系统,如 procfs,在安全使用时需要格外注意细节。在普通文件系统上,人们通常不在乎具体打开了哪个 i 节点 (inode),只要它位于正确的路径即可。但在 procfs 上,操作程序预期的确切文件至关重要:“覆盖挂载 (overmounts) 或伪造挂载可能会诱导我们执行危险操作。”例如,如果用户通过绑定挂载 (bind-mount) 将另一个文件挂载到 /proc/self/exe 路径,那么使用该路径重新执行自身的程序就会出现严重错误。 

这并不是一个新问题。对于常规文件,可以使用 openat2() 的 RESOLVE_NO_XDEV 选项来避免跨越文件系统边界。但由于“某种原因”,这不适用于 procfs 的魔术链接 (magic links)(如 /proc/self/exe)。[Sarai 后来写信向我澄清,原因其实很简单:因为 /proc/self/exe 指向另一个文件系统上的可执行文件,RESOLVE_NO_XDEV 自然会拦截它。关键在于确保魔术链接没有被覆盖挂载为指向“错误”的其他文件系统的引用。] 解决方案是使用文件系统挂载 API (filesystem mount API) 获取一个任何其他进程都无法干扰的 procfs 根目录的文件描述符。 

然而,这种方案在嵌套的用户命名空间 (user namespaces) 中并不奏效。因此,需要在嵌套命名空间中运行的程序(如 runc,当用户想要嵌套容器时)必须采取极其细致的检查,以确保特定路径没有被覆盖挂载。 

Sarai 预计会有人怀疑这是否真的是个问题,理由是只有 root 权限才能执行挂载。但在 runc 的语境下,事实并非完全如此。当然,首先要处理挂载命名空间的问题。但还有一个事实是,runc 被大量不同的高级容器程序用作后端。这些程序通常给予用户很大的灵活性来配置容器挂载,这可能导致在 runc 工作时发生非特权挂载,有时甚至允许程序逃逸容器。他说,runc 中几乎所有的漏洞都是误配置 Bug。有时 runc 可以通过识别明显的无效配置来防止这些问题,而有时则需要对高级程序进行补丁,以从源头上避免生成有问题的配置。 

随后,他通过一系列随堂测验展示了配置容器时遇到的困难。runc 最近的两个漏洞 CVE-2025-31133 和 CVE-2025-52565,都涉及利用挂载和符号链接诱导 runc 让容器访问 /proc/sys/kernel/core_pattern,这是用于配置内核核心转储 (core-dump) 处理程序的 procfs 文件。向该文件写入内容可能会导致进程从容器内部逃逸。 

Sarai 在演讲中没有详细说明为什么设置核心转储处理程序会导致逃逸,但他可能指的是 Christian Brauner 在 5 月份强调的问题。当内核启动配置好的核心转储处理程序时,它是以根命名空间的全特权运行的;如果容器能将核心转储处理程序配置为其控制的文件,这实际上就允许它接管整个系统。 

runc 的解决方案是对特殊 i 节点进行更严格的校验,转向使用 libpathrs 进行路径遍历,并使用 TIOCGPTPEER 校验控制台文件是否真的是控制台文件,而不是被悄悄覆盖挂载的普通文件。但这项工作也启发了一些潜在的内核更改,使编写此类路径处理代码更加安全。Sarai 建议为 openat2() 添加 RESOLVE_NO_DOTDOT 选项,以彻底禁止在路径中使用“..”。他还表示,阻止对 procfs 魔术链接的所有覆盖挂载也会有所帮助;虽然自内核 6.12 版本起大多数此类挂载已被阻止,但在安全领域,“大多数”和“全部”是完全不同的概念。 

对于编写用户态应用程序的人员,Sarai 的建议是切换到更多基于文件描述符的设计,而不是依赖路径。理想情况下,使用 openat2() 或 libpathrs 来处理路径操作。他说,每一个处理路径名的系统调用都潜在危险。 

现场一位听众询问 Sarai 对安全处理 cgroupfs(用于操作控制组的虚拟文件系统)路径有何建议。Sarai 回答说,openat2() 的 RESOLVE_NO_XDEV 标志在确保操作留在 cgroupfs 内部方面非常有帮助。第 1 版控制组“很烦人”,他对于如何正确处理它们没有太多建议。但对于第 2 版控制组,他建议打开文件系统根目录的文件描述符并检查 i 节点号。如果正确,就能更确定程序正在与真正的 cgroupfs 交互。 

另一位听众询问他是如何发现这些 CVE 的。他回答说:“不是通过模糊测试 (fuzzing) 之类的手段,只是靠人工审查。”2018 年,他“提供了一个非常通用的脚本”,用于创建可能导致路径遍历问题的场景。从那时起,人们一直在钻研 runc,并逐渐演进攻击手段,以触及日益隐蔽的边界情况。他说,每一年的 CVE 往往都是前一年攻击手段的演进。 

还有人问,他是否认为使用 procfs 和 cgroupfs 等虚拟文件系统来提供内核接口是一个错误。Sarai 回答说:“确实,有几种攻击如果是采用系统调用设计的接口就永远不会发生,这确实让人深思。”但另一方面,虚拟文件系统也确实带来了一些好处。例如,LXC 容器运行时有一个伪造的 procfs 实现 (fake procfs implementation),可以帮助不了解控制组的程序识别进程和内存限制。 

这并没能说服所有人,他们指出拦截系统调用的方法也是存在的。然而,此时会议时间已到,讨论延伸到了走廊。 

[ 感谢 Linux 基金会,作为 LWN 的旅行赞助商,资助了前往东京参加 Linux Plumbers Conference 的行程。 ] 

LWN 评论概述

评论区深入探讨了 Linux 挂载模型的复杂性及其安全影响。有用户建议限制挂载点(如统一放在 /mnt 下)以减少用户态处理的奇技淫巧,认为过多的挂载灵活性增加了安全负担。针对 Sarai 提出的内核改进方案,有人探讨了 RESOLVE_NO_DOTDOT 与现有 RESOLVE_BENEATH 的区别,并吐槽了 seccomp 因为指针参数而禁用 openat2 这种“为了安全而阻碍安全”的讽刺现象。此外,开发者们讨论了“万物皆文件”模型的局限性,建议在内核接口设计中更多采用系统调用而非虚拟文件系统(如 PIDFD_SELF),以规避路径遍历风险。最后,关于“配置错误是否算漏洞”也引发了争论,部分用户认为应由管理员负责,而另一些人则强调 runc 这种底层组件应具备更强的防御性设计。 

  全文完
 LWN 文章遵循 CC BY-SA 4.0 许可协议。 

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C ) 华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入] 阅读详情

相关推荐

安全路径遍历为何难?从字符串黑名单到Linux内核openat2的解法

路径遍历漏洞是Web应用、文件服务与容器工具中反复出现的高危安全问题。其本质在于应用层对路径字符串的文本校验,与Linux内核解析路径时遵循的目录项、符号链接、挂载点等动态语义存在系统性错位,由此衍生出编码绕过、符号链接跳转与TOCTOU竞态等攻击面。传统的黑名单过滤和realpath检查只能应对静态表示,无法消除校验与使用之间的原子性缺口。Linux内核自5.6版本引入openat2系统调用,通过RESOLVE_BENEATH等标志在路径解析过程中强制约束目录边界,从源头杜绝越界访问;配合Landlock

weixin_26642481的博客 338

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

路径遍历漏洞深度解析:从原理到防御的完整安全指南

在Web应用安全体系中,路径遍历(Path Traversal)是一种基础却危害极大的漏洞类型。它源于用户输入直接拼接文件系统路径,导致攻击者可通过构造特殊字符串突破目录限制,实现任意文件读取甚至远程代码执行。理解其底层原理是防御的前提:操作系统路径解析规则、编码解码差异以及平台特性共同构成了攻击面。这项技术价值不仅在于防止敏感信息泄露,更在于切断攻击链的关键跳板。随着微服务、对象存储和压缩包处理等场景的普及,路径遍历的变种日益复杂,安全测试与代码审计中需重点关注输入校验与路径规范化。本文结合实战案例,系统

weixin_42539414的博客 57

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

qt工程引入opencv库步骤

第一步:新建qt工程 第二步:在工程名.pro文件中添加opencv库的路径                   INCLUDEPATH += /home/liyuanzhe/opencv-2.4.8/include/opencv \ /home/liyuanzhe/opencv-2.4.8/include/opencv2 LIBS += /home/liyuanzhe/open

superyuanzhe的专栏 5722

LWN:利用openat2()来限制文件路径查询

点击上方蓝色“Linux News搬运工”关注我们~Restricting path name lookup with openat2()ByJonathan Corb...

Linux News搬运工 1012

HDMI调试避坑指南:从AVI InfoFrame到通用控制包,这些DataIsland Packet细节千万别忽略

本文深入解析HDMI调试中DataIsland数据包的关键细节,包括AVI InfoFrame、通用控制包和音频时钟再生包(ACR)的配置与故障排查。通过实际案例和寄存器配置示例,帮助工程师快速定位显示异常、色彩失真和音频中断等问题,提升HDMI接口调试效率。

weixin_30897233的博客 635

LWN:符号链接带来的麻烦!

关注了就能看到更多这么棒的文章哦~The trouble with symbolic linksJuly 7, 2022This article was contributed by Chris RiddochDeepL assisted translationhttps://lwn.net/Articles/899543/在 2022 年的 sambaXP 会议上,Je...

Linux News搬运工 415

ECN实战指南:如何用SAP系统搞定工程变更(附库存处理避坑技巧)

本文详细解析了如何在SAP系统中高效执行工程变更通知(ECN),特别聚焦PP模块的操作流程与库存处理技巧。通过实战案例和系统操作指南,帮助制造业企业避免库存混乱和生产中断,实现从创建到生效的全流程管理。

m5n6o7的博客 1079

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 457

LWN: Spectre 漏洞利用了BPF!

关注了就能看到更多这么棒的文章哦~Spectre revisits BPFBy Jonathan CorbetJune 24, 2021DeepL assisted translation...

Linux News搬运工 756

第一部分:VTK基础入门(第1章:VTK简介与概述)

VTK简介与核心特性概述 VTK(Visualization Toolkit)是一个开源的跨平台C++类库,专用于3D计算机图形学、图像处理和科学可视化。由Kitware公司开发,VTK自1993年起源以来,经历了开源化、成熟化和现代化多个发展阶段,现已成为科学可视化的核心工具之一。 VTK的核心特性包括: 管道架构:模块化设计实现数据流管理 丰富的数据支持:处理多边形数据、图像数据等 强大的渲染能力:集成OpenGL,支持多种渲染技术 最新版本VTK 9.4.2增强了现代C++支持,优化了内存管理,并提升

仰望星空的博客 2359

LWN:分布式备份存储文件系统:ngnfs!

客户端尝试以块遍历顺序获取块访问权限,但该顺序可能会改变,因此客户端的结构是使用尝试锁 (trylocks),即尝试获取锁,如果无法获取则不阻塞。该文件系统是元数据密集型系统,归档代理主要对扩展属性 (xattrs) 进行元数据更改,这些属性描述了文件内容当前的存储位置,包括数据所在的存储层级以及在介质(例如磁带)上的位置等信息。Brown 说,这就是该文件系统的背景:“大量文件,主要进行元数据流转,但令人恼火的是,随着文件内容的流动,我们需要大量聚合带宽,这样就不是一个节点来完成所有这些工作了。

Linux News搬运工 1554

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LWN: 避免ext4文件系统中泄露个人信息!

关注了就能看到更多这么棒的文章哦~Preventing information leaks from ext4 filesystemsBy Jonathan CorbetApril 27,...

Linux News搬运工 334

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LWN:ELF note泄露了信息!

关注了就能看到更多这么棒的文章哦~When ELF notes reveal too muchBy Jonathan CorbetFebruary 22, 2024Gemini translationhttps://lwn.net/Articles/962782/Linux 内核使用多种加固技术来防止自身受到破坏,其中一种技术是内核地址空间布局随机化 (KASLR)。但是,如果内核泄露其代码最终位...

Linux News搬运工 338

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LWN:6.11 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 6.11 merge windowBy Jonathan CorbetJuly 18, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/982034/6.11 内核发布的合并窗口于 7 月 14 日打开;截至撰写本文时,自那时起已有 4,072 个非合并变...

Linux News搬运工 2653

LWN:改进page-fault的可扩展性!

关注了就能看到更多这么棒的文章哦~Improving page-fault scalabilityBy Jonathan CorbetMay 29, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932298/某些话题总是每年都要回到开发会议上来讨论一次,通常是因为开发人员仍在努力针对某个特定的问题寻找一个可行的解决...

Linux News搬运工 1164

Traefik 入口点(EntryPoints)配置全解:监听地址、协议选择与 HTTP/TLS/HTTP3 行为定制

Traefik 的 EntryPoint(入口点)是静态配置中定义“接收入站连接”的抽象:它决定 Traefik 监听哪个端口、使用 TCP 还是 UDP 协议,以及每个端口上的 HTTP 行为(重定向、TLS、中间件、超时、转发头信任等)。本文以 Traefik 官方文档 [入口点配置参考](https://link.gitcode.com/i/30b60468eda0d690a5318ea1f

gitblog_00453的博客 585

仓颉 stdx.crypto.digest 消息摘要库实战指南:MD5/SHA 系列/HMAC/SM3 算法与 OpenSSL 3 依赖配置

`stdx.crypto.digest` 是仓颉标准库扩展(stdx)提供的消息摘要(Message Digest)能力包,覆盖 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、HMAC 与国密 SM3 等常用算法。本文以 [crypto_digest_package_overview.md](https://link.gitcode.com/i/55dbf579be37

gitblog_01128的博客 1066

C语言为何仍是操作系统内核开发的首选?内存管理与硬件交互的绝对优势

在计算机系统编程领域,内存管理和硬件交互是两大核心基础概念。内存管理涉及程序如何分配、使用和释放内存资源,直接关系到程序的性能和稳定性;硬件交互则决定了软件能否直接、高效地控制底层硬件设备。这些底层技术原理构成了操作系统、驱动程序和嵌入式系统等关键基础设施的基石,其技术价值在于实现对计算资源的极致控制和高效利用。在操作系统内核、嵌入式固件、高性能中间件等对性能、资源消耗和确定性要求极高的应用场景中,开发者需要一种能够提供直接内存访问、最小运行时开销和高效硬件抽象的语言。C语言凭借其指针操作、内存布局控制和贴

android_mylove的专栏 442

LinuxKit 中的内核自防护(KSPP):从推荐配置到 CI 强制校验的实践指南

> 导读:本文以 [projects/kspp/README.md](https://link.gitcode.com/i/02db68e8ea953cef7d627b7dd89130b5) 为骨架,系统梳理 LinuxKit(Moby 项目衍生)如何落实内核自防护项目(KSPP)的加固思路——从 KSPP 的社区背景与 Roadmap,到仓库内真实可查的 `kernel_config`/sysc

gitblog_00055的博客 368

Linux 内核 RCU 完全解析:从“读、复制、更新“思想到核心 API、玩具实现与生产级源码

RCU(Read-Copy-Update,读、复制、更新)是 Linux 内核中专为"读多写少"场景设计的同步机制,诞生于 2.5 内核开发周期。本文基于内核树中 [Documentation/RCU/whatisRCU.rst](https://link.gitcode.com/i/b66e239eb3bc40759780986b5191500f) 的完整内容,并结合 [include/linu

gitblog_00076的博客 551

深入 Linux ARM64 底层异常处理:从 vbar_el1 向量表到 handle_arch_irq(raspberry-pi-os 第 3.2 讲)

本篇技术指南聚焦 raspberry-pi-os 操作系统开发系列课程第 3 讲的第二小节:Linux 内核(v4.14,arm64 架构)的底层异常处理实现。文章以 `vbar_el1` 为线索定位向量表,逐段拆解 `kernel_ventry`、`kernel_entry`、`el1_irq` 与 `irq_handler` 宏的源码逻辑,理清"异常从向量表入口一直传递到 `handle_ar

gitblog_00833的博客 447

深入理解Linux网络技术内幕 P1-P2

细品

西门吹雪 539

Device Tree/ACPI 与 fwnode 内核基础设施

设备树 ACPI 表 的基础知识

mapleay的博客 230
上一篇: LWN:新年预测
下一篇: LWN:创建面向游戏的调度器开发经验
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值