apache / apache/answer

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

Offen
#1,506 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.