Officer's Notes
Officer's Notes|2026年11月08日 03:24
一个酝酿了 46 年的 OpenSSH 漏洞! 1980 年 UNIX 在系统账户的密码字段中放入了星号 (*)。其思路很简单:它不是真正的哈希值,因此无法被暴力破解,用户也无法使用密码登录。 2012 年 musl libc 的开发者认为,crypt() 函数在失败时返回 NULL 值很危险——程序经常忘记检查 NULL 值,导致程序崩溃并出现段错误。因此,他们改为返回一个错误字符串。 猜猜是哪个? 还是那个星号:*。 三周后,他们添加了长度限制:超过 256 字节的密码会占用大量 CPU 资源。任何更长的密码都会被拒绝。由于这是一个错误,crypt() 函数会返回 *。 2016 年 OpenSSH 修复了一个时序攻击漏洞 (CVE-2016-6210)。如果用户不存在,服务器仍然会使用伪造/借用的盐值对密码进行哈希处理,这样攻击者就无法通过响应时间来判断有效的用户名。 2022 年 Alpine Linux 将 /etc/shadow 文件中的 root 用户密码从 ! 改为 *,以确保 SSH 密钥在云镜像上正常工作。 ……然后循环就完成了! 你以 root 用户身份(其 shadow 条目为 *)通过 SSH 连接。 你输入了长度超过 256 个字符的密码(例如,300 个 A)。 crypt() 函数达到长度限制 → 返回 * → OpenSSH 将其与数据库中的值进行比较 → 数据库中的值也是 * → 你以 root 用户身份登录。 这条攻击链耗时 46 年(!!!)才完成。 每一次单独的更改都看似合理。但它们共同构成了一个完美的 * == * 身份验证绕过漏洞(CVE-2026-123158,绰号 *sshole)。 OpenSSH 10.6p2 和 Alpine 软件包中已修复。
+4
曾提及
分享至:

脈絡

熱門快訊

APP下載

X

Telegram

Facebook

Reddit

複製鏈接

熱門閱讀