首页 网络安全 正文

LimeSurvey服务端请求伪造漏洞CVE-2026-63107

摘要

栋科技漏洞库关注到 LimeSurvey SSRF 通过 REST API 调查模板主机标头,现在已经被追踪为CVE-2026-63107,CVSS 4.0评分6.3。

LimeSurvey是一款PHP开发、GPL开源私有化部署的专业问卷调研系统,适合高校科研、企业客户调研、员工满意度、政务民意收集。

一、基本情况

LimeSurvey可以替代问卷星、Google 表单,用于学术调研、满意度收集适合高校科研、企业客户调研、员工满意度、政务民意收集。

LimeSurvey可以支持链接、二维码、网站嵌入、邮件定向邀请等答卷,可以自动发送填写提醒,精细化权限管理多团队协作维护问卷。

LimeSurvey服务端请求伪造漏洞CVE-2026-63107

LimeSurvey开源社区版免费无答卷上限,但原生无轻量化小程序入口,因此,如果需要复杂高级市场研究功能的话,需要付费专业版。

栋科技漏洞库关注到 LimeSurvey SSRF 通过 REST API 调查模板主机标头,现在已经被追踪为CVE-2026-63107,CVSS 4.0评分6.3。

二、漏洞分析

CVE-2026-6310是LimeSurvey 6.17.10 及以下 6.x 版本、7.0.4 及以下 7.x 版本的 REST API 问卷模板接口中存在服务端请求伪造漏洞。

该漏洞位于LimeSurvey REST API 接口 GET /index.php/rest/v1/survey-template/{id} 在调用 curl 发起服务端请求渲染问卷预览页面时,

直接将 HTTP Host 请求头作为目标主机名使用,这使得已认证用户可通过篡改 HTTP Host 请求头,驱使服务端发起任意 HTTP 请求。

攻击者可传入任意 Host 值,利用getTemplateData()函数未对 HTTP Host 头做过滤净化的缺陷,访问内网服务、云服务器元数据接口。

已登录认证的攻击者制服务器向任意可访问的主机与端口发起 HTTP GET 请求,目标服务返回的完整响应内容原样返回至 API 结果中。

漏洞位于文件 application/liparies/Api/Command/V1/SurveyTemplate.php 的 getTemplateData() 函数,代码行 161 至 177:

$root = (
    !empty($_SERVER['HTTPS'])
    ? 'https'
    : 'http'
) . '://' . ($_SERVER['HTTP_HOST'] ?? '');
curl_setopt(
    $ch,
    CURLOPT_URL,
    $root . "/{$surveyId}?newtest=Y&lang={$language}&popuppreview=true"
);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$_SERVER['HTTP_HOST'] 直接回显传入的 HTTP Host 请求头,未做任何校验。

拼接生成的 URL 直接传入curl_exec()执行,服务端会真实向该地址发起 HTTP 请求。

同时代码关闭了 TLS 证书校验(CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST 均设为 false),

因此可以访问使用自签名证书的 HTTPS 内网服务。

该接口在 application/config/rest/v1/survey.php 中注册,

路由为 v1/survey-template/\(id,同时支持GET、POST请求,鉴权配置开启(auth => true)。

程序在执行漏洞代码前会校验 `hasSurveyPermission(\)surveyId, 'surveycontent', 'read')` 权限。

只要用户拥有任意一份问卷的所属权限或问卷内容读取权限,即可满足访问条件。该函数内部注释也明确标注了此设计缺陷:

// @todo This shouldnt require a HTTP request we should be able to
// - render survey content internally.

三、POC概念验证

(一)测试环境:基于 Docker 镜像 martialblog/limesurvey:6-apache 部署的 LimeSurvey 6.17.3

步骤 1:获取 API 令牌(管理员账号,或拥有问卷访问权限的任意用户均可):

管理员已设置登录后刷新可查看

响应

{"token":"SW4XKDq9OKq9thHTh_AgFHJEH1m4umGK","userId":1}

步骤 2:在 LimeSurvey 服务器可连通的主机上启动 HTTP 监听服务:

python3 -m http.server 9998 --bind <attacker-ip>

步骤 3:发送问卷模板接口请求,并伪造 Host 请求头:

管理员已设置登录后刷新可查看

步骤 4:查看结果:

攻击者监听端日志可证明 LimeSurvey 服务器已主动向外发起请求。

172.28.0.3 - - "GET /12345?newtest=Y&lang=en&popuppreview=true HTTP/1.1" 404 -

API 返回结果会在 template 字段中携带监听服务返回的 HTTP 响应正文。

{
    "title": "Test Survey for Security",
    "subtitle": null,
    "template": "<!DOCTYPE HTML>...<h1>Error response</h1>..."
}

若要访问 AWS EC2 实例元数据服务,请求头设置Host: 169.254.169.254,服务端会发起请求 http://169.254.169.254/12345?...。

开启 IMDSv1 的实例下,无论请求路径是什么,元数据根接口都会返回所有可用资源路径。

(二)漏洞危害

任意拥有至少一份问卷读取权限的 LimeSurvey 认证用户,均可驱使服务器向任意主机、任意 TCP 端口发起 HTTP GET 请求,

目标服务完整响应内容会随 API 结果返回。

风险包含:

窃取内网 HTTP/HTTPS 服务数据(内网管理后台、数据库、微服务接口等公网无法直接访问的资源);

从云厂商元数据接口盗取凭证(AWS IMDSv1、GCP、Azure 实例元数据);

对内网进行端口扫描、服务探测;

访问仅依靠网络隔离防护的内部业务服务。

若站点部署在反向代理后端,且代理强制固定 Host 请求头,则不受该漏洞影响。

四、影响范围

LimeSurvey 6.x ≤ 6.17.10

LimeSurvey 7.x ≤ 7.0.4

五、修复建议

LimeSurvey 6.x ≥ 6.17.11

LimeSurvey 7.x ≥ 7.0.5

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接