Content of future message edits and topic metadata leaked to non-subscribers when moving messages to an inaccessible private channel
概要
This was discovered in an internal security audit using Claude Code.
Impact
Two data leaks occur when moving messages from a public channel to a private channel. A "non-subscriber" below refers to a user who is not subscribed to the private channel, and therefore under Zulip's access mode...
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| Zulip server |
>=4.0 |
12.3 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
This was discovered in an internal security audit using Claude Code.
Impact
Two data leaks occur when moving messages from a public channel to a private channel. A "non-subscriber" below refers to a user who is not subscribed to the private channel, and therefore under Zulip's access model shouldn't have access to its contents.
- A non-subscriber's historical
UserMessagerows (created by starring/reacting/marking-read in the public channel) survive the move, so the non-subscriber keeps receivingupdate_messageevents - leaking the content of any future edits to the affected messages, in a channel whose content should be inaccessible to them. - A non-subscriber's
UserTopicrow - recording that they muted or followed the topic in the public channel - is migrated into the private target channel instead of removed. This both persists the row and pushes to that user auser_topicevent carrying the private channel'sstream_idandtopic_name.
Root cause
Both leaks stem from access being inferred from Subscription rows, while in a public channel a user can hold a UserMessage or UserTopic row without any subscription:
- Content-edit
update_messageevents were sent to every holder of aUserMessagerow, with no access check at all - so a non-subscriber's surviving rows kept delivering edits. - On a channel move, the set of users "losing access" (whose
UserTopicrow is removed rather than migrated) is derived fromSubscriptionrows on the old channe…
出典: GitHub Repository Security Advisories (Game のスタック) GitHub Advisory OSV
参照URL
- GITHUB_REPO_ADVISORY zulip/zulip