CVE-2021-30661
High · 8.8 CISA KEVCVSS
8.8
EPSS
4.5%
Published
Sep 8, 2021
CISA due date
Nov 17, 2021
Cloudanix analysis
Opening a malicious webpage on an unpatched Apple device could let an attacker take control of the browser and potentially compromise the device.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Application
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2021-30661 is a WebKit use-after-free vulnerability in Apple platforms. When Safari or another WebKit-based application processes maliciously crafted web content, memory that has already been freed can be reused in an unsafe way, allowing attacker-controlled code execution in the context of the browser content process. Successful exploitation can expose browser data and may be chained with sandbox escape or privilege escalation vulnerabilities to achieve broader device compromise.
Why it matters to the business
This vulnerability affects widely deployed Apple devices and browsers, including Safari, iOS, iPadOS, macOS, watchOS, and tvOS. Because Apple reported active exploitation and the vulnerability is listed in CISA KEV with a remediation due date of 2021-11-17, unpatched systems should be treated as high-risk even though the current EPSS score is modest and stable. Business consequences can include compromise of executive or employee devices, theft of sensitive communications or credentials, surveillance, unauthorized access to business applications, incident response costs, and regulatory exposure. No ransomware use is indicated in the supplied data.
How an attack unfolds
An attacker hosts or delivers malicious web content that triggers the WebKit memory-management flaw. A target must interact with the content, typically by visiting a malicious site, opening a link, viewing embedded web content, or using an application that renders attacker-controlled content through WebKit. The crafted content causes a use-after-free condition, corrupting memory and allowing attacker-controlled code to run inside the WebKit content process. In real-world campaigns, including activity associated with Candiru / SOURGUM / DevilsTongue, browser code execution vulnerabilities like this are commonly paired with additional exploits to escape the browser sandbox, install spyware, collect data, and maintain access. Without a follow-on sandbox escape, impact may be constrained to the browser process, but the flaw still creates a serious remote code execution foothold.
How to fix it
Upgrade affected Apple software to a fixed or later version: Safari 14.1 or later; iOS 12.5.3 or later for supported older devices; iOS 14.5 or later; iPadOS 14.5 or later; watchOS 7.4 or later; tvOS 14.5 or later; and macOS Big Sur 11.3 or later. Where possible, upgrade to the latest supported Apple OS release rather than only the first fixed version, because later releases include additional WebKit and platform hardening. Enforce updates through MDM or endpoint management, prioritize high-risk users and internet-facing browser use cases, and retire devices that cannot receive security updates. As interim mitigations, restrict access to untrusted websites, disable or limit risky browser content where operationally feasible, reduce exposure to unsolicited links, and use network filtering; these mitigations should not be considered substitutes for patching.
How to confirm the fix worked
Confirm exposure by inventorying Apple OS and Safari versions across managed devices. Verify macOS version with system inventory, MDM, or `sw_vers`, and verify Safari version from application inventory or managed software reporting. Confirm iOS/iPadOS/watchOS/tvOS versions through MDM device inventory. Systems should meet or exceed Safari 14.1, iOS 12.5.3, iOS/iPadOS 14.5, watchOS 7.4, tvOS 14.5, and macOS Big Sur 11.3, or preferably run the latest supported versions. Validate that update policies successfully installed the patches, that no vulnerable devices remain in exception groups, and that devices unable to update are isolated, replaced, or removed from sensitive workflows.
Typical attack path
- Identify targets using vulnerable Apple platforms or Safari/WebKit versions.
- Deliver a malicious link, compromised website, watering-hole page, advertisement, message, or embedded web view content to the target.
- The target opens or previews the malicious web content, satisfying the required user interaction.
- WebKit processes the crafted content and triggers the use-after-free condition.
- The exploit achieves code execution in the browser or WebKit content process.
- The attacker optionally chains a sandbox escape or privilege escalation exploit to gain broader device control.
- The attacker deploys spyware, steals browser/session data, accesses files or communications, or performs follow-on activity.
- The attacker attempts to evade detection by minimizing artifacts, using encrypted command-and-control, and cleaning transient exploit traces.
How to detect it
Because exploitation occurs through browser memory corruption, reliable host indicators may be sparse, especially on iOS and iPadOS. Review Apple Unified Logs, Safari/WebKit crash reports, mobile analytics logs, MDM security telemetry, EDR events, DNS logs, proxy logs, secure web gateway logs, and firewall records. Look for WebKit or Safari crashes such as EXC_BAD_ACCESS or KERN_INVALID_ADDRESS occurring immediately after visits to unfamiliar domains, shortened links, messaging links, or compromised sites. Correlate those events with signs of follow-on compromise: unexpected child processes on macOS, suspicious persistence, unknown configuration profiles, new certificates, unusual VPN/proxy settings, abnormal outbound connections, credential prompts, browser data access, or spyware-like behavior. For iOS/iPadOS, collect sysdiagnose or device analytics where feasible and compare network activity before and after suspected exploitation. Threat hunting should include campaign intelligence associated with Candiru / SOURGUM / DevilsTongue, but absence of known infrastructure does not rule out exploitation because exploit delivery infrastructure may be short-lived and targeted.
What your security team should do
- Treat unpatched affected Apple devices as urgent because the vulnerability is KEV-listed and was actively exploited in the wild.
- Prioritize patching for executives, administrators, developers, legal/finance staff, journalists, and other high-value users who are more likely to be targeted by spyware campaigns.
- Use MDM or endpoint management to enforce minimum OS and Safari versions and block access from noncompliant devices where possible.
- Hunt historical web, DNS, proxy, EDR, and Apple crash/analytics logs for suspicious browsing activity and WebKit crashes around the time of unusual device behavior.
- Review devices used by high-risk users for spyware-like activity, unknown configuration profiles, suspicious VPN/proxy settings, unexpected certificates, and anomalous outbound network connections.
- Monitor threat intelligence for Candiru / SOURGUM / DevilsTongue infrastructure or campaign indicators and correlate any matches with Apple device activity.
- Educate users to avoid unsolicited links and unexpected web previews, especially in messaging, email, and social platforms, while emphasizing that user training is not a replacement for patching.
- Retire or restrict devices that cannot be upgraded to fixed versions.
The record
A use after free issue was addressed with improved memory management. This issue is fixed in Safari 14.1, iOS 12.5.3, iOS 14.5 and iPadOS 14.5, watchOS 7.4, tvOS 14.5, macOS Big Sur 11.3. Processing maliciously crafted web content may lead to arbitrary code execution. Apple is aware of a report that this issue may have been actively exploited..
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:10 | webkit2gtk | 0 | 2.30.3-1~deb10u1 |
| Debian:11 | webkit2gtk | 0 | 2.30.1-1 |
| Debian:11 | wpewebkit | 0 | 2.30.0-1 |
| Debian:12 | webkit2gtk | 0 | 2.30.1-1 |
| Debian:12 | wpewebkit | 0 | 2.30.0-1 |
| Debian:13 | webkit2gtk | 0 | 2.30.1-1 |
| Debian:13 | wpewebkit | 0 | 2.30.0-1 |
| Red Hat:enterprise_linux:8::appstream | gdm | 0 | 1:3.28.3-39.el8 |
| Red Hat:enterprise_linux:8::appstream | gdm-debuginfo | 0 | 1:3.28.3-39.el8 |
| Red Hat:enterprise_linux:8::appstream | gdm-debugsource | 0 | 1:3.28.3-39.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3 | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-debuginfo | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-debugsource | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-devel | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-devel-debuginfo | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-jsc | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-jsc-debuginfo | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-jsc-devel | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::appstream | webkit2gtk3-jsc-devel-debuginfo | 0 | 0:2.30.4-1.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2 | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-debugsource | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-devel | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-devel-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-doc | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-fam | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-fam-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-static | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-tests | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::baseos | glib2-tests-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2 | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-debugsource | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-devel | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-devel-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-doc | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-fam | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-fam-debuginfo | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-static | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-tests | 0 | 0:2.56.4-9.el8 |
| Red Hat:enterprise_linux:8::crb | glib2-tests-debuginfo | 0 | 0:2.56.4-9.el8 |
| Rocky Linux:8 | OpenEXR | 0 | 0:2.2.0-12.el8 |
| Rocky Linux:8 | accountsservice | 0 | 0:0.6.55-1.el8 |
| Rocky Linux:8 | atkmm | 0 | 0:2.24.2-7.el8 |
| Rocky Linux:8 | cairomm | 0 | 0:1.12.0-8.el8 |
| Rocky Linux:8 | chrome-gnome-shell | 0 | 0:10.1-7.el8 |
| Rocky Linux:8 | dleyna-core | 0 | 0:0.6.0-3.el8 |
| Rocky Linux:8 | dleyna-server | 0 | 0:0.6.0-3.el8 |
| Rocky Linux:8 | enchant2 | 0 | 0:2.2.3-3.el8 |
| Rocky Linux:8 | gamin | 0 | 0:0.1.10-32.el8 |
| Rocky Linux:8 | gdm | 0 | 1:3.28.3-39.el8 |
| Rocky Linux:8 | geoclue2 | 0 | 0:2.5.5-2.el8 |
| Rocky Linux:8 | geocode-glib | 0 | 0:3.26.0-3.el8 |
| Rocky Linux:8 | gjs | 0 | 0:1.56.2-5.el8 |
| Rocky Linux:8 | glibmm24 | 0 | 0:2.56.0-2.el8 |
| Rocky Linux:8 | gnome-boxes | 0 | 0:3.36.5-8.el8 |
| Rocky Linux:8 | gnome-control-center | 0 | 0:3.28.2-27.el8 |
| Rocky Linux:8 | gnome-online-accounts | 0 | 0:3.28.2-2.el8 |
| Rocky Linux:8 | gnome-photos | 0 | 0:3.28.1-4.el8 |
| Rocky Linux:8 | gnome-settings-daemon | 0 | 0:3.32.0-14.el8 |
| Rocky Linux:8 | gnome-shell | 0 | 0:3.32.2-30.el8 |
| Rocky Linux:8 | gnome-software | 0 | 0:3.36.1-5.el8 |
| Rocky Linux:8 | gnome-terminal | 0 | 0:3.28.3-3.el8 |
| Rocky Linux:8 | gtk-doc | 0 | 0:1.28-3.el8 |
| Rocky Linux:8 | gtk2 | 0 | 0:2.24.32-5.el8 |
| Rocky Linux:8 | gtkmm24 | 0 | 0:2.24.5-6.el8 |
| Rocky Linux:8 | gtkmm30 | 0 | 0:3.22.2-3.el8 |
| Rocky Linux:8 | gvfs | 0 | 0:1.36.2-11.el8 |
| Rocky Linux:8 | libdazzle | 0 | 0:3.28.5-2.el8 |
| Rocky Linux:8 | libepubgen | 0 | 0:0.1.0-3.el8 |
| Rocky Linux:8 | libsass | 0 | 0:3.4.5-6.el8 |
| Rocky Linux:8 | libsigc++20 | 0 | 0:2.10.0-6.el8 |
| Rocky Linux:8 | libvisual | 0 | 1:0.4.0-25.el8 |
| Rocky Linux:8 | mutter | 0 | 0:3.32.2-57.el8 |
| Rocky Linux:8 | nautilus | 0 | 0:3.28.1-15.el8 |
| Rocky Linux:8 | pangomm | 0 | 0:2.40.1-6.el8 |
| Rocky Linux:8 | soundtouch | 0 | 0:2.0.0-3.el8 |
| Rocky Linux:8 | vala | 0 | 0:0.40.19-2.el8 |
| Rocky Linux:8 | webkit2gtk3 | 0 | 0:2.30.4-1.el8 |
| Rocky Linux:8 | woff2 | 0 | 0:1.0.2-5.el8 |
| SUSE:Enterprise Storage 6 | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Enterprise Storage 7 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:HPE Helion OpenStack 8 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP1-ESPOS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP1-LTSS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP2-ESPOS | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise High Performance Computing 15 SP2-LTSS | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise High Performance Computing 15-ESPOS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise High Performance Computing 15-LTSS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP3 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP3 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Real Time 15 SP2 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Server 12 SP2-BCL | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server 12 SP3-BCL | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server 12 SP3-LTSS | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server 12 SP4-LTSS | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server 12 SP5 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server 15 SP1-BCL | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Server 15 SP1-LTSS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Server 15 SP2-BCL | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Server 15 SP2-LTSS | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Server 15-LTSS | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP3 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP4 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP5 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP1 | webkit2gtk3 | 0 | 2.34.3-3.92.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP2 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Linux Enterprise Software Development Kit 12 SP5 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:Manager Proxy 4.1 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Manager Retail Branch Server 4.1 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:Manager Server 4.1 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| SUSE:OpenStack Cloud 8 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:OpenStack Cloud 9 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:OpenStack Cloud Crowbar 8 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| SUSE:OpenStack Cloud Crowbar 9 | webkit2gtk3 | 0 | 2.34.3-2.82.1 |
| Ubuntu:16.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:16.04:LTS | qtwebkit-source | 0 | No fix |
| Ubuntu:16.04:LTS | webkit2gtk | 0 | No fix |
| Ubuntu:16.04:LTS | webkitgtk | 0 | No fix |
| Ubuntu:18.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:18.04:LTS | qtwebkit-source | 0 | No fix |
| Ubuntu:18.04:LTS | webkit2gtk | 0 | 2.30.3-0ubuntu0.18.04.1 |
| Ubuntu:18.04:LTS | webkitgtk | 0 | No fix |
| Ubuntu:20.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:20.04:LTS | webkit2gtk | 0 | 2.30.3-0ubuntu0.20.04.1 |
| Ubuntu:20.04:LTS | wpewebkit | 0 | No fix |
| Ubuntu:22.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:22.04:LTS | wpewebkit | 0 | No fix |
| Ubuntu:24.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | qtwebkit-source | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | webkit2gtk | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | webkitgtk | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | qtwebkit-source | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | webkitgtk | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | wpewebkit | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | wpewebkit | 0 | No fix |
| Ubuntu:Pro:24.04:LTS | qtwebkit-opensource-src | 0 | No fix |
| openSUSE:Leap 15.3 | webkit2gtk3 | 0 | 2.34.3-23.3 |
| openSUSE:Tumbleweed | gtk3 | 0 | 2.32.4-1.1 |
Related vulnerabilities
- CVE-2024-27834 The issue was addressed with improved checks. Also affects webkit2gtk
- CVE-2024-23280 An injection issue was addressed with improved validation. Also affects webkit2gtk
- CVE-2024-23284 A logic issue was addressed with improved state management. Also affects webkit2gtk
- CVE-2024-23263 A logic issue was addressed with improved validation. Also affects webkit2gtk
- CVE-2024-23254 The issue was addressed with improved UI handling. Also affects webkit2gtk
- CVE-2024-23213 The issue was addressed with improved memory handling. Also affects webkit2gtk
- CVE-2024-23222 A type confusion issue was addressed with improved checks. Also affects webkit2gtk
- CVE-2024-23206 An access issue was addressed with improved access restrictions. Also affects webkit2gtk