11月9日漏洞:6个,2个反序列化、2个上传、1个信息泄露、1个认证绕过
原创
niuko
niuko
Ncko
2026年11月10日 09:00
安徽
去阅读
11 月 9 日,NVD 里 published 落在这个窗口的记录 294 条。按每条记录的最高基础分算,9.0 以上的 23 条。
11 月 9 日简报:NVD 当天写入 294 条,23 条评分 9.0 以上,按反序列化、未授权、认证绕过、文件上传、信息泄露筛出 6 条。rConfig 的 Horizon 队列跑在没认证的 Redis 上,谁都能往里塞一个序列化 job,CallQueuedHandler 照单全收,最后以队列 worker 的身份执行 artisan 命令,顺手读走设备凭据和 API token;WidzialniCMS 两个上传端点把权限检查交给客户端参数,currentpath 和 uploadPath 又没过滤,未登录能往任意目录写文件;WP Duplicate 的认证值没验住,路径和类型都不看,WPScan 标注已在野利用且无修复版本;EASY-JS-WPAPI 把管理员凭据存在插件里,读它的接口不查身份;Airflow 的 set\_xcom 少了 reserved-key 检查,打过 3.3.1 补丁的仍然中招;Neo4j 的 jwt where 过滤器写多个条件时只算第一个,角色要求被静默丢掉。
三条不用账号:WP Duplicate、WidzialniCMS、EASY-JS-WPAPI。rConfig 也不用,前提是队列的 Redis 端口能从外面摸到。Airflow 要一个能建 Dag 的账号,Neo4j 要一个本身有效的 JWT。
六条分开看是六个产品,合起来两种毛病。一种是检查的对象在攻击者手里:WidzialniCMS 的权限位、WP Duplicate 的认证值、Neo4j 的过滤器条件,都是从请求里读的。另一种是检查漏了一条路:Airflow 补了查看那条没补写入,rConfig 的队列没有边界,EASY-JS-WPAPI 存了凭据却没给读的接口挂鉴权。
PART 01
六条,先看门槛
| 时间 | 条目 | 后果 |
| 15:17 | WP Duplicate ≤ 1.1.11(CVE-2026-123751) | 未授权写文件,已在野利用,9.8 |
| 15:17 | EASY-JS-WPAPI ≤ 2.0(CVE-2026-115213) | 未授权读管理员凭据,9.8 |
| 18:17 | Apache Airflow 3.0.0–3.3.x(CVE-2026-111421) | 补丁不全,写入路径仍可反序列化,8.8 |
| 18:17 | @neo4j/graphql 7.0.0–7.6.6(CVE-2026-92683) | JWT 过滤器绕过,越权读写,8.6 |
| 21:17 | rConfig Core 8.0.0–8.2.18(CVE-2026-124079) | 未授权 RCE,9.8 |
| 21:17 | WidzialniCMS < 2.5(CVE-2026-110468、110469) | 未授权上传 RCE,10.0 |
时间一列是 NVD 记录的 published 换算到北京时间。
按类别分:
| 类别 | 条数 | 条目 |
| 反序列化 | 2 | rConfig、Apache Airflow |
| 文件上传 | 2 | WP Duplicate、WidzialniCMS |
| 信息泄露 | 1 | EASY-JS-WPAPI |
| 认证绕过 | 1 | @neo4j/graphql |
机制示意:六条各自的检查点与绕过位置。依据各家公告重绘,不是抓包截图。
PART 02
队列没人看着,job 谁都能塞
21:17。rConfig Core 8.0.0 到 8.2.18,Pro 8.4.1 之前。
rConfig 管网络设备的配置备份,批量任务交给 Laravel Horizon 跑。Horizon 的队列放在 Redis 里,受影响的部署中这个 Redis 既不认证,也常常监听在 0.0.0.0。
攻击者不需要账号。连上 Redis,往 Horizon 的队列键里推一个自己拼的 job。Laravel 的 CallQueuedHandler 反序列化时不限类,payload 里写 App\Jobs\TaskDownloadRun,构造参数塞一条 artisan 命令,队列 worker 领到就执行。
这个类本身只负责跑命令,真正的放大器是 rConfig 自带的 laravel/tinker。命令里写 tinker 就能跑任意 PHP,PHP 再调 system 就是 shell。执行身份是队列 worker 的用户。
落地之后:往 storage/app/public 写一个 webshell,这个目录本来就在 web 根下;读 .env 里的数据库口令;读 rConfig 里存的设备凭据和 API token。一个管网络设备的系统,这些凭据等于设备本身。
Redis 出不了内网也不要紧。公告补了一句:已认证用户可以把一个 device target 指向 rConfig 自己的 127.0.0.1,让应用替自己把 payload 投进队列。这条路要账号,但绕过了网络边界。
CVSS 3.1 9.8,CVSS 4.0 9.3,CWE-502。
公开时间:VulnCheck 11 月 9 日发布公告,NVD 在北京时间 11 月 9 日 21:17 写入记录。
修复版本 Core 8.2.19、Pro 8.4.1。升不了就先给 Redis 设密码、只监听内网,6379 不要出现在公网资产里,Horizon 的 dashboard 也别对外开放。
复现情况:公告写了 gadget 类名、执行效果和两条投递路径,没有放利用代码。
没给模板。投递走 Redis 的 RESP 协议,或者已认证的应用接口,nuclei 的 HTTP 模板够不着。能写的最多是「6379 未授权可 PING」,那不是这条 CVE,扔进批量扫描只会把一堆没设密码的 Redis 标红。
PART 03
权限位是请求里带的
21:17。WidzialniCMS 2.5 之前的所有版本。
这是波兰 Fundacja Widzialni 的 CMS。CERT Polska 一天出了两个上传 CVE,端点不同,毛病一样。
/panel/controllers/save\_photo.php 收照片,落盘路径来自 currentpath;/panel/upload.php 收文件,落盘路径来自 uploadPath。两个参数都不过滤,可以带 ../。更关键的是权限那道检查,它读请求里的参数,客户端说什么就信什么。
结果是未登录的人能往服务器任意位置写任意类型的文件。写进 web 根,就是 webshell。
CVSS 4.0 10.0,CWE-434,两个 CVE 同分。
公开时间:CERT Polska 11 月 9 日发布公告,NVD 在同一天 21:17 写入记录。
修复版本 2.5。查 /panel/ 下有没有新出现的 php 文件,尤其是 upload 和 photo 这两个目录。
复现情况:公告给了端点、参数名和作用,没给请求体结构,也没放 PoC。
没给模板。公告只说 currentpath 和 uploadPath 没过滤,文件字段叫什么、权限参数叫什么、成功返回什么,一个字都没写。照猜写一个 multipart,命中了也证明不了是这条。
PART 04
认证值没验住,路径也没看
15:17。WP Duplicate 1.1.11 及以下。
插件目录名是 local-sync,功能是把站点内容同步到另一台 WordPress,做迁移用。上传接口靠请求里带的一个认证值判断来者身份,这个值没验住,路径和文件类型也不校验。
未登录的人发一个请求,文件就落到服务器上,位置和扩展名自己定。写个 php 进 web 根,接着就是 RCE。WPScan 在记录里写了两句话:正在被在野利用,没有已知修复。
CVSS 3.1 9.8,CWE-434。
公开时间:WPScan 11 月 6 日公开,NVD 在北京时间 11 月 9 日 15:17 写入记录。
修复版本:没有。WordPress 插件目录里这个插件的版本还停在 1.1.11。能做的只有停用、删除,然后查站点上有没有陌生的 php 文件,以及 wp-content/uploads 里最近被写入的可执行文件。
复现情况:WPScan 的 PoC 要等修复后才展示,目前没公开。
给了一个模板,只比版本,不发上传请求。PoC 没公开,端点、认证值、字段名都不知道,照猜发 multipart 会往别人的服务器写垃圾文件。要判断一台站有没有这条,看 readme 里的 Stable tag 就够。
id: CVE-2026-123751
info:
name: WP Duplicate <= 1.1.11 - 未授权任意文件上传(版本指纹)
author: Ncko
severity: critical
description: |
WP Duplicate(插件目录名 local-sync)1.1.11 及以下,上传接口靠请求里
带的一个认证值判断来者身份,这个值没验住;上传路径和文件类型也不校验。
未登录就能把任意文件写到服务器的任意位置,写进 web 根就是 RCE。
WPScan 标注这条正在被在野利用,且没有已知修复。
模板只比 readme.txt 里的 Stable tag,不发送任何上传请求。
reference:
- https://wpscan.com/vulnerability/3a3556f0-fc36-4f68-b826-406a7b4c3f9e/
- https://nvd.nist.gov/vuln/detail/CVE-2026-123751
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2026-123751
cwe-id: CWE-434
metadata:
max-request: 1
verified: false
tags: cve,cve2026,wordpress,wp-plugin,local-sync,upload
http:
- method: GET
path:
- \"{{BaseURL}}/wp-content/plugins/local-sync/readme.txt\"
matchers-condition: and
matchers:
- type: word
words:
- \"WP Duplicate\"
part: body
- type: regex
regex:
- \"(?i)Stable tag:\\s\*1\\.(0|1)\\.[0-9]+\"
part: body
PART 05
管理员凭据存在插件里,读它不用登录
15:17。EASY-JS-WPAPI Client HANDLE for the WordPress REST-API 2.0 及以下。
插件替站点保存调用 WP REST API 用的管理员凭据。存下来这件事本身不错,错在读取这条凭据的路径没有身份校验,插件自己的认证判断也不对。
未登录的人拿到这份凭据,等于拿到管理员账号。登录、装插件、改主题,再往上摸服务器,后面都是常规动作。
CVSS 3.1 9.8,CWE-287。
公开时间:来源是 WPScan,NVD 在北京时间 11 月 9 日 15:17 写入记录。
修复版本:没有。这个插件在 WordPress 插件目录里已经查不到,API 返回 404。
复现情况:PoC 未公开,WPScan 的条目里也没写端点和参数。
没给模板。插件下架了,readme 指纹打不出来;读凭据的接口名和字段也没公开。现在能做的是全站搜这个插件的目录,找到就删,然后轮换它存过的管理员密码和应用密码。
PART 06
补丁补了一条路,还有一条
18:17。Apache Airflow 3.0.0 到 3.4.0 之前。
Airflow 的 Task Execution API 允许任务写 XCom。其他写 XCom 的路径都有一道 reserved-key 检查,set\_xcom 这条没有。
Dag 作者的任务可以借这道缺口写一条 XCom。之后有人在界面上或通过 API 查看它,并且目标开着反序列化,API server 就会用 Dag 作者给的参数去实例化 airflow.\* 命名空间下的类。参数能控,能实例化的类也多,离代码执行不远。
这条是 CVE-2026-59242 的不完整修复。当时升到 3.3.1 的人以为补上了,其实只补了查看那条路,写入这条路还开着。
CVSS 3.1 8.8,CWE-502。Apache 自己在公告里标的是 moderate。
公开时间:Apache 11 月 9 日发公告,NVD 在同一天 18:17 写入记录。
修复版本 3.4.0。升不了就把 XCom 反序列化关掉,查看时按原始值返回。
复现情况:两个 PR 里有代码差异,公告没给 payload。
没给模板。要先用一个有 Dag 权限的账号写 XCom,再等另一个用户去读,还要目标开着反序列化。三步都依赖目标配置,单请求模板判断不了。
PART 07
过滤器写了三个条件,只算一个
18:17。@neo4j/graphql 7.0.0 到 7.6.6。
这是 Neo4j 官方那套 GraphQL 库的 Node 包。@authentication 指令可以写 jwt where 过滤器,用 JWT 里的声明限制谁能读什么。
过滤器用通用操作符语法写多个条件时,比如 iss 对得上、roles 里还得有 admin,求值只做第一个,后面的静默丢掉。手里有一个本来有效的 JWT,iss 满足就够了,角色那一条根本不算。
影响是被 @authentication 保护的数据和操作,越权读写都在里面。攻击者要有一个有效 JWT,门槛比匿名高,拿到之后就绕过整条授权规则。
CVSS 4.0 8.6,CWE-863。
公开时间:GitHub 安全公告发布,NVD 在北京时间 11 月 9 日 18:17 写入记录。
修复版本 7.6.7。临时改法有两种:写成显式的 AND 数组,或者换成行内操作符语法,比如 roles\_INCLUDES: \"admin\",这两种写法会把所有条件都算上。
复现情况:公告给了过滤器写法和绕过条件,没给完整请求。
没给模板。哪个字段是角色条件、JWT 怎么签,都是目标自己的事,模板猜不出来。要验就手工发一个带多条件 jwt where 的查询,用只满足第一个条件的 token,看返回里有没有本该被挡住的节点。
PART 08
怎么查,怎么修
| 组件 | 修复版本 | 先做什么 |
| WP Duplicate | 无 | 停用删除,查 uploads 里新写的 php |
| EASY-JS-WPAPI | 无 | 删除插件,轮换管理员密码 |
| WidzialniCMS | 2.5 | 升级,查 panel 目录新增文件 |
| rConfig | Core 8.2.19 / Pro 8.4.1 | 升级,给 Redis 加密码 |
| Apache Airflow | 3.4.0 | 升级,关掉 XCom 反序列化 |
| @neo4j/graphql | 7.6.7 | 升级,改多条件过滤器写法 |
今天先做三件事:两个 WordPress 插件没得升,直接删,删完轮换凭据;rConfig 升到 8.2.19,顺便确认 6379 不在公网;Airflow 和 @neo4j/graphql 升版本,前者顺手关掉 XCom 反序列化。
日志侧看这几处:
— WordPress:查 uploads 目录里新增的可执行文件,以及插件目录的访问记录
— WidzialniCMS:查 /panel/upload.php 与 save\_photo.php 的未登录请求,参数里带 ../
— rConfig:查 Redis 的非本机连接、队列里陌生的 job 名、静态目录新增的 php
— Airflow:查 set\_xcom 之后紧跟的 XCom 读取
— Neo4j:查带多条件 jwt where 的 GraphQL 请求
PART 09
资料与说明
六条里给了一个模板。WP Duplicate 的插件目录名和当前版本能从 WordPress 插件目录对上,readme 里的 Stable tag 是公开的,比版本不会打扰目标。其余五条各自写了原因:rConfig 走 Redis 协议;WidzialniCMS 的请求体结构没公开;EASY-JS-WPAPI 插件已下架,端点也没公开;Airflow 要两步操作加一个配置开关;Neo4j 依赖目标自己的 JWT 和 schema。
版本号、评分、修复版本和时间线来自 NVD 记录、VulnCheck 的 rConfig 公告、CERT Polska 的 WidzialniCMS 公告、WPScan 的 WP Duplicate 与 EASY-JS-WPAPI 记录、Apache Airflow 的 CVE-2026-111421 公告、@neo4j/graphql 的 GHSA-58qp-3mmm-5vh8。
同一天还有几条在名单里但没写。Chengdu Feiyuxing 的 VW2100、VEC10GP 网关有命令注入(CVE-2026-124580,10.0),利用已公开,但要先摸到设备的 Web 管理口,写进来会变成一份设备清单。IBM Concert 1.0 到 3.0.1.1 的 OS 命令注入(CVE-2026-6715,9.8)、NEC WebSAM WinShare 的两条(CVE-2026-113363、113364,9.3)也够分,都不在这五类里。
免责声明:由于传播、利用本公众号Ncko所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论