# Sanluan PublicCMS 删除接口权限不足漏洞
## 概述
在 Sanluan PublicCMS(版本 ≤ 5.202506.d)中发现一个权限控制不当漏洞,影响组件“交易地址删除端点”的 `delete` 函数。攻击者通过操控参数 `ids` 可绕过授权验证,实现未授权删除操作。
## 影响版本
Sanluan PublicCMS ≤ 5.202506.d
## 细节
漏洞位于文件 `publiccms-trade/src/main/java/com/publiccms/controller/web/trade/TradeAddressController.java` 的 `delete` 方法。该方法未正确验证当前用户与待删除地址的归属关系,仅依赖前端传入的 `ids` 参数执行删除操作,导致攻击者可构造请求删除任意用户的交易地址。
## 影响
- 可导致任意交易地址被删除
- 攻击可远程发起,无需用户交互
- 漏洞利用方式已公开,存在被广泛利用的风险
- 厂商已通知但未回应
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: PublicCMS : IDOR in Trade Address Deletion · Issue #4 · AnalogyC0de/public_exp -- 🔗来源链接
标签:exploitissue-tracking
神龙速读:
### 漏洞关键信息
#### 漏洞概述
- **提交人**: Ana10gy
- **项目**: PublicCMS [https://github.com/sanluran/PublicCMS]
- **供应商**: publiccms
- **受影响版本**: PublicCMS <= V5.202506.d
- **类型**: 不安全的直接对象引用(Insecure Direct Object Reference, IDOR)
- **严重性**: 高 (CVSS 7.5)
- **CWE**: CWE-639 (Insecure Direct Object Reference)
- **攻击链**: 认证用户 -> 删除其他用户的地址 -> 数据丢失/服务中断
#### 漏洞细节
##### 根因
漏洞的根本原因是删除操作中缺少所有权验证。控制器假设如果用户已认证,则他们有权删除他们提供的任何地址ID。
##### 攻击向量
认证攻击者可以:
1. 通过顺序猜测或观察来枚举地址ID。
2. 发送带有属于其他用户的地址ID的删除请求。
3. 系统处理删除操作,但不进行所有权验证。
4. 受害者失去他们的保存的送货地址。
##### 代码细节
###### 感染点 - 删除端点
- **文件**: `publiccms-trade/src/main/java/com/publiccms/controller/web/trade/TradeAddressController.java:73`
- **相关代码**:
```java
@RequestMapping("delete")
@Csrf
public String delete(@RequestAttribute SysSite site, @SessionAttribute SysUser user, Long[] ids, HttpServletRequest request) {
if (CommonUtils.notEmpty(ids)) {
service.delete(ids);
logOperateService.save(new LogOperate(site.getId(), user.getId(), user.getDeptId(), LogLoginService.CHANNEL_WEB_MANAGER, "deleteTradeAddress", RequestUtils.getIpAddr(request), CommonUtils.getDate(), StringUtils.join(ids, ",")));
}
return CommonConstants.TEMPLATE_DONE;
}
```
###### 数据层 - 服务实现
- **文件**: `publiccms-trade/src/main/java/com/publiccms/logic/service/trade/TradeAddressService.java`
- **相关代码**:
```java
@Service
public class TradeAddressService extends BaseService<TradeAddress> {
public void delete(Serializable[] ids) {
dao.delete(ids);
}
}
```
###### 实体定义
- **文件**: `publiccms-trade/src/main/java/com/publiccms/entities/trade/TradeAddress.java`
- **相关代码**:
```java
@Entity
@Table(name = "trade_address")
public class TradeAddress {
private Long id;
private short siteId;
private long userId;
private String address;
private String addresssee;
private String telephone;
// ... getters and setters
}
```
##### 概念验证
- **步骤 1**: 攻击者枚举
- **步骤 2**: 易受攻击的处理
- **步骤 3**: 结果
- **步骤 4**: 对受害者的攻击
##### 攻击场景
- **场景 A**: 针对性骚扰
- **场景 B**: 批量拒绝服务
- **场景 C**: 竞争性破坏
##### 影响评估
| 影响 | 严重性 |
|---------------------|--------|
| 数据丢失 | 高 |
| 服务中断 | 高 |
| 隐私违规 | 中等 |
| 用户体验降级 | 高 |
| 商业逻辑绕过 | 中等 |
##### 修复建议
1. 在控制器中添加所有权验证。
2. 在服务层添加所有权检查。
3. 使用安全的基服务模式。
4. 添加面向切面编程(AOP)验证。
5. 添加全面的日志记录。
标题: Login required -- 🔗来源链接
标签:signaturepermissions-required
神龙速读:
- **Vulnerability**: Sanluan PublicCMS up to 5.202506.d Trade Address Deletion Endpoint TradeAddressController.java delete ids improper authorization
- **VDB Links**: VDB-341704 · CVE-2026-1112 · EUVD-2026-3182
- **Access**: Login required for full details
暂无评论