GHSA-rj4g-rqgh-rx9h - Ech0 comment model's Email field returned on public /api/comments endpoints
GHSA-rj4g-rqgh-rx9h - Ech0 comment model's Email field returned on public /api/comments endpoints
GHSA-rj4g-rqgh-rx9h MEDIUM go/github.com/lin-snow/Ech0
CVE:
Summary
The Comment model serializes its Email field through the public comment-listing API. internal/model/comment/comment.go:33 uses json:"email", while adjacent PII fields (IPHash, UserAgent) correctly use json:"-". The public endpoints GET /api/comments?echo_id=X and GET /api/comments/public?limit=N both live on PublicRouterGroup with no authentication. Alice retrieves every guest commenter's email address on the instance with a few unauthenticated HTTP calls.
Details
The Comment model at internal/model/comment/comment.go:33:
type Comment struct {
// ...
Email string `gorm:"size:255;not null;index" json:"email"`
IPHash string `gorm:"size:128;index" json:"-"`
UserAgent string `gorm:"size:512" json:"-"`
// ...
}The json:"-" on IPHash and UserAgent shows the developer's intent: hide server-side PII from API responses. The Email field missed the same tag. GORM materializes the full struct and the Gin handler returns it verbatim.
Routes at internal/router/comment.go:20 and comment public-feed route:
appRouterGroup.PublicRouterGroup.GET("/comments", middleware.NoCache(), h.CommentHandler.ListCommentsByEchoID())
appRouterGroup.PublicRouterGroup.GET("/comments/public", middleware.NoCache(), h.CommentHandler.ListPublicComments())Both handlers call ListPublicByEchoID (service at internal/service/comment/comment.go:329) or ListPublicComments (service at :340), both of which return the slice of Comment structs to ctx.JSON. No DTO projection, no field stripping.
The email field is populated for every guest comment: the submission form requires an email address so the server can later send moderation or reply notifications. The UI does not display the email, so users assume it stays server-side.
GHSA-m983-7426-5hrj (2026-03-22) closed a similar PII leak on GET /api/allusers, which exposed account-owner emails. This report covers a
📌 来源: GitHub-Advisory | 📅 2026-05-07