2026-04-18

11 篇热帖

All 12 moonwalkers had "lunar hay fever" from dust smelling like gunpowder (2018)

月球尘埃:对人类健康的潜在威胁与应对

本文探讨了月球尘埃对人类健康的潜在威胁,以及欧洲航天局 (ESA) 为解决这一问题所做的研究。

月球尘埃的特性及影响:

  • 历史影响: 阿波罗登月宇航员在返回地球后,因月球尘埃导致喉咙疼痛、眼睛流泪等症状,被称为“月球花粉热”。所有12位登上月球的人都出现了不同程度的反应。
  • 尘埃特性: 月球尘埃主要由硅酸盐构成,颗粒锋利、磨蚀性强,类似玻璃。由于月球引力低(地球的六分之一),尘埃颗粒更容易悬浮并深入肺部。
  • 潜在危害: 即使是直径仅为人类头发五十分之一的微小颗粒,也可能在肺部停留数月,增加毒性影响的风险。研究表明,模拟月球土壤可能对肺和脑细胞造成长期损害。
  • 特殊因素: 月球缺乏大气层,表面持续受到太阳辐射轰击,导致尘埃带电。这种静电作用使尘埃更容易悬浮并进入设备和人体。

ESA的研究与应对:

  • 研究目标: ESA正在进行一项大型研究项目,旨在评估月球尘埃对人类健康的风险程度。
  • 模拟尘埃: 研究人员将使用从德国火山地区开采的模拟月球尘埃进行测试,该尘埃具有类似于月球尘埃的玻璃状结构。
  • 研究内容: 研究将测试设备和月球尘埃的行为,并评估其毒性。
  • 资源利用: 月球尘埃并非完全是坏事,可以通过加热将其制成砖块,用于建造宇航员的庇护所,还可以从中提取氧气,以支持月球上的长期任务。
  • 当前举措:
    • ESA正在荷兰的欧洲空间研究技术中心举办关于月球资源的研讨会。
    • ESA宇航员亚历山大·格斯特在太空进行“气道监测”实验,以监测微重力环境下的肺部健康状况。

总结:

月球尘埃对宇航员的健康构成潜在威胁,但ESA正在积极研究和应对这一问题,致力于为人类未来的月球探索提供保障。

Show HN: Smol machines – subsecond coldstart, portable virtual machines

好的,这是对提供的内容的总结,用中文写成,字数少于800字:

SmolVM:轻量级隔离虚拟机的介绍

SmolVM 是一个命令行工具,旨在通过默认隔离的方式运行软件。它基于轻量级虚拟机的概念,提供快速启动、跨平台支持和灵活的资源管理。

核心功能:

  • 快速启动和运行隔离虚拟机: SmolVM 可以在 macOS 和 Linux 系统上实现亚秒级的冷启动速度,并提供跨平台兼容性。
  • 打包可移植虚拟机: 可以将带有状态的虚拟机打包成单个 .smolmachine 文件,方便在支持的平台上进行恢复和部署。
  • 环境声明: 使用 Smolfile (TOML 格式) 定义可重复的 VM 配置,简化环境管理。

使用场景:

  • 沙箱不受信任的代码: SmolVM 提供硬件隔离,可以将不受信任的程序运行在独立的虚拟机中,防止其访问主机文件系统、网络和凭据。
  • 创建可移植的可执行文件: 可以将任何工作负载打包成自包含的二进制文件,无需安装步骤和运行时依赖,启动速度快于 200 毫秒。
  • 持久化开发环境: 创建、停止、启动虚拟机,软件包安装保持不变,方便开发工作。
  • 安全使用 Git 和 SSH: 将主机 SSH 代理转发到虚拟机,确保私钥不会进入虚拟机,增强安全性。

工作原理:

SmolVM 为每个工作负载提供真实的硬件隔离,每个虚拟机拥有独立的内核,基于 Hypervisor.framework (macOS) 或 KVM (Linux)。它使用 libkrun VMM 和自定义内核 libkrunfw。虚拟机镜像采用 OCI 格式,与 Docker 镜像兼容。默认配置为 4 个 vCPU 和 8 GiB 内存,并支持通过 virtio balloon 实现弹性内存管理。

与其他技术的比较:

技术 隔离级别 启动时间 架构 是否支持 macOS 原生 是否可嵌入 SDK 是否支持可移植文件
SmolVM VM/工作负载 <200ms 库 (libkrun) .smolmachine
容器 命名空间 (共享内核) ~100ms 守护进程 通过 Docker VM 镜像 (需守护进程)
Colima 命名空间 (1 VM) ~秒 守护进程
QEMU 命名空间 (1 VM) ~秒 守护进程
Firecracker 独立 VM ~15-30s 进程
Kata 独立 VM <125ms 运行时栈

平台支持:

  • macOS (Apple Silicon): arm64 Linux
  • macOS (Intel): x86_64 Linux
  • Linux x86_64: x86_64 Linux
  • Linux aarch64: aarch64 Linux

已知限制:

  • 网络功能需要手动开启 (--net 参数)。
  • 仅支持目录挂载,不支持单个文件挂载。
  • macOS 上二进制文件需要使用 Hypervisor.framework entitlements 进行签名。
  • --ssh-agent 需要主机上运行 SSH 代理。
  • GPU 支持仍在开发中。

安装方式:

通过 curl 命令下载并运行安装脚本,或者从 GitHub Releases 下载预编译的二进制文件。

总结:

SmolVM 提供了一种轻量级、安全、可移植的虚拟机解决方案,适用于各种场景,例如沙箱化不受信任的代码、打包应用程序和创建隔离的开发环境。

Show HN: I made a calculator that works over disjoint sets of intervals

区间并集计算器总结 (Summary of Interval Union Calculator)

该文档描述了一个基于区间并集算术的计算器,它扩展了传统的区间算术,尤其是在处理包含零的区间除法时表现更优。其核心思想是使用区间 [a, b] 表示所有介于 a 和 b 之间的数值(包含 a 和 b),并使用区间并集 [a, b] U [c, d] 表示不相交的区间集合。

主要特点和功能:

  • 区间并集算术: 允许进行区间上的加、减、乘、除、幂运算,以及各种函数运算。
  • 包含性: 如果从每个输入并集中选择一个实数,并对这些实数计算相同的表达式,则结果保证在输出并集中。
  • 不确定性表示: 可以使用区间来表示不确定性,例如 50 * (10 + [-1, 1]) 结果为 [450, 550]
  • 语法:
    • 区间:[a, b]
    • 并集:[a, b] U [c, d]
    • 支持加、减、乘、除、幂运算和各种函数。
    • 允许混合使用裸数字(如 3.14,会被视为窄区间 [3.14, 3.14])和区间。
    • 支持嵌套区间,例如 [0, [0, 100]] 等价于 [0, 100]
  • 支持函数: 提供了多种数学函数,包括常数 (inf, ∞, pi, e)、上下界函数 (lo, hi)、并集 (hull)、绝对值、平方根、平方逆、对数(自然对数、底2对数、底10对数)、指数函数、三角函数(正弦、余弦、正切)、反三角函数(反余弦、反正弦、反正切)、最小值和最大值函数。
  • 全精度模式: 在全精度模式下,结果区间保证包含使用无限精度计算得到的真实值,解决了浮点数精度问题。全精度模式下,输入数字会被解释为最接近的 IEEE 754 值,输出则显示所有可用的小数位。非全精度模式下,输入数字被解释为零宽度的区间,输出则显示最多 4 位小数。
  • 开源: 项目代码在 GitHub 上开源,欢迎反馈问题和赞助。
  • 未来工作: 计划增加输入解释和显示精度的独立控制、ans 变量、并集操作符、更直观的并集优先级、以及支持输入空并集。

核心优势:

该计算器通过区间并集算术,克服了传统浮点数计算的精度问题,并能够处理包含零的除法运算,为表示和计算不确定性提供了强大的工具。

Tesla tells HW3 owner to 'be patient' after 7 years of waiting for FSD

特斯拉FSD Beta 10.69 障碍事件摘要

本文报道了荷兰特斯拉车主米斯cha·西格特曼斯(Mischa Sigtermans)就其购买的特斯拉Model 3上的“全自动驾驶”(FSD)功能发起集体诉讼的事件。

核心问题:

西格特曼斯于2019年购买了特斯拉Model 3,当时支付了6400欧元购买了FSD功能。然而,在等待了7年后,特斯拉的最新FSD Supervised版本仅适用于配备AI4计算机的新车型,而像他的HW3车型却无法获得该功能。

特斯拉的回应:

西格特曼斯致电特斯拉询问HW3车型何时能够获得FSD功能。特斯拉客服的回应是“请耐心等待”。当西格特曼斯追问他购买的究竟是什么时,客服表示他购买的是“全自动驾驶能力”。即使西格特曼斯提及马斯克承认HW3硬件不足以支持完全自动驾驶,客服也表示“没有相关信息”。特斯拉拒绝提供硬件升级计划、退款政策或具体时间表,仅表示会“分享可用的信息”。客服在西格特曼斯告知其有来自29个国家的3000名HW3车主加入集体诉讼后,将其电话挂起并最终回复“请耐心等待”,随后立即关闭了他的案件。

HW3承诺破灭的时间线:

  • 2019年: 特斯拉将FSD作为软件升级就能实现完全自动驾驶的软件包进行销售。
  • 2024年8月: 特斯拉AI副总裁阿硕·埃卢斯瓦米(Ashok Elluswamy)承认HW3运行的模型规模较小,且与AI4存在差距。
  • 2025年1月: 埃隆·马斯克承认需要更换所有搭载HW3计算机的车辆中的计算机才能支持FSD。
  • 专利尝试: 特斯拉曾申请专利,试图将现代FSD模型塞进HW3硬件中,但该专利也承认这种方法可能导致系统失效。

集体诉讼及欧洲法律环境:

西格特曼斯发起了一个名为hw3claim.nl的网站,旨在将欧盟各地的HW3+FSD车主聚集起来进行集体诉讼,每个车主索赔6800欧元。一周内,已有来自29个国家的3000名车主加入。 欧洲的消费者保护法比美国更强大,车主拥有更健全的权利,集体诉讼框架也更加完善。

总结:

特斯拉对HW3车主的回应“请耐心等待”引发了强烈不满。由于FSD已在欧洲推出,而HW3车主却无法使用,他们意识到自己与拥有AI4车型的邻居之间的差距。 随着集体诉讼规模的扩大,以及欧洲法律的强大支持,这场诉讼很可能最终进入法庭。

Spending 3 months coding by hand

编程退修:我在布鲁克林六周的探索 (编程退修:我在布鲁克林六周的探索)

本文讲述了作者在纽约布鲁克林参加编程退修的经历和学习成果,旨在在AI辅助编程普及的时代,专注于“手写代码”的学习和提升。

背景与动机

作者曾在西班牙巴塞罗那的Aily Labs从事AI代理开发工作,积累了丰富的经验,包括早期构建内部Web搜索代理、探索LLM知识图谱、以及对DeepSeek R1、Ai2的Olmo 3和Meta的Llama 3等开源LLM的深入研究。然而,作者意识到,过度依赖AI编码工具可能会阻碍对代码库的理解和学习,因此选择参加Recurse Center (RC) 编程退修,专注于“手写代码”,以提升编程技能和对计算机底层原理的理解。

Recurse Center (RC) 项目目标

作者在RC的三个主要目标是:

  1. 从零开始训练LLM: 包括预训练和后训练,尽可能自行编写Transformer模型。
  2. 提升Python手写代码能力: 减少对文档和LLM的依赖,培养对Python项目的直觉。
  3. 深入理解计算机: 构建对计算机多层抽象结构的更清晰的理解。

学习进展

作者目前已经取得了显著进展:

  • 完成了斯坦福大学CS336课程的第一项作业: 成功编写了优化后的tokenizer和GPT-2风格的架构,并在Tiny Stories数据集和OpenWebText数据集上进行了测试。
  • 通过Pair Programming 学习: 与经验丰富的程序员进行结对编程,学习他们的编码技巧和解决问题的思路,例如快速在终端测试代码片段。
  • 探索计算机底层原理: 作者通过多种方式进行探索,包括:
    • 使用BASIC在Apple IIe上编写FizzBuzz程序,感受早期计算机的运行方式。
    • 参与CTF Fridays,通过Unix和计算机安全相关的挑战提升终端技能。
    • 在Vim中手动编码单层感知器,熟悉GPU配置和文件编辑。
    • 参加Clojure工作坊,学习函数式编程。
    • 参与每周的技术演讲,了解各种技术主题。

总结

作者认为,在AI辅助编程时代,深入理解计算机底层原理和提升手写代码能力至关重要。Recurse Center为作者提供了理想的学习环境,帮助他专注于编程本身,并在实践中不断提升技能。虽然时间有限,但作者对未来的学习和项目开发充满信心。

Show HN: PanicLock – Close your MacBook lid disable TouchID –> password unlock

PanicLock 简介与功能总结 (Summary of PanicLock)

PanicLock 是一款 macOS 菜单栏实用程序,旨在提供一种快速、便捷的方式来禁用 Touch ID 并锁定屏幕。它填补了 macOS 在此方面的空白,即缺乏内置的快速禁用 Touch ID 的方法。

核心功能:

  • 一键恐慌锁定 (One-click panic lock): 通过点击菜单栏图标或按下自定义的热键,立即锁定屏幕并禁用 Touch ID。
  • 合上盖自动锁定 (Lock on Close): 可选功能,当您关闭笔记本电脑盖时,自动禁用 Touch ID 并锁定屏幕。
  • 临时禁用 Touch ID (Temporarily disables Touch ID): 强制使用密码进行解锁,增强安全性。
  • 自动恢复 (Auto-restore): 解锁后,自动恢复 Touch ID 的原始设置。
  • 自定义快捷键 (Keyboard shortcut): 允许用户设置全局热键 (例如 ⌃⌥⌘L) 来触发锁定。
  • 开机自启 (Launch at login): 登录时自动启动。

安装方式:

  • Homebrew: 使用 brew install paniclock/tap/paniclock 命令安装。
  • 手动下载:GitHub 发布页面 下载最新 DMG 文件。

系统要求:

  • macOS 14.0 (Sonoma) 或更高版本
  • 带有 Touch ID 的 Mac

工作原理:

PanicLock 使用一个特权助手 (Privileged Helper) 通过 SMJobBless 修改 Touch ID 的超时设置:

  1. 读取当前的超时时间。
  2. 将超时时间设置为 1 秒。
  3. 通过 pmset displaysleepnow 命令锁定屏幕。
  4. 大约 2 秒后恢复原始超时时间。

安全性:

  • 最小权限 (Minimal privileges): 助手仅运行 3 个硬编码命令 (bioutil, pmset)。
  • 代码签名 XPC (Code-signed XPC): 助手验证连接应用的 Bundle ID、团队 ID 和证书。
  • 无网络活动 (No network activity): 应用完全离线,没有遥测或分析。
  • 不收集数据 (No data collection): 仅存储偏好设置(图标样式、键盘快捷键)。
  • 开源 (Open source): 代码完全公开,可供审计。

其他说明:

  • PanicLock 仅禁用 Touch ID。如果启用了其他解锁方法(例如 Apple Watch 解锁、安全密钥),Mac 仍然可以使用这些方法解锁。
  • 该项目采用 MIT 许可证。
  • 欢迎贡献代码。

发布流程:

PanicLock 使用脚本自动化构建、签名、Notarization 和打包流程。

Amiga Graphics

Commodore Amiga 图像资源网站总结 (Commodore Amiga Image Resource Website Summary)

该网站是一个专门展示和存档为 Commodore Amiga 家庭电脑制作或用于 Commodore Amiga 的图形作品的资源库。网站强调了 Amiga 在 1985 年推出时具有当时无与伦比的图形能力,这得益于其复杂的自定义芯片集合,使其能够实现其他个人电脑难以实现的功能。

主要内容和结构:

  • 首页: 展示了各种 Amiga 相关的图像,包括人物(如 Admiral Kirk, Caesar, Mark King, McCoy 等)、摩托车(Harley Davidson, Yamaha Fazer)、以及其他图像素材。
  • 导航栏: 提供指向以下部分的链接:
    • Applications (应用程序): 展示使用 Amiga 制作的应用程序图像。
    • Artists (艺术家): 展示 Amiga 艺术家及其作品。
    • Games (游戏): 展示 Amiga 游戏相关的图像。
    • Logos (标志): 展示 Amiga 相关的标志。
    • Publications (出版物): 展示 Amiga 相关的出版物图像。
    • Sceners (场景师): 展示 Amiga 场景师的作品。
    • Specials (特辑): 展示 Amiga 特别的图像和资源。
  • Articles (文章): 包含一系列文章,主题包括:
    • Comparison (比较)
    • Cyber Assault 556
    • Display Technology (显示技术)
    • Extra Half Bright
    • Game Companies (游戏公司)
    • Screen modes (屏幕模式)
  • Updates (更新): 定期更新的页面,展示新添加的图像和相关信息。

更新内容 (Recent Updates):

网站定期更新,添加新的图像和信息。最近的更新包括:

  • 2025-05-31: 添加了来自 1988 年 7 月色彩循环竞赛的 Amiga 杂志图像。为了优化动画效果,色彩循环或动画图像已转换为 MP4 格式,取代了动画 WEBP 文件。
  • 2024-11-18: 添加了 Island Graphics 在 Amiga 早期创作的一系列图像。
  • 2023-10-15: 添加了 Facet(一位活跃的场景师)的精美图像。更新了场景师的图像排序,按新旧顺序排列。
  • 2023-09-09: 添加了 Robert J. Spirko 创作的早期高分辨率图像,许多图像都刊登在 1987 年的德国 Amiga 年鉴中。
  • 2023-08-27: 添加了大量在各种杂志中刊登的艺术比赛作品,主要来自德国 Amiga 杂志。网站说明,由于杂志很少在 80 年代分发提交作品,因此寻找原始文件比较困难。90 年代的情况有所改善,但此后许多提交作品由 3D 渲染和照片拼贴组成,而不是手工制作的像素艺术。

总而言之,该网站是一个宝贵的资源,用于保存和展示 Commodore Amiga 的图形艺术遗产。

Hyperscalers have already outspent most famous US megaprojects

总结:关于x.com隐私扩展问题

这段内容表明在使用x.com(推特)时可能遇到问题。

主要要点:

  • 问题: 用户在使用x.com时遇到了问题。
  • 原因: 某些与隐私相关的浏览器扩展程序可能导致这些问题。
  • 解决方案: 用户应禁用这些隐私扩展程序后再次尝试。

总结: 如果在使用x.com时遇到问题,请检查并禁用可能导致问题的隐私扩展程序。

Category Theory Illustrated – Orders

订单理论总结 (Order Theory Summary)

本文探讨了订单理论,从日常经验到数学定义,并将其与编程和类别理论联系起来。

核心概念:

  • 订单 (Order): 一组元素以及元素之间的二元关系,满足特定规律。
  • 线性订单 (Linear Order): 每两个元素之间存在明确的先后关系。例如,颜色按波长排序。
  • 偏序 (Partial Order): 元素之间可能没有明确的先后关系,允许元素之间不可比较的情况。
  • 预序 (Preorder): 只有反身性和传递性,没有反对称性。允许元素之间存在不明确的先后关系。

订单的数学定义:

订单由两部分组成:

  1. 元素集合
  2. 二元关系 (通常用箭头表示)

线性订单的四条规律:

  • 反身性 (Reflexivity): 每个元素大于或等于自身 ($a ≤ a$)。
  • 传递性 (Transitivity): 如果 $a ≤ b$ 且 $b ≤ c$,则 $a ≤ c$。
  • 反对称性 (Antisymmetry): 如果 $x ≤ y$ 且 $y ≤ x$,则 $x = y$。
  • 完备性 (Totality): 任意两个元素之间都存在大小关系 ($a ≤ b$ 或 $b ≤ a$)。

编程中的订单:

在编程中,订单通过一个函数定义,该函数接受两个对象并返回一个布尔值,指示哪个对象“更大”(或更小)。

偏序和线性序的区别:

偏序不要求完备性,允许元素之间不可比较的情况。线性序必须是完备的。

重要的偏序例子:

  • 自然数的“大于等于”关系: 构成线性序。
  • 除数关系: 如果 a 能整除 b,则 a 在偏序中早于 b。
  • 集合包含关系: 如果 A 是 B 的子集,则 A 在偏序中早于 B。

具有特殊性质的偏序:

  • 格 (Lattice): 所有元素都存在上确界 (join) 和下确界 (meet)。
  • 分配格 (Distributive Lattice): 满足分配律 ($x ∨ (y ∧ z) = (x ∨ y) ∧ (x ∨ z)$)。

订单与类别理论:

  • 预序是类别: 预序满足类别的定义,其中箭头数量最多为 1。
  • 线性序和偏序都是类别。
  • coproduct (陪积): 类别中的coproduct对应于预序中的join操作。
  • thin category (瘦类别): 预序在类别理论中被认为是瘦类别。

任务:

  • 任务 1: 回顾之前讨论的关系,思考与订单关系的区别。
  • 任务 2: 思考常见的订单,判断它们是偏序还是总序。
  • 任务 3: 哪种类别理论的概念与join操作相似?
  • 任务 4: 证明所有有限格都是有界格。
  • 任务 6: 证明在预序中,所有图都可交换。

总而言之,订单理论提供了对有序关系的严谨框架,并与编程和类别理论等多个领域建立了联系。理解订单理论有助于深入理解数学结构和计算机科学中的排序和组织概念。

A simplified model of Fil-C

Fil-C 简介与简化模型总结 (Fil-C Introduction and Simplified Model Summary)

Fil-C 是一个旨在实现 C/C++ 内存安全的项目。它通过将 C/C++ 代码转换成更安全的等效代码来实现这一目标。以下是对其简化模型的总结:

核心思想:

Fil-C 的核心在于在每个指针变量旁边添加一个 AllocationRecord 结构体,用于记录指针指向的内存块的分配信息,并进行边界检查。

主要转换过程:

  1. AllocationRecord 结构体: AllocationRecord 结构体包含三个字段: visible_bytes (指向实际数据的内存块), invisible_bytes (用于存储指针的数组), 和 length (内存块的长度)。

  2. 局部变量转换: 每一个指针类型的局部变量都会增加一个对应的 AllocationRecord* 变量,例如:

    // 原代码
    void f() {
        T1* p1;
        T2* p2;
        uint64_t x;
    }
    
    // Fil-C 转换后
    void f() {
        T1* p1;
        AllocationRecord* p1ar = NULL;
        T2* p2;
        AllocationRecord* p2ar = NULL;
        uint64_t x;
    }
    
  3. 指针操作转换: 对指针的操作(赋值、加减)都会同步更新对应的 AllocationRecord*

  4. 标准库函数替换: Fil-C 替换了部分标准库函数 (如 mallocfree) 为其自身的实现 (filc_mallocfilc_free)。

  5. filc_malloc 实现: filc_malloc 函数会进行三次分配:一个用于 AllocationRecord,一个用于 visible_bytes,以及一个用于 invisible_bytes

  6. 边界检查: 当指针被解引用时,Fil-C 会使用 AllocationRecord* 进行边界检查,确保访问的内存地址在有效范围内。

  7. invisible_bytes 的作用: 当指针存在于堆中时, invisible_bytes 用于存储指针的 AllocationRecord*invisible_bytes 数组中的元素类型是 AllocationRecord*,且索引 i 必须是 sizeof(AllocationRecord*) 的倍数。

  8. filc_free 实现: filc_free 函数释放 visible_bytesinvisible_bytes,但不释放 AllocationRecord 对象本身。

  9. 垃圾回收 (GC): 为了避免内存泄漏,Fil-C 引入了垃圾回收机制。GC 跟踪 AllocationRecord 对象,并回收不可达的对象。GC 还执行了以下操作:

    • 释放不可达的 AllocationRecord 时,调用 filc_free
    • 将长度为 0 的 AllocationRecord 指向一个唯一的、长度为 0 的 AllocationRecord
  10. 地址取值: 如果编译器发现对局部变量的地址被取值,并且无法证明该地址不会超出局部变量的生命周期,则 Fil-C 会将该局部变量提升到堆上进行分配,避免使用后访问未初始化的数据。

  11. memmove 的特殊处理: Fil-C 的 memmove 函数对内存块中的指针进行操作时,会检查指针是否完全位于内存块内,并进行相应的 invisible_bytes 操作。

总结:

Fil-C 通过在指针旁边添加 AllocationRecord,并进行边界检查和垃圾回收,实现了对 C/C++ 的内存安全加固。这种简化模型虽然性能开销较大,但为理解 Fil-C 的核心思想提供了方便的入口。

潜在的应用场景:

  • 安全地运行现有的 C/C++ 代码,作为临时措施。
  • 作为内存错误检测工具,类似于 ASan。
  • 在编译时安全地评估代码。
  • 作为指针来源的实际例子。
Even "cat readme.txt" is not safe

iTerm2 的安全漏洞:通过 cat 命令执行代码

本文探讨了 iTerm2 终端模拟器的一个安全漏洞,该漏洞允许攻击者通过 cat 命令在本地执行代码。该漏洞并非源于 cat 命令本身,而是源于 iTerm2 的 SSH 集成功能。

漏洞原理:

iTerm2 为了提供更丰富的远程会话体验,实现了 SSH 集成功能。该功能通过在远程机器上启动一个名为 "conductor" 的小型辅助脚本来实现。

  1. iTerm2 通过 it2ssh 启动 SSH 集成。
  2. iTerm2 将 conductor 脚本发送到远程机器。
  3. conductor 脚本成为 iTerm2 的协议对等方,通过正常的终端 I/O 与 iTerm2 交换终端转义序列来协调操作,例如发现登录 shell、检查 Python 版本、更改目录、上传文件和运行命令。
  4. iTerm2 使用 PTY(伪终端)与 conductor 脚本通信。PTY 模拟硬件终端,位于终端模拟器和前台进程之间。

漏洞的关键在于,iTerm2 接受来自终端输出的 SSH conductor 协议,而 不验证其真实性。攻击者可以伪造终端输出,使其看起来像是来自合法的 conductor 会话。

攻击流程:

攻击者可以创建一个包含恶意内容的文本文件(例如 readme.txt),其中包含:

  1. 伪造的 DCS 2000p 钩子(hook),用于欺骗 iTerm2 认为它正在与一个合法的 conductor 会话通信。
  2. 一系列伪造的 OSC 135 消息,用于模拟 conductor 的响应。

当受害者运行 cat readme.txt 时,iTerm2 会渲染该文件,并开始执行正常的 conductor 工作流。即使 pythonversion 命令失败,iTerm2 也会继续执行,并最终构建一个 run(...) 命令。

攻击者精心构造 sshargs 参数,使得 run ... 命令的 base64 编码后的最后 128 字节块变成 ace/c+aliFIo。这个字符串被设计成:

  • 有效的 conductor 编码路径输出。
  • 一个有效的相对路径,指向本地可执行文件 ace/c+aliFIo

由于 iTerm2 将 base64 编码的命令写入 PTY,而此时不存在真实的 SSH conductor,因此本地 shell 会将这些命令作为普通输入接收。 ace/c+aliFIo 最终被执行,从而实现代码执行。

漏洞修复:

  • 研究人员于 3 月 30 日向 iTerm2 报告了该漏洞。
  • 3 月 31 日,iTerm2 发布了修复补丁 (commit `a9e745993c2e2cbb30b884a16617cd5495899f86)。
  • 当时,该修复尚未发布到稳定版本中。

总结:

该漏洞利用了 iTerm2 SSH 集成功能中的信任缺陷,允许攻击者通过伪造终端输出,利用 cat 命令在本地执行恶意代码。 攻击者需要控制 sshargs 参数,并确保 ace/c+aliFIo 在本地存在且可执行。 重要的是,漏洞并非 cat 命令本身的问题,而是 iTerm2 如何处理来自终端输出的协议的问题。