Someone left the vault door open at a building nobody owns anymore, and the locksmith already welded most of them shut
CVE-2026-30612 is a supply-chain-class flaw in Time4Popcorn — an abandoned fork of the Popcorn Time BitTorrent streaming client. The updater component (Updater.exe on Windows, PT.updd on macOS) polls a set of hardcoded domains over plaintext HTTP, downloads whatever executable the server offers, and runs it with NT AUTHORITY\SYSTEM (Windows) or root (macOS) privileges — all without verifying code signatures or requiring any user interaction. The update protocol is a simple GET /?app_id=T4PSEC&hid=<hwid>&ver=<ver>&os=<os> request that returns a JSON blob pointing to an executable URL. Affected versions are Windows ≤ 6.2.1.18, macOS ≤ 6.2.1.17, and Android ≤ 3.5.0.173 (Android requires user-initiated APK install, so it's far less severe). At peak exposure Eye Security estimated ~3 million Windows and ~350,000 macOS hosts with this updater running as a persistent background service. CWE-494 (Download of Code Without Integrity Check) is the root cause.
The vendor CVSS of 9.8 CRITICAL (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) was technically accurate at the moment of discovery: an attacker who registered a single lapsed domain would get zero-click SYSTEM/root on millions of machines. But that window has been substantially closed. Eye Security's Operation IXIM (November 2025 – March 2026) registered 15 of the ~20 update domains, pushed a benign service-disabling payload to ~2 million devices, achieving a 98% reduction in update callbacks. The domains were then transferred to The Shadowserver Foundation for long-term sinkholing. What remains is a tail risk: a handful of potentially unregistered domains, ~2% of the original population still running the vulnerable updater, and the fact that this is unauthorized consumer piracy software that should never appear on a managed enterprise endpoint. For a security team managing 10,000 hosts, this is an unauthorized-software detection problem first and a CVE second. The 9.8 label dramatically overstates the residual real-world risk.
4 steps from start to impact.
Register a lapsed update domain
- At least one lapsed domain remains available for registration
- Attacker can set up HTTP infrastructure on the domain
- 15 of ~20 domains are already sinkholed by Shadowserver Foundation
- Remaining domains may already be registered by researchers or parked
- Domain registrars may flag domains previously associated with malware infrastructure
app_id=T4PSEC query parameter.Vulnerable updater phones home
Updater.exe (Windows) or PT.updd (macOS) service runs persistently in the background and periodically polls the hardcoded domains via HTTP GET with hardware ID, version, and OS type. No user interaction is required. However, 98% of previously active instances have been disabled by Operation IXIM's remediation payload.- Target host still has Time4Popcorn installed with active updater service
- Host has outbound HTTP access to the attacker-controlled domain
- 98% of active updaters were disabled by Operation IXIM between Nov 2025 – Mar 2026
- Enterprise web proxies / DNS firewalls typically block outbound HTTP to unknown .xyz/.info domains
- Software inventory or EDR policies may flag or block unauthorized applications
- This is consumer piracy software — most enterprise hosts never had it installed
Get-Service 'Update service' or osquery WHERE path LIKE '%Popcorn Time%'. macOS: launchctl list | grep updd. Network: HTTP requests containing app_id=T4PSEC.Attacker serves malicious update payload
- Updater successfully connects to attacker-controlled domain
- Attacker hosts a valid executable accessible via HTTP
- Network-level controls (IDS/IPS, proxy inspection) may detect unsigned executable downloads over HTTP
- Some endpoint protection may flag the download of unknown executables
Updater.exe child processes.Payload executes as SYSTEM/root
- Malicious executable downloaded successfully
- Updater service is running with elevated privileges
- EDR/AV may detect and block the malicious payload at execution time
- Application whitelisting (AppLocker, WDAC) would block unsigned executables spawned by the updater
- On a properly managed enterprise workstation, SYSTEM-level execution of an unknown binary should trigger alerts
Updater.exe spawning unexpected child processes. Sysmon Event ID 1 with ParentImage containing Popcorn Time. macOS: PT.updd spawning shell commands.Updater.exe in C:\Program Files (x86)\Popcorn Time\, PT.updd in /Library/PrivilegedHelperTools/, and the Popcorn Time application directory. Remove the entire application — disabling the updater alone still leaves the vulnerable 2014 Chromium engine. This is the only real fix since no vendor patch exists. Per the noisgate remediation SLA for MEDIUM, deploy within 365 days — but given the zero-effort removal, target 30 days as a hygiene win.sc.exe stop "Update service" && sc.exe config "Update service" start= disabled. macOS — sudo launchctl unload -w /Library/LaunchDaemons/PT.updd.plist. This stops the background polling. Note: the application's embedded Chromium vulnerabilities remain, so this is NOT a substitute for full removal.app_id=T4PSEC in query parameters. This provides detection coverage for both the updater callback and any MITM attempts. Use this as a discovery mechanism to find hosts that still have the software installed.- Patching / upgrading the application — no patch exists and the project is completely abandoned. There is no vendor, no support channel, and no fixed version. Removal is the only remediation path.
- Antivirus signature-based detection alone — the updater (
Updater.exe,PT.updd) is a legitimate application component, not malware. Most AV engines will not flag it. You need software inventory or custom EDR detection rules, not signature scans. - Application whitelisting without removal — while AppLocker/WDAC would block unsigned payloads spawned by the updater, the updater service itself would continue polling and consuming network resources. The 2014 Chromium engine remains a separate attack surface that whitelisting doesn't address.
The supporting signals.
| In-the-Wild Exploitation | No confirmed malicious exploitation. Eye Security discovered the vulnerability during a threat hunt at a client site in late 2025. No threat actor is known to have registered the domains before Eye Security did. The flaw was disclosed responsibly and remediated proactively via Operation IXIM. |
|---|---|
| KEV Status | Not listed in CISA KEV as of 2026-10-26. |
| EPSS | 0.00424 — very low exploitation probability, placing this well below the 95th percentile. Consistent with the consumer-software profile and lack of in-the-wild exploitation. |
| Proof of Concept | Functional PoC exists. Eye Security researchers demonstrated arbitrary code execution (calc.exe) via the updater mechanism and separately via the app's 2014-era Chromium engine with disabled sandbox. The Operation IXIM remediation payload itself is effectively a weaponized PoC (benign). No public exploit code found on pocindex.io, ExploitDB, or GitHub as of 2026-10-26. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). The vector is technically accurate for the pre-sinkhole state: network-reachable, low complexity, no auth, no user interaction, full CIA impact. Post-sinkhole, effective AC is significantly higher and the reachable population is ~2% of original. |
| Affected Versions | Windows Updater.exe ≤ 6.2.1.18, macOS PT.updd ≤ 6.2.1.17, Android in-app checker ≤ 3.5.0.173. No patched version exists — the project is abandoned. Complete uninstallation is the only remedy. |
| Scanning & Exposure | Eye Security observed ~3M Windows and ~350K macOS unique hardware IDs phoning home. Connections originated from residential ISPs, corporate, government, and military networks. Post-Operation IXIM, 98% reduction in callbacks. No Shodan/Censys/GreyNoise data (this is a client-side outbound connection, not an exposed service). |
| Disclosure Timeline | Late 2025: discovered by Niels Teusink (Eye Security) during threat hunt. Nov 2025 – Mar 2026: Operation IXIM remediation. Jun 2026: CVE-2026-30612 published. Aug 27, 2026: NVD advisory. Oct 22, 2026: public disclosure at hack.lu conference, Luxembourg. |
| Researcher | Niels Teusink, Eye Security (Eye Research). Performed reverse engineering of Windows and macOS updater binaries, discovered the update protocol, identified the MachineGuid hardware-ID bug, and executed the large-scale remediation operation. |
| Additional Risk | The Time4Popcorn application also embeds a 2014-era Chromium engine with the sandbox disabled and loads JavaScript over HTTP from abandoned domains. Disabling the updater alone does not eliminate all attack surface — complete removal is required. |
Sources.
Why this verdict
- Sinkhole coverage eliminates primary attack vector: 15 of ~20 update domains are sinkholed by Shadowserver Foundation, and Operation IXIM disabled the updater on 98% of active instances. The attack surface has been reduced by roughly two orders of magnitude from the original 3.3M devices.
- Consumer piracy software, not enterprise infrastructure: Time4Popcorn is an unauthorized BitTorrent streaming client. It is never intentionally deployed on enterprise infrastructure. Its presence on a managed endpoint is itself a policy violation. No enterprise procurement, no SOW, no vendor support.
- Role multiplier: exclusively low-value workstation role. Time4Popcorn is a consumer desktop application installed by end users. It does not run on domain controllers, hypervisors, CI/CD systems, network edge appliances, backup infrastructure, or any canonical high-value role. The blast radius ceiling is a single workstation compromise (host-level). While SYSTEM/root on a workstation enables lateral movement in theory, this is identical to any other workstation-level compromise and does not trigger the high-value-role floor.
- EPSS corroborates low real-world risk: At 0.00424, EPSS places this vulnerability in the low-exploitation-probability tier, consistent with the consumer software profile and absence of known malicious exploitation.
- Remaining attack friction is non-trivial: An attacker must find and register one of the few remaining unsinkholed domains (status unclear), then hope the target host has an un-neutered updater (2% of original population), has outbound HTTP access to the domain (enterprise proxies often block unknown .xyz/.info), and is not running EDR that would catch an unsigned executable launched by a service.
Why not higher?
The vulnerability technically allows zero-click SYSTEM/root RCE via a trivial domain registration — the raw mechanism is genuinely critical. However, upgrading to HIGH or CRITICAL would ignore the massive real-world mitigation already in place: 98% of devices neutered, 75% of domains sinkholed, consumer piracy software that sits exclusively in a workstation role, zero confirmed malicious exploitation, and very low EPSS. The residual attack surface is a small fraction of an already-narrow population of unauthorized installations.
Why not lower?
Dropping to LOW would understate the residual risk. An unknown number of update domains may still be registrable, the remaining ~2% of un-neutered instances (~60K+ devices) would be trivially exploitable if a domain is obtained, and exploitation yields SYSTEM/root without user interaction. The additional risk from the 2014 Chromium engine with disabled sandbox adds further attack surface. The software has no patch path — it can only be removed. Any host still running it is a persistent liability.
Crowdsourced verification payload.
Run on each target Windows host (or push via SCCM/Intune/EDR live response). Requires local admin. Example: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-30612.ps1. For macOS, see the inline comments for equivalent bash checks.
#!/usr/bin/env pwsh
# Check-CVE-2026-30612.ps1
# Detects Time4Popcorn vulnerable updater (CVE-2026-30612)
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN
$ErrorActionPreference = 'SilentlyContinue'
$found = $false
$serviceActive = $false
# Check 1: Look for Updater.exe in known install paths
$paths = @(
"$env:ProgramFiles\Popcorn Time\Updater.exe",
"${env:ProgramFiles(x86)}\Popcorn Time\Updater.exe",
"$env:LOCALAPPDATA\Popcorn Time\Updater.exe"
)
foreach ($p in $paths) {
if (Test-Path $p) {
$hash = (Get-FileHash $p -Algorithm SHA256).Hash
Write-Host "[!] Found updater: $p"
Write-Host " SHA256: $hash"
# Known vulnerable hash
if ($hash -eq '6F895E70E5E560B4B8189A8F7EDDF59EA1D237C3D69AF7C9E55CFBD76F334827') {
Write-Host ' Hash matches known vulnerable Updater.exe'
}
$found = $true
}
}
# Check 2: Look for the Windows service
$svc = Get-CimInstance Win32_Service -Filter "Name='Update service'" 2>$null
if (-not $svc) {
# Also check by path pattern
$svc = Get-CimInstance Win32_Service | Where-Object { $_.PathName -like '*Popcorn Time*' }
}
if ($svc) {
Write-Host "[!] Found service: $($svc.Name) — State: $($svc.State) — StartMode: $($svc.StartMode)"
Write-Host " Path: $($svc.PathName)"
$found = $true
if ($svc.State -eq 'Running' -or $svc.StartMode -ne 'Disabled') {
$serviceActive = $true
}
}
# Check 3: Look for running process
$proc = Get-Process -Name 'Updater' -ErrorAction SilentlyContinue |
Where-Object { $_.Path -like '*Popcorn Time*' }
if ($proc) {
Write-Host "[!] Updater process running: PID $($proc.Id)"
$found = $true
$serviceActive = $true
}
# Check 4: Check for Popcorn Time application directory
$appDirs = @(
"$env:ProgramFiles\Popcorn Time",
"${env:ProgramFiles(x86)}\Popcorn Time",
"$env:LOCALAPPDATA\Popcorn Time"
)
foreach ($d in $appDirs) {
if (Test-Path $d) {
Write-Host "[!] Application directory exists: $d"
$found = $true
}
}
# Verdict
if ($found -and $serviceActive) {
Write-Host "`nVULNERABLE — Time4Popcorn updater is present and active. CVE-2026-30612 exploitable."
exit 1
} elseif ($found) {
Write-Host "`nVULNERABLE — Time4Popcorn components found (updater may be disabled but app remains). Remove entirely."
exit 1
} else {
Write-Host "`nPATCHED — No Time4Popcorn components detected."
exit 0
}
# macOS equivalent: test -f /Library/PrivilegedHelperTools/PT.updd && echo VULNERABLE || echo PATCHED