NewN-Day-BenchView benchmark
winfunc
Back to Hacktivity

Status: Patched

This vulnerability has been verified as resolved and deployed.

Jitsi Meet logo
Jitsi MeetHigh2026-09-09

Demoted participants retain moderator recording and dial-out permissions

Summary

Temporary promotion overwrote JWT feature restrictions and demotion did not restore them

A token-authenticated participant whose JWT disabled recording, livestreaming, transcription, and outbound calls could retain those capabilities after a legitimate moderator temporarily promoted and then demoted them.

Root cause. process_set_affiliation() copied the granting moderator's jitsi_meet_context_features table into the promoted participant's session. The demotion branch cleared the table only for sessions without auth_token, so token-authenticated sessions retained stale grants that downstream Jibri and Rayo filters treated as authoritative.

Remediation evidence. Jitsi opened PR #17802 the day after the disclosure and merged it on 9 September 2026. The patch restores the participant's original session features when owner status is revoked and adds regression coverage for the role transition.

CVSS Score

VectorN
ComplexityH
PrivilegesL
User InteractionR
ScopeU
ConfidentialityH
IntegrityH
AvailabilityH
CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H

Vulnerability Location

SourceLine 356
resources/prosody-plugins/token/util.lib.lua
process_and_verify_token()
SinkLine 49
resources/prosody-plugins/mod_filter_iq_jibri.lua
pre-iq/full hook

Source-to-Sink Analysis

1
resources/prosody-plugins/token/util.lib.lua:356

A valid participant token installs explicit feature restrictions on the authenticated session.

PYTHON
session.jitsi_meet_context_features = claims["context"]["features"]
2
resources/prosody-plugins/mod_token_moderation.lua:process_set_affiliation()

Temporary promotion replaces those restrictions with the granting owner's enabled feature table.

PYTHON
occupant_session.jitsi_meet_context_features =
  actor_session.jitsi_meet_context_features
3
resources/prosody-plugins/mod_filter_iq_jibri.lua:49

After demotion, the stale table remains and the authoritative IQ filter permits recording or livestream operations that the JWT denied.

PYTHON
if features and features[requested_feature] == true then
  return
end
module:fire_event("not-allowed", event)

Impact Analysis

Critical Impact

A demoted participant can control same-meeting recording, livestreaming, transcription, or outbound SIP operations. This can expose meeting media, alter recording state, terminate an active stream, or incur telephony usage depending on configured backends.

Attack Surface

Token-protected Jitsi conferences using the Prosody moderation bridge and Jibri or Jigasi feature filters.

Preconditions

The attacker is an authenticated participant with restricted JWT features. A legitimate owner must temporarily promote the participant, and the selected Jibri/Jigasi backend must be deployed.

Proof of Concept

Environment Setup

Use an isolated token-authenticated Jitsi deployment with Jibri or Jigasi enabled and two accounts: an owner and a restricted participant.

Target Configuration

Give the participant a valid room-scoped JWT whose context.features values explicitly disable recording, livestreaming, transcription, and outbound calling.

Exploit Delivery

Promote the participant to owner, revoke that affiliation, then send the standard Jibri start/stop or Rayo dial IQ from the participant's existing session.

Outcome

PR #17802 restores the prior feature table on demotion, so the same IQ is denied after the participant loses owner status.

Expected Response: On the vulnerable revision, Prosody forwards the IQ instead of returning the expected not-allowed response.

Run this level of analysis on your repo.

Winfunc traces source-to-sink paths, validates exploitability, and gives your team patch-ready remediation.

Vulnerability Detection