Security: Deleted content exposure + revision history IDOR via sequential IDs
- Lenguaje dominante
- Go
- Estrellas
- 15.7k
- Forks
- 1.4k
- Merge medio
- 3 d 8 h
- PR fusionados (30 d)
- 7
Descripción
## 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.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza con AnswerService.Get y GetObjectTimelineDetail para los dos endpoints afectados y, a continuación, compara sus comprobaciones de acceso con SearchList, GetRevisionList y GetQuestion. Rastrea cómo se cargan las preguntas, respuestas y revisiones eliminadas y pendientes. Se considera completado cuando las respuestas eliminadas ya no quedan expuestas a usuarios no autenticados y el contenido de revisiones eliminadas o pendientes ya no queda expuesto a usuarios autenticados, mientras el contenido permitido sigue siendo accesible.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- go
- Área
- api, backend, security
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100