Kimdir01/kleeja-auth-bypass-rce-cve

GitHub: Kimdir01/kleeja-auth-bypass-rce-cve

针对 Kleeja PHP 文件共享应用的多个严重漏洞(含认证绕过与 RCE)的安全审计报告与概念验证代码。

Stars: 0 | Forks: 0

# GitHub 安全公告:Kleeja 文件共享 — 通过 Cookie 伪造 + PHP 对象注入实现的关键认证绕过 ## 公告信息 | 字段 | 值 | |-------|-------| | **严重程度** | 关键 | | **CWE** | CWE-502 (反序列化) / CWE-287 (认证绕过) / CWE-327 (弱加密) | | **CVSS v3.1** | 9.8 (Cookie 伪造 + 反序列化) / 8.8 (.htaccess 绕过 RCE) | | **CVSS Vector** | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | ## 摘要 Kleeja(191 个 Star,PHP 文件共享应用)包含多个严重漏洞:(1) 通过 Cookie 伪造实现认证绕过 —— 该 Cookie 的“加密”使用了极易被逆向的替换密码,且解密后的 Cookie 被传给 `unserialize()`,从而引发 PHP 对象注入;(2) Cookie 中的 `$group_id` 由攻击者控制,允许其将权限提升至管理员;(3) 在 PHP 7+/FPM 环境下,`.htaccess` 中防止 PHP 执行的机制失效;(4) 文件上传的内容校验可被轻易绕过。 ## 漏洞详情 ### 受影响的包/仓库 - **仓库:** `kleeja-official/kleeja` - **受影响版本:** 当前版本 - **修复版本:** 暂无 (0-day) **审计的 Commit Hash:** `48e42911e1c0b13c5754a154e8d510ebf84e7880` ## CVE-REQUEST-001:通过 Cookie 实现认证绕过 + PHP 对象注入 (CVSS 9.8) **文件:** `includes/usr.php`,第 420-437 行(Cookie 解析),第 348-390 行(加密) **存在漏洞的 Cookie 创建(第 144 行):** ``` $user_y = base64_encode(serialize([ 'id' => $row['id'], 'name' => $row['name'], 'mail' => $row['mail'], 'last_visit' => $row['last_visit'] ])); ``` **存在漏洞的 Cookie 解析(第 420-437 行):** ``` list($user_id, $hashed_password, $expire_at, $hashed_expire, $group_id, $u_info) = @explode('|', $this->en_de_crypt($this->kleeja_get_cookie('ulogu'), 2)); // ... $userinfo = unserialize(base64_decode($u_info)); // PHP OBJECT INJECTION! $userinfo['group_id'] = $group_id; // GROUP FROM COOKIE! define('GROUP_ID', $userinfo['group_id']); // ATTACKER-CONTROLLED ``` **加密缺陷(第 348-390 行):** ``` function en_de_crypt($data, $type = 1) { $chars = str_split($config['h_key']); foreach (range('a', 'z') as $k => $v) { if (!isset($chars[$k])) break; $txt[$v] = $chars[$k] . $k . '-'; } // Simple character substitution cipher, not encryption } ``` `en_de_crypt()` 函数根本不是加密 —— 它仅仅是一个字符替换密码。最多只有 26 个字符被替换。攻击者只需注册一个账户、接收 Cookie 并观察映射关系,就能逆向推导出密钥,进而伪造带有 `group_id=1`(管理员)的 Cookie。 **攻击向量:** 1. 注册一个用户账户 → 接收 Cookie 2. 对 Cookie 进行 Base64 解码 → 观察替换规律 3. 伪造一个带有 `$group_id=1`(管理员组)的 Cookie 4. 将 `$u_info` 设置为精心构造的序列化 PHP 对象 → 利用 POP 链触发对象注入 ## CVE-REQUEST-002:.htaccess 绕过 — 在 PHP 7+/FPM 上执行 PHP 代码 (CVSS 8.8) **文件:** `uploads/.htaccess` ``` php_flag engine off # ONLY for mod_php5! ``` 在 PHP 7.x、8.x 或任何 FPM/FastCGI 环境下,`mod_php5.c` 并不存在,因此 `php_flag engine off` 永远不会被执行。PHP 执行功能处于开启状态。结合文件上传绕过漏洞,上传的 `.php` 文件将能够被执行。 **扩展名校验中的额外 .htaccess 绕过:** ``` // includes/up_helpers/others.php, lines 23-48 $tmp = explode('.', $filename); if (sizeof($tmp) < 3) { return true; // BUG: .htaccess → 2 parts → ALWAYS PASSES } ``` 文件名 `.htaccess` 在经过 `explode('.')` 处理后只有 2 个部分,因此它总是能通过安全检查。 ## CVE-REQUEST-003:文件上传绕过 — 大于 6MB 的文件中包含 PHP 代码 (CVSS 7.8) **文件:** `includes/up_helpers/others.php`,第 259-280 行 ``` // Files > 6MB SKIP content check entirely if (@filesize($file_path) > 6*(1000*1024)) { return true; } // Incomplete PHP code detection blacklist: $maybe_bad_codes_are = [' false]` 3. 不要从 Cookie 中解析 `group_id` —— 每次请求时均从数据库中获取 4. 更新适用于 PHP 7+/FPM 的 `.htaccess`:添加 `` 5. 修复扩展名校验,以处理所有文件名模式 6. 移除 6MB 内容校验绕过漏洞 —— 无论文件大小,均需扫描所有文件 7. 在文件下载时增加所有权校验 8. 将生成删除码的 `sha1(uniqid())` 替换为 `random_bytes()` ## 披露时间线 - **2026-06-28:** 由 Fatullayev Asadbek (Kimdir01) 发现全部 22 个漏洞 - **待定:** 报告给维护者 - **待定:** 通过 GitHub 请求 CVE - **待定:** 发布安全公告 ## 致谢 - 发现者:Fatullayev Asadbek | GitHub:Kimdir01 - 独立安全研究员 ## 参考 - CWE-502:不可信数据反序列化 - CWE-287:认证不当 - CWE-327:使用破损或高风险的加密算法 - CWE-434:危险类型文件的不受限制上传
标签:Cutter, PHP对象注入, PoC, SQL查询, Web安全, 暴力破解, 漏洞分析, 蓝队分析, 路径探测, 身份验证绕过, 逆向工具