[CRITICAL] 大规模 IDOR 漏洞:Delete/Update 操作缺失所有权检查 #5

Closed
opened 2026-04-30 03:44:14 +08:00 by lan · 0 comments
Owner

漏洞描述

多个 Delete/Update 接口直接使用客户端传入的资源 ID,未验证该资源是否属于当前登录用户。任何已认证的用户可以删除或修改其他用户的内容。

影响范围

文件 行号 方法 风险
comment_service.go 309 DeleteComment() 任意用户可删除任意评论
comment_service.go 357 UpdateComment() 任意用户可编辑任意评论
post_service.go 195 DeletePost() 任意用户可删除任意帖子
group_service.go 977 RejectJoinRequest() 任意用户可拒绝任意加组申请
group_service.go 994 ApproveJoinRequest() 任意用户可批准任意加组申请
group_service.go 1011 CancelJoinRequest() 任意用户可取消任意加组申请
schedule_service.go 267 DeleteSchedule() 任意用户可删除任意日程
vote_service.go 251 DeleteVote() 任意用户可删除任意投票
trade_service.go 329 DeleteTradeItem() 任意用户可删除任意交易
sticker_service.go 199 DeleteSticker() 任意用户可删除任意表情
user_activity_service.go 78 DeleteUserActivity() 任意用户可删除任意动态

修复建议

在每个 Delete/Update 操作前验证资源所有权:

// 示例:comment_service.go DeleteComment()
comment, err := s.commentRepo.GetByID(commentID)
if err != nil {
    return err
}
if comment.UserID != currentUserId {
    return apperrors.ErrUnauthorized // 或 ErrForbidden
}

或通过 Casbin RBAC 策略,确保只有资源所有者或管理员可以执行操作。

严重程度

CRITICAL - 直接影响用户数据完整性和系统安全。

## 漏洞描述 多个 Delete/Update 接口直接使用客户端传入的资源 ID,**未验证该资源是否属于当前登录用户**。任何已认证的用户可以删除或修改其他用户的内容。 ## 影响范围 | 文件 | 行号 | 方法 | 风险 | |------|------|------|------| | `comment_service.go` | 309 | `DeleteComment()` | 任意用户可删除任意评论 | | `comment_service.go` | 357 | `UpdateComment()` | 任意用户可编辑任意评论 | | `post_service.go` | 195 | `DeletePost()` | 任意用户可删除任意帖子 | | `group_service.go` | 977 | `RejectJoinRequest()` | 任意用户可拒绝任意加组申请 | | `group_service.go` | 994 | `ApproveJoinRequest()` | 任意用户可批准任意加组申请 | | `group_service.go` | 1011 | `CancelJoinRequest()` | 任意用户可取消任意加组申请 | | `schedule_service.go` | 267 | `DeleteSchedule()` | 任意用户可删除任意日程 | | `vote_service.go` | 251 | `DeleteVote()` | 任意用户可删除任意投票 | | `trade_service.go` | 329 | `DeleteTradeItem()` | 任意用户可删除任意交易 | | `sticker_service.go` | 199 | `DeleteSticker()` | 任意用户可删除任意表情 | | `user_activity_service.go` | 78 | `DeleteUserActivity()` | 任意用户可删除任意动态 | ## 修复建议 在每个 Delete/Update 操作前验证资源所有权: ```go // 示例:comment_service.go DeleteComment() comment, err := s.commentRepo.GetByID(commentID) if err != nil { return err } if comment.UserID != currentUserId { return apperrors.ErrUnauthorized // 或 ErrForbidden } ``` 或通过 Casbin RBAC 策略,确保只有资源所有者或管理员可以执行操作。 ## 严重程度 **CRITICAL** - 直接影响用户数据完整性和系统安全。
lan closed this issue 2026-04-30 12:23:20 +08:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: carrot_bbs/backend#5