apache / apache/answer

Security: Deleted content exposure + revision history IDOR via sequential IDs

Abierto
#1,506 0 comentarios 0 reacciones 0 asignados Ver en GitHub
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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.