【漏洞预警】Moodle 题库 Web 服务爆出SQL注入漏洞(POC已公开)CVE-2026-102578
YGnight
YGnight
night安全
2026年11月6日 09:23
四川
去阅读
一、漏洞描述
Moodle 是学校里常见的开源课程系统,题库那块存着试题、版本和历史记录,改题、组卷、考试都从这里取数。这次漏洞的产生主要是出在题库的历史页。页面要列出某道题的各个版本,必须要知道题目编号。编号从请求里带过来,字段名 entryid,跟其他参数一起放在 extraparams 里,交给 Moodle 通用的片段接口。服务端拿到这个值,转手就拼进了查题目版本的那条 SQL,没做类型处理。
| CVE 编号 | CVE-2026-102578 |
| 公告编号 | GHSA-hvr9-w78p-rcfj,厂商公告 MSA-26-0031 |
| 漏洞类型 | SQL 注入,CWE-89 |
| 影响组件 | qbank\_history 的 question\_history\_view,入口 core\_get\_fragment |
| 受影响版本 | 4.5 到 4.5.12、5.0 到 5.0.8、5.1 到 5.1.5、5.2 到 5.2.1 |
| 修复版本 | 4.5.13、5.0.9、5.1.6、5.2.2,或更新的受支持分支 |
| 触发前提 | 已登录且能调用题库片段接口。访客那条路径只在开启访客登录的站点上被脚本测到过 |
| 危害面 | 逐字节取出数据库里可读的字段,预设覆盖重置令牌、密码哈希、会话记录与试题答案。CVE 记录另写了改动与删除 |
| CVSS | CVSS 3.1 两份,5.5 由 GitHub 公告与 Red Hat 按高权限给出,8.8 由 NVD 按低权限给出 |
二、漏洞原理
入口在 Moodle 的 ajax 服务上,接口名 core\_get\_fragment,本来用来按需取页面片段。
// 片段请求参数示意,方法 core\_get\_fragment
component mod\_quiz
callback question\_data
args.view \qbank\_history\question\_history\_view
args.extraparams {\"entryid\": \"<值>\", \"returnurl\": \"/\"}
extraparams 是段 JSON,view 指定渲染用的类,entryid 指定看哪道题。question\_history\_view 接到这个数组之后,取值只有一行,往下拼查询也就几行。
// question\history\_view.php 修复前
public function \\_construct(...) {
$this->entryid = $extraparams['entryid'];
}
protected function build\_query(): void {
$entryid = \"qbe.id = $this->entryid\";
$tests = ['q.parent = 0', $entryid];
$sql .= ' WHERE ' . implode(' AND ', $tests);
}
从请求到 SQL,中间没有类型约束。字符串插值发生在 build\_query 里,拼好的 WHERE 交给 Moodle 的数据库层执行。
引号空格都进得去。
那份脚本在 entryid 里塞的是一段 UNION 查询,布尔条件成立就返回 -1,不成立就返回 0。两种结果会走成两种固定的 Moodle 报错,看返回体里的错误码就能判出这一位是真是假。
// MariaDB 与 MySQL,entryid 的取值
0 AND 1=0 UNION ALL SELECT IF((条件),-1,0) ORDER BY 1 ASC #
// 返回体里的错误码
条件成立 codingerror
条件不成立 dmlreadexception
长度先问出来,再按位置逐字节比对,一个字符串要发十倍于字节数的请求,库里的值就是这样被搬出来的。
能读到的范围由 Moodle 连库用的账号决定,跟当前登录的人在页面上能看哪些课、哪些题无关。随附说明里也提到,访客身份打不开课程页,片段接口照样把值读了回去。
补丁只动了这个文件。
// MDL-89383 ebfb102 修复后
$this->entryid = clean\_param($extraparams['entryid'] ?? 0, PARAM\_INT);
$tests = ['q.parent = 0', 'qbe.id = :entryid'];
// 放在搜索条件之后,避免同名参数把值盖掉
$this->sqlparams = array\_merge($this->sqlparams, ['entryid' => $this->entryid]);
入口先把值过成整数,拼 SQL 的地方换成命名占位符,绑定参数最后才并进去。最后这一步是防搜索条件里出现同名参数,把 entryid 盖掉。字符串插值的口子到此就没了。
题库历史页的其余逻辑没动。
三、修复建议
升到 4.5.13、5.0.9、5.1.6、5.2.2,或者更新的受支持版本。
近期值得重点关注的漏洞预警
【紧急漏洞预警】nacos爆出权限绕过漏洞,可以创建管理员账户,经过分析有点出处(已复现,exp脚本已编写)
【紧急漏洞预警】PHP爆出两个代码执行漏洞(POC已公开)CVE-2026-109618与CVE-2026-10961
【漏洞预警】Node.js Brotli解码器越界写远程代码执行漏洞(POC已公开)CVE-2026-111497
【漏洞预警】WordPress 插件爆出远程代码执行漏洞(POC已公开)CVE-2026-116512
【漏洞预警】Grafana爆出高危权限绕过漏洞(POC已公开)CVE-2026-100105
【漏洞预警】近期Signal 通话组件 RingRTC被爆出高危漏洞,编号为CVE-2026-113380
【漏洞预警】Fortinet FortiSIEM路径遍历导致RCE漏洞(POC已公开)CVE-2026-106173
【漏洞预警】linux内核漏洞(POC已公开)已有 Android/ARM64 的利用实现CVE-2026-98260
【漏洞预警】Next.js爆出RCE漏洞(POC已公开)CVE-2026-96889
【紧急漏洞预警】GitLab整数溢出导致RCE漏洞(POC已公开)
【漏洞预警】AnyDesk Linux存在堆缓冲区溢出漏洞(POC已公开)
【漏洞预警】macOS爆出路径穿越漏洞CVE-2026-84568(POC已公开)
【漏洞预警】Atlassian八款产品爆任意文件读取漏洞(附POC)
【漏洞预警】Joomla视频画廊扩展存在SQL注入漏洞(POC已公开)
【漏洞预警】Roundcube网页邮件客户端存在SQL注入漏洞(附POC)
WordPress页面模板存在文件包含漏洞(POC已公开)CVE-2026-87902
WordPress插件Forminator未认证短代码执行漏洞(poc已公开)CVE-2026-92229
WordPress插件Authorizer存在权限提升漏洞(POC已公开)CVE-2026-81294
WordPress插件MStoreAPI存在认证绕过漏洞(POC已公开)CVE-2026-13447
CakePHP爆出SQL注入漏洞(POC已公开)CVE-2026-77635
Node.js模块proxy-addr爆出严重漏洞CVE-2026-90711
Langflow爆出代码执行漏洞CVE-2026-17633 (POC已公开)
Apache CVE-2026-42536,补它只用一行,洞龄十四年
【紧急】搜狗输入法爆出远程代码执行漏洞CVE-2026-51990 ,已被在野利用
【紧急】无需登录就能获取 GitLab 的任意文件数据(附POC)
【紧急】JumpServer堡垒机被公布Access Key泄露漏洞,可以实现提权
Spring Cloud Azure公布严重漏洞 无需任何权限即可取得登录会话
【漏洞POC已公开】Linux RDS 爆出提权漏洞 一块内存放两次,root就到手了
13 行补丁,堵住Linux能拿 root 的内核洞(EXP已公开)
48 字节,换走一台 Windows 的 SYSTEM(CVE-2026-62735漏洞POC已公开)
【漏洞预警】linux删个网桥就能提权root?目前没有补丁(POC已公开)
【漏洞预警】自己注册个号,就能搬空别人的 Magento 订单和支付卡(POC已公开)
【漏洞预警】Next.js 爆出新漏洞,不用登录实现命令执行(POC已公开)
【漏洞补丁绕过预警】Redis CVE-2026-23479变种高危漏洞,EXP已公开
【漏洞补丁绕过】超 30 万 WordPress 站点受影响,Forminator 文件上传漏洞(附POC)
【漏洞预警】Exchange爆出RCE漏洞,利用Exchange 帮另一台 Exchange 开门(POC已公开)
【漏洞预警】不用登录,一个请求就能让 GeoServer 乖乖执行命令(POC已公开)
【漏洞预警】Keycloak不登录就能接管任意账户,双重验证也拦不住
【漏洞预警】 8月WebLogic公布了9个漏洞,有一个需要重点关注
【漏洞预警】近期MongoDB 公布了5个漏洞,最严重的一个可以不认证、远程就能拿下你电脑
【0DAY漏洞】 全球5G手机芯片厂商之一的紫光展锐SOC存在RCE漏洞,影响数十家手机厂商,还未发布补丁
【漏洞告警】安卓 14 到 16 全中招,通讯录 SQL 注入漏洞正在抄家(POC已公开)
【漏洞预警】不用输密码,对方已经接管你的Mac:官方补丁公布macOS存在未鉴权RCE漏洞
【0day漏洞预警】MariaDB 13 爆 9.8 分 RCE 链:最低 USAGE 权限就能远程执行命令
VMware 爆 5 个洞,两个 9.8 不用密码就能打穿 vCente
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论