cbcvebase.
CVE-2019-8518
published 2019-12-18

CVE-2019-8518: Multiple memory corruption issues were addressed with improved memory handling. This issue is fixed in iOS 12.2, tvOS 12.2, watchOS 5.2, Safari 12.1, iTunes…

PriorityP265high8.8CVSS 3.1
AVNACLPRNUIRSUCHIHAH
EXPLOIT
EPSS
10.50%
95.3th percentile
Multiple memory corruption issues were addressed with improved memory handling. This issue is fixed in iOS 12.2, tvOS 12.2, watchOS 5.2, Safari 12.1, iTunes 12.9.4 for Windows, iCloud for Windows 7.11. Processing maliciously crafted web content may lead to arbitrary code execution.

Affected

19 ranges
VendorProductVersion rangeFixed in
appleicloud< 7.117.11
appleicloud_for_windows
appleicloud_for_windows>= unspecified < iCloud for Windows 7.11iCloud for Windows 7.11
appleios
appleios>= unspecified < iOS 12.2iOS 12.2
appleiphone_os< 12.212.2
appleitunes< 12.9.412.9.4
appleitunes_12.9.4_for_windows
appleitunes_for_windows>= unspecified < iTunes 12.9.4 for WindowsiTunes 12.9.4 for Windows
applesafari< 12.112.1
applesafari
applesafari>= unspecified < Safari 12.1Safari 12.1
appletvos< 12.212.2
appletvos
appletvos>= unspecified < tvOS 12.2tvOS 12.2
applewatchos< 5.25.2
applewatchos
applewatchos>= unspecified < watchOS 5.2watchOS 5.2
debianwebkit2gtk< webkit2gtk 2.24.1-1 (bookworm)webkit2gtk 2.24.1-1 (bookworm)

Detection & IOCsextracted from sources · hover to see the quote

command--thresholdForFTLOptimizeAfterWarmUp=1000
  • The PoC JavaScript triggers the vulnerability by using a large negative array index (-698666199) inside a for-in loop combined with a property store (v8.a = 42) to force a CheckStructure node, causing LICM in the FTL JIT to hoist an unchecked GetByVal out-of-bounds access before the loop header. Detect JavaScript payloads using large negative numeric property accesses on arrays within loops.
  • The vulnerability requires the FTL JIT compilation tier to be reached. The PoC uses a `while(true)` loop calling the vulnerable function repeatedly to accumulate JIT tier-up counts. Monitoring for tight infinite loops invoking functions with negative array index accesses may indicate exploitation attempts.
  • The exploit requires a property store inside the loop (e.g., v8.a = 42) to force insertion of a CheckStructure node, which is a prerequisite for LICM to hoist the GetByVal. Detection rules should look for the combination of in-loop property assignment and negative-index array access on the same object.
  • The crash occurs in the JavaScriptCore FTL JIT component (/System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc on macOS). Crash reports or process crashes originating from this binary path may indicate exploitation of this CVE.
  • The root cause is LICM (Loop-Invariant Code Motion) in DFG/FTL JIT moving a GetByVal node before its corresponding CheckBounds node. The safeToExecute function in DFGSafeToExecute.h incorrectly permits hoisting. Audit or instrument this code path for anomalous memory accesses far before the array element vector.
  • ·The PoC as published requires the JSC runtime flag --thresholdForFTLOptimizeAfterWarmUp=1000 to reliably trigger the bug. The author notes a modified version can crash with the default threshold, meaning real-world exploits may not require this flag.
  • ·The invocations of the vulnerable function with a non-array argument (integer 1337) are structurally necessary to prevent early JIT tier bailouts, which would block FTL compilation. A weaponized exploit may use different non-array argument values to achieve the same effect.

CVSS provenance

nvdv3.18.8HIGHCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
nvdv2.09.3CRITICALAV:N/AC:M/Au:N/C:C/I:C/A:C
osv8.8HIGH
vendor_debian8.8HIGH
vendor_redhat8.8HIGH
CVEs like this are exactly what “Exploited This Week” covers.

Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.