rsync 3.5.2 修复 sender 侧 CPU 耗尽:3.5.0 批次 33 个问题与升级自查
rsync 3.5.2 于 2026-11-04 发布,修复安全公告页列出的全部问题;3.5.1 及更早版本均受影响。3.5.0(2026-08-13)则是一次集中修复,共处理 33 个安全问题,其中多个只在非默认配置下可达。安全公告:。
3.5.2:CVE-2026-119741
3.5.2 限制了 CVE-2026-70453 缓解后仍残留的 sender 侧校验和计算量。
| 项目 | 内容 |
|---|---|
| CVE | CVE-2026-119741(HIGH) |
| 位置 | match.c 的 hash_search() |
| 触发方式 | 恶意 receiver 提供弱校验和,使其与连续的滚动窗口逐一碰撞,同时配上不匹配的强校验和,sender 在每个字节偏移都计算完整强校验和,且结果始终失败 |
| 影响版本 | /mnt/disk。其他 uid 创建的符号链接目标现在会被拒绝,以此关闭 chdir TOCTOU。--insecure-links` 可恢复无条件跟随。 |
proxy protocol = true 未配 proxy protocol hosts。 daemon 改为拒绝所有连接(fail-closed),并在启动时输出警告。此前该配置可能被静默接受。
rrsync 受限子目录。 support/rrsync 在受限子目录下强制 --no-D,并拒绝 --copy-unsafe-links。
3.5.2 的其他修复
- 中断的
--append与--inplace传输会把最后 256 KiB 缓冲区写两次。修复后中断的目标保持干净前缀,下一次传输可以续传或修复。 rrsync上传在目标文件已存在时的失败。- 大稀疏文件和重复块文件的匹配性能:重复校验和链耗尽搜索上限。
- 恶意 receiver 提供弱校验和、与连续滚动窗口碰撞时,限制强校验和计算量(CVE-2026-119741)。
- daemon receiver 在排队删除输出达到
--max-alloc时的栈溢出。 --files-from从 daemon 模块子目录拉取时,实际从模块根读取每个列出的文件。这可能发送、并在配合--remove-source-files时删除模块过滤器排除的同名文件。- 密码文件首行为空:解析器不再跳过空行并改用后面的密码。
- 转义写入 stdout / stderr / 日志的文件名和诊断信息中的终端控制字符。
- IPv6 对端在 daemon
hosts allow/hosts deny中的前向 DNS 主机名条目。
新选项与输出变化
--nice / --no-nice
用于调整本地和远端 rsync 进程的 CPU 与 I/O 调度优先级。daemon 客户端和 rrsync 不能提升服务端优先级;daemon 客户端只能请求 CPU nice 19、idle I/O 优先级,或两者同时。
--delay-symlinks
延迟创建新增和变更的符号链接,直到其他传输文件就位。它隐含 --no-inc-recursive,要求 protocol 29 或更高且接收端支持。不能与 --remove-source-files、--hard-links、--compare-dest、--copy-dest、--link-dest 同时使用。
人类可读输出
动态精度显示三位有效数字,二进制单位后缀追加 i。--progress 使用同一格式化器,字节数和速率分别标注 B 与 B/s。示例:46.7M、48.8Mi、782,448B、113,295B/s。
Debian 12 LTS 的 backport
DLA-4888-1(2026-11-09)面向 Debian 12 bookworm,修复版本为 3.5.0+ds1-0+deb12u1。该版本 backport 了 rsync 3.5.0 以及 3.5.1 的回归修复,而不是把每个补丁逐个塞回 3.2.7。公告提示这一变更可能造成中断,因为安全修复自带上述行为变化。
升级与自查清单
确认版本:
rsync --version
# 期望 3.5.2;Debian 12 LTS 期望 3.5.0+ds1-0+deb12u1
Debian 包状态与升级:
dpkg -l rsync | tail -n 1
apt-cache policy rsync
sudo apt-get update && sudo apt-get install --only-upgrade rsync
检查 daemon 配置中的关键项:
grep -nE '^\s*(hosts allow|hosts deny|auth users|use chroot|proxy protocol|read only)\s*=' /etc/rsyncd.conf
列出模块,逐个确认是否为公共可读/可写:
grep -nE '^\s*\[' /etc/rsyncd.conf
| 检查项 | 关注点 |
|---|---|
hosts deny | 主机名解析失败现在应 fail-closed;升级后确认原本被拒的主机仍被拒 |
auth users | 按文档的逗号分隔解析,确认没有因解析差异静默跳过 deny / read-only 规则 |
use chroot | 模块若为 no,核对 CVE-2026-53793 与 CVE-2026-70460 涉及的模块根逃逸路径 |
| 可写模块 | 审计对端可控的 --temp-dir、--partial-dir、--backup-dir,以及 --files-from 配合 --remove-source-files 的删除语义 |
proxy protocol | 设为 true 时必须配置 proxy protocol hosts,否则 daemon 拒绝所有连接 |
| 公共模块 | 3.5.2 之前,CVE-2026-119741 无需账号即可打满 CPU;无法立即升级时先限制匿名访问 |
来源
- rsync 安全公告:
- rsync NEWS:
- Help Net Security,2026-11-04:
- LWN: