Um usuário normal autenticado pode ler o conteúdo de uma mensagem num canal privado a que não pertence. ` GET / api/ v 1 /chans/{id}/messages/{message_id}/thread` autoriza o chamador contra o canal URL, mas a busca de thread subjacente carrega o thread *pai* por id e o devolve sem verificar que o pai pertence a esse canal. Ao solicitar um thread em um canal que eles podem acessar ao fornecer o id de mensagem de um canal vítima como a raiz do thread, o atacante recebe a mensagem vítima — conteúdo, id de canal e autor. ## Componente afetado. - `backend/open_webui/models/messages.py` — `get_messages_by_parent_id()` - `backend/open_webui/routers/channels.py` — `get_channel_thread_messages()` (leia), `new_message_handler()` (pai/replicando vinculando na escrita) `get_messages_by_parent_id(channel_id, parent_id)` filtra o thread *replica* por `canal_id`, mas carrega o thread *parente* por id sozinho e o anexa sem exigir `parent.canal_id == canal_id`:.
``` `python message = wait db.get(Message, parent_id) # carregado por id apenas — nenhuma ligação de canal se não mensagem: retorna [] # as respostas são filtradas por canal_id... se len(all_mensages) < limite: all_mesages.apend(message) # pai anexado incondicionalmente ```` `get_canal_thread_messages()` autoriza apenas o canal URL, em seguida, chama `get_messages_by_parent_id(id, message_id)` com o chamador fornecido `message_id`. O caminho de inserção da resposta (`new_message_handler` → `insert_new_message`) também armazenava um chamador fornecido `parent_id` sem a vincular ao canal. Um não- membro pode revelar o conteúdo (mais id de canal e metadados do autor) de uma mensagem de canal privado cujo id eles conhecem ou obtêm. Lida direta do canal/mensagem/direito da vítima 403; a divulgação é via o pai de linha de um canal a que o atacante pode acessar. Apenas leitura, uma mensagem por id conhecido.
(reporter) validado em v 0.9.6 "GET /channels/{atacker_channel}/messages/{victim_message_id}/thread` devolveu a mensagem privada da vítima — conteúdo, id do canal da vítima e autor — embora as leituras diretas do canal da vítima sejam devolvidas 403. Vincular o pai da linha de rodagem ao canal solicitado: `get_messages_by_parent_id` retorna `[]` a menos que o pai exista e `parent.channel_id`. Defesa em profundidade no caminho de escrita: `new_message_handler` rejeita um `parent_id`/`reply_to_id` fornecido cuja mensagem não pertence ao canal URL.
Afetado / Patched. - Afetado: `< 0.10.0 ` (última versão afetada) 0.9.6 ) - Patched: v 0.10.0 (PR # 25766. `get_messages_by_parent_id` liga o pai de linha ao canal solicitado (retorna `[]` a menos que `parent.channel_id == canal_id`), e `new_message_handler` rejeita um chamador fornecido `parent_id`/`reply_to_id` cuja mensagem não pertence ao canal. Registro de aconselhamento: GHSA- 73 x 5 - h 92 w- xc 2 j. Identificadores relacionados: CVE- 2026 - 59215.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 24 T 17: 04: 31.000 Z e lista a sua última modificação como 2026 - 07 - 24 T 17: 04: 31.000 Z. Severidade: LOW. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N.
Informações sobre software e versão afetadas: Pacote PyPI open-webui — ECOSISTEM: introduzido 0, corrigido 0.10.0. Classificação e evidência: identificadores de fraqueza CWE- 639. O registro contém 6 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.