CVE-2024-47538
Critical · 9.8CVSS
9.8
EPSS
1.3%
Published
Dec 12, 2024
CISA due date
—
Cloudanix analysis
A bug in a widely used media library can let attackers take over systems by sending specially made 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 buffer overflow in vorbis_handle_identification_packet allows writing beyond a 64-element position array when channels exceed 64, overwriting the return address (EIP) and GstAudioInfo structure with GST_AUDIO_CHANNEL_POSITION_NONE values.
Why it matters to the business
Applications using GStreamer for media playback or processing can be crashed or have arbitrary code executed when handling crafted Vorbis streams, leading to service disruption or full system compromise in media pipelines.
How an attack unfolds
An attacker supplies a specially crafted Vorbis identification packet containing more than 64 audio channels; during decoding the loop writes outside the stack-allocated position buffer, corrupting the saved return address and enabling control-flow hijacking or structure overwrite.
How to fix it
Upgrade GStreamer to version 1.24.10 or apply commit 5be4b6f03689ab438822f6cfcd13f1f300afe203 in the GIT repository; rebuild and redeploy affected applications.
How to confirm the fix worked
Confirm installed GStreamer version is 1.24.10 or later; test with a Vorbis stream containing 65+ channels and verify absence of crashes or unexpected memory writes.
Typical attack path
- Craft malicious Vorbis stream with vd->vi.channels > 64
- Deliver stream to target application using GStreamer vorbisdec
- Trigger identification packet handling to cause out-of-bounds write
- Overwrite EIP or GstAudioInfo to achieve code execution or crash
How to detect it
Monitor application logs and crash reports for segmentation faults or memory corruption signals during Vorbis decoding; inspect process memory dumps for overwritten position arrays or corrupted GstAudioInfo structures.
What your security team should do
- Immediately update all GStreamer installations to the fixed version
- Scan media-processing pipelines for use of vorbisdec and prioritize patching
- Implement input validation or sandboxing around untrusted media streams until patched
The record
GStreamer is a library for constructing graphs of media-handling components. A stack-buffer overflow has been detected in the `vorbis_handle_identification_packet` function within `gstvorbisdec.c`. The position array is a stack-allocated buffer of size 64. If vd->vi.channels exceeds 64, the for loop will write beyond the boundaries of the position array. The value written will always be `GST_AUDIO_CHANNEL_POSITION_NONE`. This vulnerability allows someone to overwrite the EIP address allocated in the stack. Additionally, this bug can overwrite the `GstAudioInfo` info structure. 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 |
| 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-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.10-2.1 |
Related vulnerabilities
- CVE-2024-47607 GStreamer is a library for constructing graphs of media-handling components. Also affects gstreamer1-plugins-base
- CVE-2024-47615 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