Security: Deleted content exposure + revision history IDOR via sequential IDs
- Lingua principale
- Go
- Stelle
- 15.7k
- Fork
- 1.4k
- Merge medio
- 3g 8h
- PR unite (30g)
- 7
Descrizione
## 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.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Inizia con AnswerService.Get e GetObjectTimelineDetail per i due endpoint interessati, quindi confronta i relativi controlli di accesso con SearchList, GetRevisionList e GetQuestion. Traccia il modo in cui vengono caricate le domande, le risposte e le revisioni eliminate e in sospeso. Il lavoro è completato quando le risposte eliminate non sono più esposte agli utenti non autenticati e il contenuto delle revisioni eliminate o in sospeso non è più esposto agli utenti autenticati, mentre il contenuto consentito rimane accessibile.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- go
- Ambito
- api, backend, security
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100