Security: Deleted content exposure + revision history IDOR via sequential IDs
- Vorherrschende Sprache
- Go
- Sterne
- 15.7k
- Forks
- 1.4k
- Ø Merge
- 3 T. 8 Std.
- Gemergte PRs (30 T.)
- 7
Beschreibung
## Summary
Two information disclosure issues allow access to deleted/pending content:
### 1. Deleted Answer Content via GET /answer/api/v1/answer/info (Low-Medium)
\`AnswerService.Get()\` calls \`answerRepo.GetByID()\` which fetches answers by raw ID with no \`status != deleted\` filter. Deleted answers are returned with full content to unauthenticated callers.
**Secure comparison:** \`SearchList\` correctly filters: \`session.Where("status != ?", entity.AnswerStatusDeleted)\`
### 2. Revision History IDOR via GET /answer/api/v1/activity/timeline/detail (Medium)
\`GetObjectTimelineDetail\` fetches revision content by sequential integer ID (\`autoincr BIGINT\`). No check for whether the associated question/answer is deleted or pending. Any authenticated user can enumerate \`revision_id=1,2,3...\` to read full content of deleted/pending questions and answers.
**Secure comparison:** \`GetRevisionList\` correctly checks \`objInfo.IsDeleted()\` before showing history. \`GetQuestion\` blocks access to deleted/pending content.
### Impact
- Bypasses content moderation (admin-deleted content remains accessible)
- Reveals pending-review content before publication
- Sequential revision IDs make enumeration trivial
## Discovery
Found through automated security research comparing content visibility controls across endpoints.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne für die beiden betroffenen Endpunkte mit AnswerService.Get und GetObjectTimelineDetail und vergleiche anschließend deren Zugriffskontrollen mit SearchList, GetRevisionList und GetQuestion. Verfolge, wie gelöschte und ausstehende Fragen, Antworten und Revisionen geladen werden. Die Aufgabe ist abgeschlossen, wenn nicht authentifizierte Benutzer keine gelöschten Antworten mehr sehen können und authentifizierte Benutzer keinen Inhalt gelöschter oder ausstehender Revisionen mehr sehen können, während der Zugriff auf zulässige Inhalte erhalten bleibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- go
- Bereich
- api, backend, security
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100