一款旨在修复 Shopware 旧版本中安全漏洞的插件,其自身被发现容易受到 SQL 注入攻击。
这一漏洞是在 Shopware Security Plugin 6 的 2.0.10 版本中被发现的,受影响的是版本低于 6.5.8.13 和 6.6.5.1 的 Shopware 安装系统,攻击者有可能借此获取数据库系统的读写权限,进而对其造成破坏。
该漏洞源于对先前已知的 SQL 注入问题(CVE-2024-22406 和 CVE-2024-42357)的修复不彻底。
虽然这款安全插件本应追溯修复 Shopware 旧版本中的这些漏洞,但在实际实施过程中,由于嵌套的 API 请求,导致系统仍处于暴露状态。
这种疏忽为依赖插件进行保护的电子商务平台造成了重大的安全漏洞,同时延迟了完整版本的升级。
SQL 注入攻击使得恶意行为者能够操纵数据库查询,这有可能导致未经授权访问敏感的客户数据、交易记录,甚至使整个系统遭到破坏。
其严重程度取决于哪些用户可以访问 Shopware 的 API,如果 Store API 中与搜索相关的端点被公开暴露,那么风险就会特别高。
Red Team Pentesting 的研究人员在 2025 年 2 月 12 日发现了这一漏洞,并指出虽然该安全插件正确修复了聚合对象name字段中的漏洞,但它未能对可以递归使用的嵌套聚合对象进行处理。
可被利用的途径
这一疏忽为能够访问 Shopware Store API 或Admin API 的攻击者提供了一条可利用的途径。
该技术漏洞存在于插件处理诸如 “/api/search/order” 等 API 端点中所使用的聚合字段的方式上。以下代码片段展示了安全插件中不完整的修复情况:
class PatchedAggregationParser extends AggregationParser
{
public function buildAggregations(EntityDefinition $definition, array $payload, Criteria $criteria, SearchRequestException $searchRequestException): void
{
parent::buildAggregations($definition, $payload, $criteria, $searchRequestException);
foreach ($criteria->getAggregations() as $i => $aggregation) {
if (str_contains($aggregation->getName(), ‘?’) || str_contains($aggregation->getName(), ‘:’)) {
$searchRequestException->add(new InvalidAggregationQueryException(‘Invalid character in aggregation name’));
}
}
}
}
这个 foreach 循环只检查了聚合对象最顶层的name字段,这就使得攻击者能够在嵌套的聚合对象中注入诸如 “?” 或 “:” 这样的符号。
攻击者可以通过精心构造特殊设计的查询语句,利用预编译语句机制来操纵数据库,从而利用这一漏洞。
Shopware 已经发布了安全插件 6 的 2.0.11 版本来修复这一漏洞。
或者,用户也可以升级到 Shopware 6.5.8.13 或 6.6.5.1 版本,这些版本独立于该安全插件修复了这一问题。鉴于存在权限提升和数据泄露的潜在风险,强烈建议立即进行补丁修复。
发表评论
您还未登录,请先登录。
登录