【安全圈】补丁打完才安全?WordPress 更新窗口正被抢跑

· 2026-11-07 19:00 · 8 阅读

安全圈 2026-11-07 19:00 江苏

关键词

补丁

核心事实:CVE-2026-119977,CVSS 8.1,影响 WordPress 4.7 至 7.1.3。漏洞不在某个功能里,在升级动作本身——完整包更新会把新版本解压到 wp-content/upgrade 下的临时目录,里面带着安装器,Web 服务器通常能直接访问。无账号攻击者只要猜中目录名,在文件被删前跑通安装器,就能在服务器上执行代码。CISA 已把它列入 KEV 目录。

🔍 问题出在解压路径可预测

用完整包升级时,WordPress 会把新版本解开,放进 wp-content/upgrade 里一个临时目录。这份副本包含 WordPress 安装器,而且它就躺在 Web 根目录下。

  • 目录名可猜

    :在 5.9 及以上的站点,负责解压的旧代码会用下载文件名来命名这个目录,猜到文件名就等于猜到路径

  • 4.4 到 5.8 稍好

    :旧代码会给目录名加随机字符,除非站点自己通过报错信息等方式泄露,否则猜不到

  • 一枚账号都不用

    :整个链条不需要站点上的任何账户

⚡ 最讽刺的一段:装补丁的这次更新,跑的还是旧代码

补丁本身没问题——7.1.4 会给临时目录随机命名,也不再让临时副本里的 wp-config.php 覆盖正式文件。

但执行这次更新的,是站上本来就有的旧代码。它解包时仍按老规则命名目录。也就是说,升级到 7.1.4 的那一次,是目录名最后一次可被预测的机会。

攻击者卡进这个窗口,能做的不只是读文件。Picus Security 研究员 Umut Bayram 的复现路径是:用安装器给临时副本配一个自己的数据库,登进这套临时 WordPress,以 Web 服务器权限执行 PHP,再借它读写正式站点里的文件。等临时副本被删掉,痕迹也跟着没了。

开了后台自动更新的站点,修复会走同一套更新器、同一批步骤,同样会经历这个窗口。

🎯 数据:防火墙规则上线 9 分钟后就有攻击

  • 18,500+

    :Wordfence 在漏洞公开后的前 21 小时,记录到针对分阶段 setup-config.php 安装器路径的请求量

  • 12,632 次

    :最近 24 小时内被拦截的利用尝试

  • 14.5 小时

    :两个最活跃的攻击来源对少量站点反复探测的时长。Wordfence 认为这不是随便扫,是在蹲站点执行更新的那一刻

  • 数秒

    :实验室环境下窗口的实际持续时间。窗口短,但可反复蹲

  • 评分分歧

    :Wordfence 给出的 CVSS 是 8.1,WordPress 官方通告把它定为低危

  • PoC 已扩散

    :本周起公开 GitHub 仓库里出现自称可利用该漏洞的代码,其中一份还声称对使用可预测目录的完整包更新同样有效。是否真的能打通,尚无结论

🛡️ 更新之前,先把那个目录从 Web 上摘掉

最省事的做法是直接禁止 Web 访问 wp-content/upgrade。WordPress 是直接在这个目录上操作磁盘文件,封掉 HTTP 访问不会影响更新功能。

  • Nginx

    :加 location ^~ /wp-content/upgrade/ { deny all; }

  • Apache

    :在该目录的 <Directory> 段里写 Require all denied

  • 只能改 .htaccess

    :在 WordPress 根目录的 .htaccess 里,加在 WordPress 重写规则之前——RedirectMatch 403 ^/wp-content/upgrade/

  • 别放错位置

    :不要把 .htaccess 放进 wp-content/upgrade 里面。旧更新器在解包前会清空该目录,那时文件已经没了

  • 验证

    :请求 /wp-content/upgrade/ 应当返回 403

✅ 另一条路:手动升级,绕开 Web 根目录

  1. 备份站点文件与数据库

  2. 在 Web 服务器不提供服务的目录里解压新版本,这样安装器根本没有可访问地址

  3. 把核心文件覆盖到位,不要动 wp-config.php 和 wp-content

  4. 执行数据库升级

注意,WP-CLI 的 wp core update 不能替代这一步——它调的是同一套更新器,解包到同一个目录。

📦 还在 4.6 及更早的站点

4.6 及更早版本已经不再收到安全更新,没有补丁可打。Bayram 说这个缺陷的源头能追到 2008 年的 WordPress 2.7,这些站点只能迁移到受支持的版本。

暂时升不上去、又停在受影响版本的站点,去日志里翻异常请求:指向临时目录下 PHP 文件的访问、带 setup-config.php 的路径、以及紧跟在更新动作之后的可疑 POST。

  END  

阅读推荐

【安全圈】Chainalysis 被打穿:全体用户凭据泄露

【安全圈】隐形后门寄生 CWP 面板,访问日志全程沉默

【安全圈】Barracuda 网关双漏洞链:免登录直取 root

【安全圈】白宫专网被卖做代理?总统办公室设备疑遭植入后门

安全圈

←扫码关注我们

网罗圈内热点 专注网络安全

实时资讯一手掌握!

好看你就分享 有用就点个赞

支持「安全圈」就点个三连吧!

跳转微信打开

本文转载自微信公众号「安全圈」,查看原文。版权归原作者所有,如有侵权请联系删除。