CVE-2024-47607
Critical · 9.8CVSS
9.8
EPSS
1.2%
Published
Dec 12, 2024
CISA due date
—
Cloudanix analysis
A bug in a popular media-handling library can let attackers take over systems that process specially crafted audio files.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Full Compromise
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Stack-based buffer overflow in gst_opus_dec_parse_header allows an attacker-supplied n_channels value greater than 64 to overwrite adjacent stack memory including the saved instruction pointer with GST_AUDIO_CHANNEL_POSITION_NONE values.
Why it matters to the business
Media-processing applications built on GStreamer can be crashed or used to execute attacker-controlled code when they decode untrusted Opus audio, potentially leading to service outages or full host compromise in pipelines that handle user-supplied media.
How an attack unfolds
An attacker supplies a crafted Opus stream whose header declares more than 64 channels; the vulnerable parse loop writes beyond the 64-byte pos array on the stack, corrupting the return address and allowing control-flow hijacking when the function returns.
How to fix it
Upgrade GStreamer to version 1.24.10 or apply commit 5be4b6f03689ab438822f6cfcd13f1f300afe203; rebuild and redeploy all dependent applications against the patched library.
How to confirm the fix worked
Confirm the installed GStreamer package reports version 1.24.10 or later; run unit tests with an Opus header containing n_channels=65 and verify the process no longer crashes or exhibits memory corruption.
Typical attack path
- Attacker creates or mutates an Opus file or stream with n_channels > 64
- Target application feeds the stream to a GStreamer pipeline containing the Opus decoder
- gst_opus_dec_parse_header is invoked during header parsing
- The loop writes GST_AUDIO_CHANNEL_POSITION_NONE past the end of the stack-allocated pos buffer
- Saved return address is overwritten, execution is redirected on function return
How to detect it
Monitor application and system logs for segmentation faults or crashes inside libgstreamer or gstopusdec during Opus decoding; inspect core dumps for overwritten stack frames near gst_opus_dec_parse_header; correlate with inbound media uploads containing Opus streams.
What your security team should do
- Immediately update GStreamer to the fixed version in all build and deployment pipelines
- Inventory applications that link against libgstreamer and schedule emergency patches
- Add GStreamer version checks to continuous-integration and container-scanning processes
- Block or sanitize untrusted Opus streams at ingestion points until patches are applied
The record
GStreamer is a library for constructing graphs of media-handling components. stack-buffer overflow has been detected in the gst_opus_dec_parse_header function within `gstopusdec.c'. The pos array is a stack-allocated buffer of size 64. If n_channels exceeds 64, the for loop will write beyond the boundaries of the pos array. The value written will always be GST_AUDIO_CHANNEL_POSITION_NONE. This bug allows to overwrite the EIP address allocated in the stack. This vulnerability is fixed in 1.24.10.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | gstreamer1-plugins-base | 0 | 1.16.1-5.el8_10 |
| AlmaLinux:8 | gstreamer1-plugins-base-devel | 0 | 1.16.1-5.el8_10 |
| AlmaLinux:9 | gstreamer1-plugins-base | 0 | 1.22.1-3.el9_5 |
| AlmaLinux:9 | gstreamer1-plugins-base-devel | 0 | 1.22.1-3.el9_5 |
| AlmaLinux:9 | gstreamer1-plugins-base-tools | 0 | 1.22.1-3.el9_5 |
| Alpine:v3.20 | gst-plugins-base | 0 | 1.24.10-r0 |
| Alpine:v3.21 | gst-plugins-base | 0 | 1.24.10-r0 |
| Alpine:v3.22 | gst-plugins-base | 0 | 1.24.10-r0 |
| Debian:11 | gst-plugins-base1.0 | 0 | 1.18.4-2+deb11u3 |
| Debian:12 | gst-plugins-base1.0 | 0 | 1.22.0-3+deb12u3 |
| Debian:13 | gst-plugins-base1.0 | 0 | 1.24.10-1 |
| Debian:14 | gst-plugins-base1.0 | 0 | 1.24.10-1 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:8::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-5.el8_10 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base-tools | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:enterprise_linux:9::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.22.1-3.el9_5 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.2::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-2.el8_2 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.4::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_aus:8.6::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.4::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:8.6::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-base | 0 | 0:1.18.4-7.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.18.4-7.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.18.4-7.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.18.4-7.el9_0 |
| Red Hat:rhel_e4s:9.0::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.18.4-7.el9_0 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-base | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-base-debuginfo | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-base-devel | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-base-devel-docs | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-base-tools | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-good | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_els:7 | gstreamer1-plugins-good-debuginfo | 0 | 0:1.10.4-3.el7_9 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_8 |
| Red Hat:rhel_eus:8.8::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_8 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base-tools | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.2::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.18.4-7.el9_2 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base-tools | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_eus:9.4::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.22.1-3.el9_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.4::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_4 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-base | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-base-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-base-debugsource | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-base-devel | 0 | 0:1.16.1-3.el8_6 |
| Red Hat:rhel_tus:8.6::appstream | gstreamer1-plugins-base-tools-debuginfo | 0 | 0:1.16.1-3.el8_6 |
| Rocky Linux:8 | gstreamer1-plugins-base | 0 | 0:1.16.1-5.el8_10 |
| Rocky Linux:9 | gstreamer1-plugins-base | 0 | 0:1.22.1-3.el9_5 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | gstreamer-plugins-base | 0 | 1.22.0-150500.3.11.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | gstreamer-plugins-base | 0 | 1.22.0-150500.3.11.1 |
| SUSE:Linux Enterprise Micro 5.3 | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise Micro 5.4 | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise Micro 5.5 | gstreamer-plugins-base | 0 | 1.22.0-150500.3.11.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | gstreamer-plugins-base | 0 | 1.24.0-150600.3.8.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | gstreamer-plugins-base | 0 | 1.24.0-150600.3.8.1 |
| SUSE:Linux Enterprise Server 12 SP5-LTSS | gstreamer-plugins-base | 0 | 1.8.3-13.18.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | gstreamer-plugins-base | 0 | 1.22.0-150500.3.11.1 |
| SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 | gstreamer-plugins-base | 0 | 1.8.3-13.18.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | gstreamer-plugins-base | 0 | 1.22.0-150500.3.11.1 |
| SUSE:Manager Proxy 4.3 | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| SUSE:Manager Server 4.3 | gstreamer-plugins-base | 0 | 1.20.1-150400.3.11.1 |
| Ubuntu:16.04:LTS | gst-plugins-base0.10 | 0 | No fix |
| Ubuntu:20.04:LTS | gst-plugins-base1.0 | 0 | 1.16.3-0ubuntu1.4 |
| Ubuntu:22.04:LTS | gst-plugins-base1.0 | 0 | 1.20.1-1ubuntu0.4 |
| Ubuntu:24.04:LTS | gst-plugins-base1.0 | 0 | 1.24.2-1ubuntu0.2 |
| Ubuntu:24.10 | gst-plugins-base1.0 | 0 | 1.24.8-1ubuntu0.1 |
| Ubuntu:Pro:16.04:LTS | gst-plugins-base0.10 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | gst-plugins-base1.0 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | gst-plugins-base1.0 | 0 | 1.8.3-1ubuntu0.3+esm2 |
| Ubuntu:Pro:18.04:LTS | gst-plugins-base1.0 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | gst-plugins-base1.0 | 0 | 1.14.5-0ubuntu1~18.04.3+esm1 |
| openSUSE:Leap 15.6 | gstreamer-plugins-base | 0 | 1.24.0-150600.3.8.1 |
| openSUSE:Tumbleweed | gstreamer-plugins-base | 0 | 1.24.11-1.1 |
Related vulnerabilities
- CVE-2024-47615 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-47538 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-4453 GStreamer EXIF Metadata Parsing Integer Overflow Remote Code Execution Vulnerability. Also affects gstreamer1-plugins-base
- CVE-2023-37328 GStreamer PGS File Parsing Heap-based Buffer Overflow Remote Code Execution Vulnerability. Also affects gstreamer1-plugins-base
- CVE-2024-47835 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-47600 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-47541 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-47542 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base