Summary
A publisher can flood Script/Metadata frames to players who explicitly disabled audio and video via receiveAudio(false) / receiveVideo(false).
Attacker
Any RTMP publisher authorized (or unauthenticated on the built-in relay) for a route.
Controlled input
RTMP_MSG_AMF0_DATA / Script frames (onMetaData, @setDataFrame, etc.), up to DEFAULT_MAX_MSG_LENGTH (4 MiB) per message.
Attack path
- Player connects and plays a stream, then sends
receiveVideo(false) and receiveAudio(false).
Stream.receive_video / receive_audio are set to false in handle_command.
- Live relay:
conn_will_receive_relay_frame() only gates FrameType::Audio and FrameType::Video; FrameType::Script / FrameType::Metadata always pass.
- Init-cache replay: metadata is sent unconditionally before the
receive_video / receive_audio checks.
Impact
Bandwidth and CPU amplification against players that opted out of A/V. A publisher can push multi-megabyte script/metadata frames to every player on the route regardless of their receiveAudio/receiveVideo settings.
Location
src/server/mod.rs
Remediation
Gate Script/Metadata relay (live and init-cache replay) when both receive_audio and receive_video are false, consistent with the intent of the receive toggles.
Summary
A publisher can flood Script/Metadata frames to players who explicitly disabled audio and video via
receiveAudio(false)/receiveVideo(false).Attacker
Any RTMP publisher authorized (or unauthenticated on the built-in relay) for a route.
Controlled input
RTMP_MSG_AMF0_DATA/ Script frames (onMetaData, @setDataFrame, etc.), up toDEFAULT_MAX_MSG_LENGTH(4 MiB) per message.Attack path
receiveVideo(false)andreceiveAudio(false).Stream.receive_video/receive_audioare set to false inhandle_command.conn_will_receive_relay_frame()only gatesFrameType::AudioandFrameType::Video;FrameType::Script/FrameType::Metadataalways pass.receive_video/receive_audiochecks.Impact
Bandwidth and CPU amplification against players that opted out of A/V. A publisher can push multi-megabyte script/metadata frames to every player on the route regardless of their
receiveAudio/receiveVideosettings.Location
src/server/mod.rsRemediation
Gate Script/Metadata relay (live and init-cache replay) when both
receive_audioandreceive_videoare false, consistent with the intent of the receive toggles.