Socket’s Threat Research Team uncovered 13 malicious Composer theme packages on Packagist that inject JavaScript into Vietnamese streaming sites and, on iPhones, deliver a multi-stage exploit chain that ends in spyware and wallet theft. The campaign spans five vendor namespaces, uses FUNNULL-backed infrastructure, and includes the redeployment of fresh loaders and payloads to target unpatched iOS devices. #OphimCMS #KKPhim #FUNNULL #Packagist #Apple #WebKit

Keypoints

  • Socket identified 13 malicious Composer theme packages across five vendor namespaces on Packagist.
  • The packages inject JavaScript into every page of Vietnamese movie and comic streaming sites that install them.
  • One branch targets mobile users with ad-fraud and gambling redirects, while another targets iPhones with a WebKit-to-kernel exploit chain.
  • The iOS chain stages version-specific WebKit exploits, a GPU-process pivot, and a kernel escape to deploy spyware.
  • The final payload exfiltrates keychain data, Wi-Fi passwords, SMS, Photos, cookies, and other sensitive records, then later added crypto-wallet seed and mnemonic theft.
  • Apple confirmed the kernel escape was already fixed in iOS and macOS 26.1, while the WebKit entry points are public and listed in CISA’s Known Exploited Vulnerabilities catalog.
  • The operators redeployed the chain with fresh filenames on 2026-08-12 and rotated the second-stage loader again on 2026-08-17.

MITRE Techniques

  • [T1195.001 ] Supply Chain Compromise: Compromise Software Dependencies and Development Tools – Malicious theme packages were published as trojanized Composer dependencies and installed by site operators (‘malicious Composer theme packages on Packagist’ / ‘A site operator installs a core package plus a theme with composer require’).
  • [T1608.001 ] Stage Capabilities: Upload Malware – The theme packages shipped staged loaders, second-stage JavaScript, and the final spyware payload (‘It pulls a second stage from FUNNULL infrastructure’ / ‘the final payload uses the kernel read’).
  • [T1608.004 ] Stage Capabilities: Drive-by Target – The injected code activated based on visitor platform and referrer, serving payloads to mobile visitors (‘loaders gate on platform and referrer so that mobile visitors are targeted’).
  • [T1102 ] Web Service – The npm/Packagist-style hosted infrastructure and remote domains were used as a delivery and dead-drop mechanism (‘npm registry as a dead-drop resolver’ / ‘pulls a second stage from FUNNULL infrastructure’).
  • [T1189 ] Drive-by Compromise – Visitors to compromised sites were automatically hit with malicious JavaScript and exploit stages (‘inject JavaScript into every page’ / ‘loading a page in mobile Safari’).
  • [T1203 ] Exploitation for Client Execution – The browser-based WebKit chain achieved code execution in the client context (‘weaponizes two WebKit vulnerabilities’ / ‘builds arbitrary read and write inside the WebContent renderer’).
  • [T1068 ] Exploitation for Privilege Escalation – The chain escaped the browser sandbox and reached the kernel through a driver interface (‘A second stage reaches the kernel’ / ‘The kernel escape was already addressed’).
  • [T1027 ] Obfuscated Files or Information – Multiple payloads and loaders were disguised with renamed scripts, custom base64 decoding, and encoded PHP bytecode (‘custom base64 decoder’ / ‘ionCube-encrypted PHP bytecode’).
  • [T1140 ] Deobfuscate/Decode Files or Information – The loader decoded a base64-encoded second-stage URL before inserting it as a script (‘the base64 argument decodes to union[.]macoms[.]la/jquery.min-3.6.8.js’).
  • [T1480 ] Execution Guardrails – The malware checked user agent, platform, and referrer to restrict execution to intended targets (‘Gates on platform and referrer’ / ‘matches iPhone, iPod, Android, or iOS’).
  • [T1497 ] Virtualization/Sandbox Evasion – The exploit chain used sandbox pivoting and non-desktop checks to bypass restricted environments (‘pivoting through a mediaplaybackd XPC service’ / ‘if … not Mac|Win … and … document.referrer’).
  • [T1552.001 ] Unsecured Credentials: Credentials in Files – The spyware stole stored credentials and wallet material from the device and keychain (‘collect keychain databases, Wi-Fi passwords … wallet material’).
  • [T1041 ] Exfiltration Over C2 Channel – Stolen data was encrypted and uploaded to command-and-control domains (‘uploads them over HTTPS POST /upload to a rotating pool of command and control domains’).
  • [T1071.001 ] Application Layer Protocol: Web Protocols – Exfiltration and beacons used HTTPS and web requests (‘beacons exploitation progress’ / ‘uploads them over HTTPS POST /upload’).

Indicators of Compromise

  • [Packagist package names ] malicious theme packages and vendor namespaces – vsmov/theme-dy, vsphim/theme-heovl, ophimcms/theme-motchill, and 2 more packages
  • [Committer emails ] source account identities tied to the campaign – clemenciajohn74@gmail[.]com, dev.cuongnguyen@gmail[.]com, and 3 more emails
  • [Domains ] delivery, exploit, and C2 infrastructure – union[.]macoms[.]la, www[.]cloudfareintcdn[.]com, and other 18 domains
  • [IP addresses and host:port ] gambling redirect and ad-fraud chain – 23[.]225[.]52[.]67:4466, 23[.]225[.]48[.]20:4466, and 1 more host
  • [File names ] exploit stages and payloads – start-view.html, tt4g37f36gdd7q7kdc.js, and other 5 files
  • [SHA-256 hashes ] exploit stage file hashes – 60b6771958cb7e553994ba6752f108575ba70e02d24affb51d8936a17eb0bf5ea, d9530e8cd79ac7b3d02b04e05426653afca7075fcf7424eec4d59c6e95745933a84, and other 5 hashes
  • [AES key / channel identifier ] crypto-wallet spyware configuration – 9_X1M=<;5, 22c75b2ee026dbbf7001cfdc2bb47855
  • [Network beacon path ] exploitation status reporting endpoint – cloudfareintcdn[.]com/wd-status.html


Read more: https://socket.dev/blog/packagist-themes-ios-spyware