Xiuno BBS 审计之问题12:HTTPS 请求关闭 SSL 证书校验,存在中间人攻击风险

问题:HTTPS 请求关闭 SSL 证书校验,存在中间人攻击风险

此文章为XIUNOX版本重构审计时发现问题,XIUNOX版本已优化修复此问题。分享出来方便后续想基于xiuno bbs4.0.4版本制作维护版本或插件模板等需求的开发者和站长参考。

现象

Xiuno BBS 4.0.4 的 https_post() 函数在发起 HTTPS 请求时(用于插件市场下载、远程附件抓取、SMTP 邮件等场景),将 CURLOPT_SSL_VERIFYPEER 设为 0、CURLOPT_SSL_VERIFYHOST 设为 2(仅校验主机名不校验证书链)。这意味着攻击者只需在客户端与服务端之间插入自签名证书即可解密、篡改全部 HTTPS 流量,包括插件下载内容(落盘后会被 include 执行,直接 RCE)。

源码证据

文件:xiunobbs_4.0.4/xiunophp/misc.func.php 行 1317-1335(https_post 函数中的 curl 选项)

php 复制代码
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded', 'x-requested-with: XMLHttpRequest'));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, _SERVER('HTTP_USER_AGENT'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);   // 关闭对端证书校验
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);    // 仅校验主机名,不校验证书链

同一函数后续还会跟随 301/302 跳转(行 1340-1346),攻击者通过 MITM 返回 302 即可让 curl 跳转到攻击者控制的任意地址继续下载,最终落盘内容(如插件 zip、远程图片)被解压并 include。

调用链佐证:

  • admin/route/plugin.php 的插件在线下载调用 http_get/https_get → 落盘解压 → include install.php(已记录于 01_critical_ssrf_plugin_download.md)
  • tool/save_remote_image.php 抓取远程图片也走同一函数

风险等级与结论

高危

危害后果:

  • 中间人攻击者可篡改插件下载包,植入后门代码,落盘后由 include install.php 触发 RCE
  • 远程图片抓取可被替换为恶意内容,配合文件上传缺陷写入 webshell
  • SMTP over HTTPS 的认证凭据可被窃取
  • 官方源 http://plugin.xiuno.com/ 本身已是 HTTP(见 04_plugin_official_source_dead_market_paralyzed.md),即使 SSL 校验开启也无法保护,双重缺陷叠加

修复建议:

  1. 将 CURLOPT_SSL_VERIFYPEER 设为 true(1)、CURLOPT_SSL_VERIFYHOST 设为 2
  2. 维护 CA 证书包路径(CURLOPT_CAINFO 指向 cacert.pem)
  3. 官方源切换到 HTTPS 且证书有效
  4. 对下载的 zip 包做 GPG/签名校验后再解压执行
相关推荐
Cosolar6 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
小蒜学长7 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
陈随易7 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
每天一道题8 小时前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
前端的日常8 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
IT_陈寒8 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
ServBay9 小时前
本地模型已经跑起来了,Copilot Fusion 为什么还要联网?
后端·ai编程·github copilot
武子康10 小时前
H3-World 的动作没按时发生,先检查时间线变成了什么
人工智能·后端·agent
苍何10 小时前
腾讯 Buddy One 来了,办公全家桶一键打通WorkBuddy(附教程)
后端
GIS数据转换器10 小时前
基于CIM的城市智慧供热监管服务平台
java·大数据·开发语言·人工智能·后端·物联网·struts