kaleth4/CVE-2026-42167
GitHub: kaleth4/CVE-2026-42167
这是ProFTPD mod_sql模块的SQL注入漏洞(CVE-2026-42167)技术分析和概念验证代码库,可实现认证绕过和远程代码执行。
Stars: 0 | Forks: 0
# CVE-2026-42167: ProFTPD mod_sql 中的 SQL 注入
## 📋 执行摘要
**CVE-2026-42167** 是 ProFTPD `mod_sql` 模块中的一个严重 SQL 注入漏洞,允许**身份验证绕过**、**后门用户注入**和**远程代码执行 (RCE)**。
| 属性 | 值 |
|----------|-------|
| **类型** | SQL 注入 (CWE-89) |
| **严重性** | 高危/严重 |
| **CVSS v3** | 8.1 |
| **组件** | ProFTPD < 1.3.9a 中的 mod_sql |
| **报告者** | ZeroPath Research |
| **日期** | 2026年4月28日 |
## 🔍 技术描述
### 问题:`is_escaped_text()` 中的弱验证
ProFTPD 使用 `is_escaped_text()` 函数来确定值是否已在插入 SQL 查询之前进行过净化。该函数假设任何满足以下条件的输入:
- 以单引号 `'`
- 结尾以单引号 `'`
- 不包含内部单引号
...已经过转义,无需进一步处理。
### 漏洞利用
攻击者可以发送如下恶意用户名:
```
USER ' || (SELECT 1) ||'
```
当插入 SQL 查询时:
```
INSERT "'%U', '%r', '%m'" activity_log
```
产生:
```
INSERT "'' || (SELECT 1) || ''" activity_log
```
有效载荷作为任意 SQL 执行,因为 `||` 运算符在注入命令周围连接空字符串。)
## ⚠️ 影响场景
### 1️⃣ 远程代码执行 (RCE)
**要求:**
- PostgreSQL 后端
- 具有超级用户权限的数据库用户
- 启用 SQL 日志记录并使用 `%U` 或 `%{basename}` 变量
**技术:**
```
COPY (SELECT 1) TO PROGRAM 'comando_malicioso'
```
以 `postgres` 用户身份执行操作系统级命令。
### 2️⃣ 身份验证绕过
**要求:**
- 启用 `SQLAuthenticate`
- 在 `SQLLog ERR_*` 中使用 `%U` 变量的 SQL 日志记录(预认证)
**技术:**
```
INSERT INTO users (username, password, uid, homedir)
VALUES ('attacker', 'password_hash', 0, '/')
```
攻击者注入一个具有 `uid=0` (root) 和完整文件系统访问权限的后门用户。
### 3️⃣ 数据泄露
**要求:**
- 任何 SQL 后端
- 启用 SQL 日志记录
**技术:**
基于时间的盲注 SQL 以逐字符提取凭据。)
## 📊 攻击向量
### 攻击者可控变量
| 变量 | 含义 | 范围 |
|----------|-------------|---------|
| `%U` | 原始用户名(认证前) | **预认证** |
| `%A` | 匿名登录密码 | 预认证 |
| `%J` | 命令参数 | 预认证 |
| `%m` | FTP 动词 (STOR, RETR 等) | 预认证 |
| `%{basename}` | 文件名组件 | 认证后 |
| `%l` | ident 响应 (RFC 1413) | 预认证(如果 identd 可用) |
### 利用路径
**预认证(更关键):**
```
%U + SQLLog ERR_* → Sin credenciales requeridas
```
**认证后:**
```
%{basename} + SQLLog STOR → Requiere cualquier usuario FTP válido
```
## 🛡️ 缓解和解决方案
### ✅ 建议的解决方案
**立即升级到 ProFTPD 1.3.9a 或更高版本:**
```
# 验证当前版本
proftpd -v
# 更新(Debian/Ubuntu 示例)
sudo apt-get update
sudo apt-get install proftpd-basic=1.3.9a-1
```
### 🔧 临时缓解措施
**如果无法立即升级:**
1. **禁用 SQL 日志记录:**
```
# 在 proftpd.conf 中注释或删除这些行
# SQLLog * log_activity
# SQLLog ERR_* log_activity
```
2. **应用最小权限原则:**
```
-- En PostgreSQL, crear usuario sin privilegios de superusuario
CREATE USER proftpd_user WITH PASSWORD 'secure_password';
GRANT SELECT, INSERT ON activity_log TO proftpd_user;
-- NO otorgar SUPERUSER
```
3. **监控漏洞利用尝试:**
```
TraceLog /var/log/proftpd/trace.log
Trace sql:17
```
## 🔎 漏洞验证
### 妥协指标
在 ProFTPD 跟踪日志中搜索(启用 `Trace sql:17`):
```
text 'payload' is already escaped, skipping escaping it again
```
此消息表明绕过尝试已由易受攻击的引擎处理。
### 验证命令
```
# 启用详细跟踪
echo "Trace sql:17" >> /etc/proftpd/proftpd.conf
# 重启 ProFTPD
sudo systemctl restart proftpd
# 监控日志
tail -f /var/log/proftpd/trace.log | grep "already escaped"
```
## 📦 版本信息
| 版本 | 状态 |
|---------|--------|
| < 1.3.9 | ❌ 易受攻击 |
| 1.3.9 | ❌ 易受攻击 |
| ≥ 1.3.9a | ✅ 已修补 |
| ≥ 1.3.10rc1 | ✅ 已修补 |
## 🧪 概念验证 (PoC)
### 官方仓库
**GitHub:** [ZeroPathAI/proftpd-CVE-2026-42167-poc](https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc)
### 使用 Docker 快速配置
```
# 克隆仓库
git clone https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc.git
cd proftpd-CVE-2026-42167-poc
# 要求
# - Docker
# - Git
# - Python 3.10+
# - uv(Python 包管理器)
# 配置易受攻击的环境
cd setup
./setup.sh
# 执行 PoCs
cd ../pocs
python3 preauth_user_backdoor.py # Inyectar usuario backdoor (pre-auth)
python3 preauth_user_rce.py # RCE vía COPY TO PROGRAM (pre-auth)
python3 postauth_stor_backdoor.py # Inyectar usuario (post-auth)
python3 postauth_stor_rce.py # RCE (post-auth)
# 清理
cd ../setup
./teardown.sh
```
## 📅 时间线
| 日期 | 事件 |
|-----|--------|
| 2026-03-28 | 向 ProFTPD 报告漏洞 |
| 2026-04-07 | 验证并开发补丁 |
| 2026-04-24 | 分配 CVE-2026-42167 |
| 2026-04-27 | 发布补丁 (commit af90843baf7dcb8c6be1e5261be2d0b5b5850673) |
| 2026-04-27 | 发布 ProFTPD 1.3.9a |
## 📚 参考资料
- **NVD:** https://nvd.nist.gov/vuln/detail/CVE-2026-42167
- **技术博客:** https://zeropath.com/blog/proftpd-cve-2026-42167-auth-bypass-privesc-rce
- **PoC 仓库:** https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc
- **发布说明:** http://www.proftpd.org/docs/RELEASE_NOTES-1.3.10rc1
- **讨论:** https://github.com/proftpd/proftpd/issues/2052
## ⚡ 最终建议
1. **立即行动:** 将 ProFTPD 升级到 1.3.9a 或更高版本
2. **审计:** 检查所有 ProFTPD 服务器上的 `SQLLog` 配置
3. **权限:** 确保数据库用户没有超级用户权限
4. **监控:** 为 SQL 注入尝试实施告警
5. **补丁:** 保持所有依赖项的定期补丁计划
**最后更新:** 2026年4月28日
**来源:** ZeroPath Research, MITRE CVE, NVD
标签:CISA项目, CVE-2026-42167, EVTX分析, Exploit, FTP服务, mod_sql, PNNL实验室, PostgreSQL, ProFTPD, RCE, Web安全, ZeroDay, 后门注入, 情报收集, 测试用例, 漏洞研究, 编程工具, 网络安全, 蓝队分析, 认证绕过, 请求拦截, 远程代码执行, 逆向工具, 隐私保护