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 设为 0CURLOPT_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/签名校验后再解压执行
相关推荐
HZ_YZ1 小时前
清理服务器硬盘脚本
后端
布朗克1681 小时前
Go 入门到精通-16-字符串深入
开发语言·后端·golang·字符串
北冥you鱼2 小时前
Go flag 包详解:从命令行解析到实战应用
开发语言·后端·golang
她说彩礼65万2 小时前
Asp.net core 模型绑定
后端·asp.net
用户34232323763172 小时前
BLE 传感器节点实战
后端
fliter2 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
后端
羑悻3 小时前
我受够了 Coding Agent 的“假聪明,真串行”,于是做了 Meta-Orchestrator!
后端
神奇小汤圆3 小时前
字节二面挂了!被问“订单超时自动取消”
后端
饼干哥哥3 小时前
每晚300+个爆款疯狂跑,0人值守TikTok工厂开张!!
后端·操作系统·产品