LimeSurvey服务端请求伪造漏洞CVE-2026-63107
LimeSurvey是一款PHP开发、GPL开源私有化部署的专业问卷调研系统,适合高校科研、企业客户调研、员工满意度、政务民意收集。
一、基本情况
LimeSurvey可以替代问卷星、Google 表单,用于学术调研、满意度收集适合高校科研、企业客户调研、员工满意度、政务民意收集。
LimeSurvey可以支持链接、二维码、网站嵌入、邮件定向邀请等答卷,可以自动发送填写提醒,精细化权限管理多团队协作维护问卷。

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_VERIFYPEER、CURLOPT_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
六、参考链接
管理员已设置登录后刷新可查看