CVE-2025-56161CVE-2025-56161是YOSHOP 2.0电商系统中存在的一个高危未授权信息泄露漏洞。该漏洞存在于商品(Goods)模块的评论列表API接口中,允许未经身份验证的远程攻击者通过特定的API端点获取系统中存储的敏感用户信息。
YOSHOP 2.0是一款基于ThinkPHP框架开发的开源电商系统,提供商品管理、订单管理、用户管理、评论管理等完整的电商功能。该漏洞的核心问题在于Comment模型在关联查询User模型时未对返回字段进行过滤限制,而User模型本身也未定义$hidden或$visible属性来保护敏感字段,导致API接口在返回评论数据时,将用户的敏感信息一并暴露在JSON响应中。
攻击者无需任何身份认证即可远程利用此漏洞,通过访问评论列表API端点(如/api/goods.pinglun/list)即可批量获取用户信息。被泄露的敏感数据包括用户的bcrypt密码哈希值、手机号码、账户余额(pay_money)以及消费金额(expend_money)等关键隐私数据。攻击者获取到密码哈希后可进行离线暴力破解,从而进一步获取用户账户控制权,对用户隐私和系统安全构成严重威胁。
该漏洞的CVSS 3.1评分为7.5分,属于高危级别。其攻击向量为网络攻击(AV:N),攻击复杂度低(AC:L),无需任何特权(PR:N)和用户交互(UI:N),对机密性影响高(C:H),但对完整性和可用性无影响。
该漏洞的根本原因在于YOSHOP 2.0系统中Comment模型与User模型之间的关联查询设计缺陷。
在ThinkPHP框架的ORM设计中,当模型之间存在belongsTo或hasOne等关联关系时,系统默认会通过with()方法进行预加载查询(eager loading),将关联模型的数据一并返回。在YOSHOP 2.0的Comment模型中,与User模型建立了belongsTo关联,查询评论列表时会自动加载每条评论对应的用户信息。
关键的安全缺陷在于以下两点:
1. User模型未定义字段过滤属性:在YOSHOP 2.0的User.php模型文件中,没有设置$hidden数组来排除敏感字段,也没有设置$visible数组来仅暴露指定字段。ThinkPHP框架在进行JSON序列化时,默认会返回模型的所有数据库字段。
2. Comment模型的关联查询未指定字段限制:在调用关联数据时,未使用with(['user' => function($query) { $query->field('id,nickname'); }])的方式限制返回字段,导致User模型的所有字段被一并序列化输出。
因此,当攻击者访问评论列表API(如/api/goods.pinglun/list)时,系统会返回包含完整用户信息的JSON响应,泄露的字段包括:password(bcrypt密码哈希)、mobile(手机号码)、pay_money(账户余额)、expend_money(消费金额)等。
由于不同部署环境下的路由命名可能不同(如/api/goods.pinglun/list、/api/goods.comment/list等),但底层调用的模型逻辑相同,因此所有部署了该系统的服务器均受影响。