CVE-2024-47539
Critical · 9.8CVSS
9.8
EPSS
1.3%
Published
Dec 12, 2024
CISA due date
—
Cloudanix analysis
A bug in a popular media-processing library lets attackers potentially take control of systems simply by supplying a specially made video file.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Out-of-bounds write of up to three bytes in the convert_to_s334_1a function inside isomp4/qtdemux.c caused by a mismatch between allocated storage size and the loop condition i*2 < ccpair_size when ccpair_size is even.
Why it matters to the business
Applications that parse untrusted MP4 files using GStreamer can crash or execute attacker-controlled code, leading to service outages, data breaches, or full system compromise in media pipelines and downstream products.
How an attack unfolds
An attacker crafts an MP4 file whose metadata triggers the vulnerable path in qtdemux during demuxing; when the file is opened by any GStreamer-based player or processor the out-of-bounds write occurs and can be leveraged for code execution.
How to fix it
Upgrade GStreamer to a build containing commit 5be4b6f03689ab438822f6cfcd13f1f300afe203 (equivalent to release 1.24.10 or newer) in all affected packages and rebuild any applications that statically link the library.
How to confirm the fix worked
Confirm the installed GStreamer version reports a commit after 5be4b6f or is at least 1.24.10; re-run unit tests that exercise qtdemux with boundary-case ccpair_size values and verify no out-of-bounds writes occur under ASAN or similar instrumentation.
Typical attack path
- Craft a malicious MP4 file that sets ccpair_size to an even value causing the size mismatch
- Deliver the file to a target system or service that uses GStreamer to parse media
- Trigger parsing of the file through normal media playback, transcoding, or streaming workflows
- Exploit the resulting out-of-bounds write to corrupt adjacent memory and gain code execution
How to detect it
Search application and system logs for segmentation faults or heap corruption messages originating from qtdemux or gst-launch processes when handling MP4 containers; inspect crash dumps for writes near the convert_to_s334_1a function.
What your security team should do
- Immediately update all GStreamer installations to the fixed commit or 1.24.10 release
- Inventory every application and container image that depends on GStreamer and schedule prioritized rebuilds
- Add GStreamer version checks to CI/CD pipelines and block deployments of vulnerable builds
- Monitor upstream advisories for any follow-on fixes in related demuxers
The record
GStreamer is a library for constructing graphs of media-handling components. An out-of-bounds write vulnerability was identified in the convert_to_s334_1a function in isomp4/qtdemux.c. The vulnerability arises due to a discrepancy between the size of memory allocated to the storage array and the loop condition i * 2 < ccpair_size. Specifically, when ccpair_size is even, the allocated size in storage does not match the loop's expected bounds, resulting in an out-of-bounds write. This bug allows for the overwriting of up to 3 bytes beyond the allocated bounds of the storage array. This vulnerability is fixed in 1.24.10.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | gstreamer1-plugins-good | 0 | 1.16.1-5.el8_10 |
| AlmaLinux:8 | gstreamer1-plugins-good-gtk | 0 | 1.16.1-5.el8_10 |
| AlmaLinux:9 | gstreamer1-plugins-good | 0 | 1.22.1-3.el9_5 |
| AlmaLinux:9 | gstreamer1-plugins-good-gtk | 0 | 1.22.1-3.el9_5 |
| Debian:11 | gst-plugins-good1.0 | 0 | No fix |
| Debian:11 | gst-plugins-good1.0 | 0 | 1.18.4-2+deb11u3 |
| Debian:12 | gst-plugins-good1.0 | 0 | 1.22.0-5+deb12u2 |
| Debian:13 | gst-plugins-good1.0 | 0 | 1.24.10-1 |
| Debian:14 | gst-plugins-good1.0 | 0 | 1.24.10-1 |
| Mageia:9 | gstreamer1.0 | 0 | 1.22.11-1.1.mga9 |
| Mageia:9 | gstreamer1.0-plugins-base | 0 | 1.22.11-1.2.mga9 |
| Mageia:9 | gstreamer1.0-plugins-good | 0 | 1.22.11-1.1.mga9 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-good-qt-debuginfo | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-good-qt-debuginfo | 0 | 0:1.18.4-6.el9_0 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-4.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-4.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-4.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-4.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-4.el8_8 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-good-qt-debuginfo | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-good-qt-debuginfo | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-good | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-good-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-good-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-good-gtk | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-good-gtk-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Rocky Linux:8 | gstreamer1-plugins-good | 0 | 0:1.16.1-5.el8_10 |
| Rocky Linux:9 | gstreamer1-plugins-good | 0 | 0:1.22.1-3.el9_5 |
| SUSE:Enterprise Storage 7.1 | gstreamer-plugins-good | 0 | 1.16.3-150200.3.17.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | gstreamer-plugins-good | 0 | 1.16.3-150200.3.17.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | gstreamer-plugins-good | 0 | 1.22.0-150500.4.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | gstreamer-plugins-good | 0 | 1.22.0-150500.4.6.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | gstreamer-plugins-good | 0 | 1.24.0-150600.3.3.1 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | gstreamer-plugins-good | 0 | 1.16.3-150200.3.17.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | gstreamer-plugins-good | 0 | 1.22.0-150500.4.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | gstreamer-plugins-good | 0 | 1.16.3-150200.3.17.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | gstreamer-plugins-good | 0 | 1.22.0-150500.4.6.1 |
| SUSE:Linux Enterprise Workstation Extension 15 SP6 | gstreamer-plugins-good | 0 | 1.24.0-150600.3.3.1 |
| SUSE:Manager Proxy 4.3 | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| SUSE:Manager Server 4.3 | gstreamer-plugins-good | 0 | 1.20.1-150400.3.9.1 |
| Ubuntu:16.04:LTS | gst-plugins-good0.10 | 0 | No fix |
| Ubuntu:20.04:LTS | gst-plugins-good1.0 | 0 | 1.16.3-0ubuntu1.3 |
| Ubuntu:22.04:LTS | gst-plugins-good1.0 | 0 | 1.20.3-0ubuntu1.3 |
| Ubuntu:24.04:LTS | gst-plugins-good1.0 | 0 | 1.24.2-1ubuntu1.1 |
| Ubuntu:24.10 | gst-plugins-good1.0 | 0 | 1.24.8-1ubuntu1.1 |
| Ubuntu:Pro:16.04:LTS | gst-plugins-good0.10 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | gst-plugins-good1.0 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | gst-plugins-good1.0 | 0 | No fix |
| openSUSE:Leap 15.6 | gstreamer-plugins-good | 0 | 1.24.0-150600.3.3.1 |
| openSUSE:Tumbleweed | gstreamer-plugins-good | 0 | 1.24.10-3.1 |
Related vulnerabilities
- CVE-2024-47606 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good
- CVE-2024-47613 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good
- CVE-2024-47540 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good
- CVE-2024-47537 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good
- CVE-2023-37327 GStreamer FLAC File Parsing Integer Overflow Remote Code Execution Vulnerability. Also affects gstreamer1-plugins-good
- CVE-2021-3497 GStreamer before 1.18.4 might access already-freed memory in error code paths when… Also affects gstreamer1-plugins-good
- CVE-2024-47834 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good
- CVE-2024-47774 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-good