LWN: 名为 Sequoia 的 seq_file 漏洞!

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

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

The Sequoia seq_file vulnerability

By Jake Edge
July 21, 2021
DeepL assisted translation
https://lwn.net/Articles/863729/

7 月 20 日,Qualys 公司披露了 Linux 内核中一个名为 Sequoia 的本地 root 漏洞。在内核打上补丁(或采用一些可能不能完全解决问题的措施)之前,系统整体可能是不安全的。这个漏洞依赖于内核中的一条代码路径中 64 位 size_t 值被 "转换" 为有 signed integer 符号整数,这个过程就会出现溢出问题。该漏洞于 6 月 9 日被报告给 Red Hat 公司,同时发现的还有一个本地 systemd 拒绝服务(DoS)漏洞,会导致内核崩溃。如果系统中有无法信任的本地用户的话,需要尽快针对这两个问题进行更新。出于谨慎的考虑,建议所有系统都应该进行更新。

内核的 seq_file 接口是用来处理/proc 等虚拟文件的,它需要 buffer 来存储文件的每一行内容。最开始时,会给 buffer 分配一个内存 page,但如果这还不够的话,就会分配一个新的 buffer,其大小是旧 buffer 的两倍。这里都利用了一个 size_t 类型,它是一个 unsigned 64-bit 数据(在 x86_64 上),足以存放结果了,也就是说 "系统会在这个倍增之后的数据溢出之前,早就会耗尽内存了"。

但该值( m->size)被传递给了其他原本用于处理有符号的 32 位整数的函数。具体来说,该漏洞利用了 /proc/self/mountinfo 的输出,从而走到内核中的一个地方是满足这个条件的。这样一来,攻击者可以创建一个路径长度大于 1GB 的目录结构(大约 100 万个嵌套目录),将其 bind-mount 到一个 user namespace 中,然后删除该目录。在这个 namespace 里,攻击者打开并读取 mountinfo,会导致字符串"//deleted "被写入 seq_file buffer。seq_file 接口生成了一个大小为 2GB 的 buffer,但是在写字符串的代码中,这个值被解释为-2GB,错误的数值被用来决定在哪个位置写入数据了。当然,肯定会导致写在 buffer 之外了,所以它在 vmalloc() 区域的其他地方写入了一个精心计算过的位置。

正如我们所猜测的那样,在 buffer 外写一个 10 字节的固定字符串只是一个复杂的、但容易重现的获取 root shell 的一系列操作的开始。Qualys 公司的报告详细介绍了这一过程,其中涉及到过去十年左右出现的几个不同的内核特性:用户命名空间、BPF 和 user-space page fault handling(或者 FUSE 也行,它出现得要早得多)。但最终还是这里对 buffer size 的整数大小处理不当导致了问题。修复方法是一种创可贴方式的 fix,简单拒绝 "过大" 的 seq_buf 分配动作。

Qualys 生成它已经有了可以在 "缺省安装的 Ubuntu 20.04、Ubuntu 20.10、Ubuntu 21.04、Debian 11 和 Fedora 34 工作站" 上获得 root 权限的漏洞利用代码,此外,"其他 Linux 发行版肯定有漏洞,而且可能可以利用"。它所建议的弥补措施之一是关闭非特权用户创建 user namespace 的能力(通过配置 /proc/sys/kernel/unprivileged_userns_clone),因为这将阻止他们,使得攻击者无法加载那些导致 1GB 以上路径名称的嵌套过深的目录。但是,即使没有 user namespace,也可能还有其他攻击方案:

然而,攻击者可能会通过 FUSE 来挂载一个非常深的目录,我们还没有完全探索这种可能性,因为我们无意中发现了 systemd 中的 CVE-2021-33910:如果攻击者通过 FUSE 来 mount 一个长目录(超过 8MB),那么 systemd 会耗尽其堆栈,崩溃,从而使整个操作系统崩溃(kernel panic)。

Qualys 对 systemd 的 bug 也进行了很好的描述,它来源于在 mount 路径处理代码中从 strdup()切换到 strdupa()。于是基于 heap 的分配变成了基于 stack 的分配,这就提供了耗尽这 8MB(默认设置)stack 的可能性。因此,当 systemd 在解析 /proc/self/mountinfo 时发现一个过长的路径时,会导致 segmentation fault;Linux 因为发现没有了 init 进程,于是也就 panic 了。

用户可以通过 mount FUSE 文件系统来创建一个超过 8MB 的目录路径,将 FUSE 文件系统 move 至该目录,并让 systemd 再次解析 mountinfo 文件,这样就可以触发 panic 了。这种情况下的 fix 是改回使用 strdup(),回复到 2015 年 4 月的那个 commit 之前的情况。

systemd crash 是在研究 Sequoia 漏洞时发现的,当时在使用 BPF 代码查找并重写内核中的 modprobe_path 变量。在加载 kernel module 时,这个代码分支会被用来以 root 身份运行一个可执行文件(通常是/sbin/modprobe)。把它指向一个不同的路径(也就是放置攻击者可以放置自己的可执行文件的位置),就能够获得 root 权限。

人们期望 BPF verifier 能检查出来并且避免执行有害程序,毕竟这是防止用户加载不安全的 BPF program 的主要机制。但这里就可以利用上 user-space page-fault handling 机制了。userfaultfd() 系统调用允许利用者在运行 BPF verifier 后暂停内核的执行。然后,"//deleted " 这个写入动作就可以被精心设计之后覆盖掉 BPF 代码的某个位置,因为该代码的加载位置就是 vmalloc() 区域。userfaultfd() 就可以被攻击者利用来在 BPF 代码被验证后、但在其被 JIT 编译之前来改变这部分代码,从而逃避掉 BPF verifier 的检查。

"//deleted "的越界写入可能会导致信息泄露,这样攻击代码可以对它写入的数据进行一些比较有限的控制。之后,Manfred Paul 发现的 2020 年 BPF 漏洞中的技术就可以被用来 "将这个危害很有限的越界写入行为转化为对内核内存的任意读写"。文档中介绍了六个步骤的 "Exploitation overview" 概述了如何实现攻击,而后面的部分则给出了所有惊心动魄的细节。对于那些对内核漏洞感兴趣,想了解如何利用这些漏洞的复杂步骤的人来说,这篇文章会很有用。

这两个漏洞已经在 Red Hat 公司手中近一个月的时间了,然后 7 月 6 日它们被报告到 kernel and distribution security reports 的非公开邮件列表中。两周后,大家协调发布了参考声明(advisories),发行版更新也开始推出。目前还不清楚为什么会有长达一个月的延迟,因为这两个 fix 方案似乎看起来都不是特别有困难。也许这些时间是用来寻找内核和 systemd 中的其他类似问题的。

显然,漏洞核心的这个整数转换动作需要 fix。我们不禁要问,在内核中还有多少类似的 size 转换问题。人们可能还想知道,当 userfaultfd()被添加到内核中时,究竟会给多少 bug 提供了孵化地。因为它为用户空间提供了一种可以基本任意暂停内核在它选择的位置的方法。这在今后的内核漏洞中可能会再次派上用场。

同时,systemd 可能已经仔细检查过它其他地方进行的 stack-based 分配动作,特别是对用户可控制的那些值,比如路径参数。虽然对于用户空间的程序来说,耗尽 stack 通常并不算是一个安全问题(当然,除了像 Stack Clash 这种著名漏洞),但 systemd 在许多 Linux 系统中处于一个很敏感的位置。用户能做到的任何会使其瘫痪的手段都是有效的系统拒绝服务攻击。

我们在这里看到的那种整型转换问题,在其他一些语言(比如 Rust)中可能根本不是个问题。另一方面,堆栈(或内存)耗尽并不是真正可以在编程语言层面上处理的事情;遇到资源限制必须以某种方式处理,比如让这个用户空间的程序 crash, 这其实是操作系统完全可以做的对系统无害的保护。但至少我们的系统中现在的 bug 数量又减少了 2 个,变成了 N-2。可不幸的是,这里这个未知数 N 可能大得令人不安。

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

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

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

Qwen3.6-27B本地部署实战:LM Studio配置、硬件门槛与避坑指南 大语言模型本地部署是当前AI工程落地的核心能力之一,其本质是将高参数量模型(如27B级)在受限硬件环境下实现低延迟、高稳定推理。关键技术原理涵盖量化压缩(如GGUF格式与q4_k_m精度权衡)、GPU显存分配策略(KV Cache管理与Offloading机制)、以及运行时环境兼容性(CUDA驱动、llama.cpp后端版本)。该能力直接决定私有化AI应用的技术可行性与成本边界,广泛应用于企业知识库构建、代码辅助、长文档分析等对数据主权和响应确定性要求高的场景。本文聚焦Qwen3.6-27B这一典型27B模 阅读详情

相关推荐

阿里云百炼平台创建智能体-上传文档

阿里云百炼智能体-上传文档文件

weixin_43930851的博客 1355

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 390

CANopen中SDO、PDO字典以及COB-ID理解

CANopen SDO PDO

sunarmy的专栏 2万+

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 228

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程)

使用python对创芯科技CANalyst-II分析仪进行二次开发

ningqingzy的博客 1万+

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 708

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

51-14 Retentive Network,RetNet 多尺度保留机制序列建模论文精读

RetNet 提出了多尺度保留机制序列建模,该机制支持三种计算范式,即并行、循环和分块循环。RetNet有更好的全局注意力建模、高效的计算效率、对遮挡的鲁棒性、支持基于注意力的图像生成、与置信度相关的门控机制和多任务学习等特点,对不同视觉任务可以共享历史注意力记忆,可以同时进行分类、分割、检测等任务。RetNet在视觉领域应该有广阔的应用前景。

AIgraphX 1613

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

Altium Designer应用技巧5: Altium Live账号的获得

为了更好的应用Altium Designer,我们需要得到一个Altium Live账号,但从其英文或者中文官方网站取得,都需要7个工作日的时间,而且对于个人用户来说,并不是100%都能够获取到。本文介绍一种,从俄罗斯Altium官方网站获取账号的方法,可以立即使用。     1、点击http://live.altium-ru.com/#Join网址进入俄罗斯Altium官方网站,Altiu

snmplink的博客 1万+

DeepSeek + 微信:手把手教你把 AI 接入个人微信,秒变“高情商”聊天助手(防封指南)

将 DeepSeek 接入微信,本质上是给你的微信装了一个**“最强外挂”**。它不仅能帮你回消息,还能帮你写周报、查资料、甚至陪聊解闷。工具是服务于人的,不要让 AI 完全替代了你的真情实感。毕竟,真正的高情商,是屏幕背后那个在乎对方的你。先申请一个小号,按照步骤跑通流程。然后试着调整 Prompt,训练一个属于你自己的“嘴替”吧!

BUG猿的博客 957

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 485

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 158

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 133

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 122

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 184

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 229

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 435

利用python中matplotlib.pyplot库绘制图

plt.plot(x,y) # x,y是每个点的坐标,plot()把每个点按顺序画折线。plt.subplots(2,2)表示绘制2*2的子图布局,axs[0,0]表示在第0行第0列绘制子图...coordinates_i[:,0]表示获取每一行(每一个spot)的第0列(x坐标)coordinates_i[:,1]表示获取每一行(每一个spot)的第0列(y坐标)plot.subplot(2,2,1) 表示子图布局是2*2的,开始绘制第一个。也可以导入数据绘制。可以设置color属性,设置颜色。

qq_46147236的博客 100

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 368

【AI】方案设计:通用慢节奏策略游戏大模型智能体流水线开发架构设计——基于 OODA 文件总线与可插拔协议适配层

本方案设计了一种面向慢节奏策略游戏的通用智能体架构,通过C++与Python协同构建协议适配层,实现游戏状态与控制指令的解耦。核心采用文件目录作为唯一总线,基于OODA循环分阶段处理态势感知、研判、决策与执行,支持多协议接入、可审计回放、人在回路干预及自愈容错。大模型仅依赖统一结构化简报与通用指令,具备高兼容性与可扩展性,适用于复杂推演场景。

hknaruto的专栏 175
上一篇: LWN: NUMA对各种内存类型的分配策略!
下一篇: LWN:讨论如何了结CentOS 8!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值