Safeguard
Supply Chain Security•

Popcorn Time Updater Hijack: Operation IXIM, CVE-2026-30612, IoCs

An abandoned Popcorn Time fork left millions of PCs one domain away from takeover. Find Updater.exe and PT.updd, block 20 domains, then uninstall it.

Safeguard Security Team
37 min read

On 22 October 2026, Eye Security published Operation IXIM: its researchers registered 15 lapsed update domains of Time4Popcorn, an abandoned Popcorn Time fork, and pushed a harmless update that switched off the app's updater on millions of machines. The flaw, CVE-2026-30612, has no patch. Anyone with Time4Popcorn on Windows, macOS or Android should check for it and uninstall it.

The short version: an updater that runs as SYSTEM or root, fetches unsigned executables over plain HTTP, and trusts whatever domain answers is a remote code execution service waiting for an owner. When the vendor walked away and its domains expired, that owner could have been anyone. This post covers what Eye Security found, the full indicator list it published, a timeline that reconciles the June advisory with the October write up, commands to find and remove the software on Windows, macOS, Android and across a fleet, the open questions, and what teams that ship their own updaters can learn from it.

What happened

Popcorn Time began as a BitTorrent client for streaming films. The original project shut down in 2014 and several forks carried on under the same name, which still confuses people about which "Popcorn Time" they installed. One of those forks, Time4Popcorn, is closed source. Eye Security is explicit that its research does not apply to the newer Popcorn Time project at popcorntime.app, which started in early 2025.

According to Eye Security's write up by Niels Teusink, the story started during a routine threat hunt. An Updater.exe process on a monitored machine was trying to reach popcorntimeupd[.]xyz, a domain that no longer existed. Eye registered it and started logging. What came back was a steady stream of check ins, roughly 50 requests per second, from installs all over the world.

Eye then reverse engineered the closed source updaters. On Windows, Updater.exe is a C++ program built with Boost 1.55, a library release from 2013. It asks its update domains for a JSON document over plain HTTP, downloads whatever executable that document points to, and runs it as NT AUTHORITY\SYSTEM. Nothing checks a code signature. On macOS, a privileged helper called PT.updd does the same job as root, with a different JSON format and strings hidden behind base64 style obfuscation. On Android there is no background service; the app checks for updates when it is opened and asks the user before installing an APK.

Put together, whoever controlled any of those update domains could run code with full privileges on every Windows and macOS machine that still had the updater running, with no user interaction at all. Eye's talk abstract for Hack.lu 2026 says the affected population included machines on government, military and corporate networks.

Eye weighed three options. Buying every abandoned domain was expensive and still incomplete, because some were already held by third parties. Doing nothing left millions of hosts one registration away from compromise. The third option, which it chose after consulting its legal team, was to use the domains it now controlled to send a deliberately narrow update that stopped and disabled the updater service and did nothing else. Between November 2025 and March 2026 it served that update more than two million times. In late March 2026 it transferred its 15 domains to The Shadowserver Foundation for sinkholing.

Eye published a short advisory for CVE-2026-30612 on 11 June 2026, and the full operation write up on 22 October 2026, the same day Teusink presented it at Hack.lu.

The comparison Eye draws

Eye compares its choice to Operation Ladybird, the January 2021 action in which Dutch police used control of Emotet infrastructure to push a removal routine to infected machines. The difference, as Eye frames it, is that Popcorn Time users chose to install a film streaming app; they did not choose to keep a privileged, unauthenticated updater running for years after its vendor disappeared. Eye's conclusion was that with no vendor to fix it and no patch coming, somebody had to act. We report that reasoning; readers will reach their own view on a private company pushing code to machines it does not own.

Timeline

The October write up gives months, not minutes, for most of the operation. The only minute level timestamps we found are in the CVE record history, shown as published by OpenCVE.

Date and timeEventSource
2014Original Popcorn Time shuts down; forks continue under the nameEye Security, Operation IXIM
Before Nov 2025Routine threat hunt spots Updater.exe contacting unregistered popcorntimeupd[.]xyz; Eye registers it and logs requestsEye Security, Operation IXIM
Nov 2025Eye begins serving a benign update that stops and disables the updater, first only to hardware IDs already seen, once per IDEye Security, Operation IXIM
Dec 2025Update has reached more than 1 million systemsEye Security, Operation IXIM
A few weeks inRequest volume down about 90 percent; targeting limits relaxedEye Security, Operation IXIM
1 Mar 2026Requests down about 98 percent; about 5,000 updates per day still being servedEye Security, Operation IXIM
Late Mar 2026Eye transfers its 15 domains to The Shadowserver Foundation for sinkholingEye Security, Operation IXIM
11 Jun 2026Eye publishes the CVE-2026-30612 advisory with disable commands, no domains or versionsEye Security, CVE-2026-30612 post
12 Jun 2026Thailand's NCSA threat intelligence digest picks up the advisoryNCSA NSOC board
27 Aug 2026, 20:17:33 UTCNVD timestamp for publication of the CVE record (MITRE date 27 Aug 2026)OpenCVE
1 Sep 2026, 19:24:41 UTCMITRE record last modifiedOpenCVE
1 Sep 2026, 20:17:13 UTCNVD record last modified; status DeferredOpenCVE
2 Sep 2026, 07:30:18 UTCOpenCVE enrichment adds CISA ADP data (CVSS 9.8, CWE-494)OpenCVE
22 Oct 2026Eye publishes "Operation IXIM" with the domain list and file hashesEye Security, Operation IXIM
22 Oct 2026, 17:00 to 17:30Hack.lu 2026 talk "Operation IXIM: Preventing a botnet of millions of PopCorn Time users"Hack.lu 2026 schedule

Note the gap. The vulnerability was public in June, but the CVE record did not appear until late August, and the domains and hashes defenders need for hunting were only published on 22 October.

Affected and fixed versions

PlatformComponentAffected versions (CVE record)Fixed versionRuns asUser interaction
WindowsUpdater.exe, service "Update service"6.2.1.18 and earlierNone; vendor unreachableNT AUTHORITY\SYSTEMNone
macOSPT.updd privileged helper, launch daemon PT.updd.plist6.2.1.17 and earlierNonerootNone
AndroidIn app update check3.5.0.173 and earlierNoneApp user; APK install promptUser must accept the install
AnyMain app (2014 Chromium engine, sandbox disabled, loads JavaScript over HTTP from abandoned domains)Not versioned in sourcesNoneLogged in userOpening the app

The version numbers come from the CVE record as shown on OpenCVE and Strix; Eye's June advisory does not list versions. Because the product is abandoned, "fixed version" is not a status that will change. The only fix is removal.

Who is affected

GroupExposureWhat to do
Home users with Time4Popcorn on Windows or macOSUpdater may still run as SYSTEM or root, unless Eye's update reached itUninstall the app, then confirm the helper files are gone
Android users of Time4PopcornNo silent install, but the app can be told to prompt for a malicious APKUninstall the app
Companies with unmanaged or BYOD laptopsEye saw identical hardware IDs from cloned corporate laptop imagesHunt by file path, service and DNS; remove centrally
Users of the newer popcorntime.app projectNot covered by Eye's researchNo action from this advisory
Networks resolving the 20 indicator domainsMost now point at Shadowserver sinkholes; some are held by third partiesTreat any hit as an infected host and investigate

How many machines

All population figures are Eye Security's own estimates, and Eye revised them sharply as it understood its data better.

MeasureFigureNote
Unique hardware IDs seen over six monthsMore than 3.8 millionAbout half Windows, about 45 percent macOS, under 5 percent Android
Estimated Windows hostsAbout 2.5 to 3.0 millionAfter correcting for duplicate IDs
Estimated macOS hostsAbout 250,000 to 350,000Down from an early estimate of about 1.7 million
Update downloads servedMore than 2 millionWindows and macOS only
Android updates deployedNoneAndroid has no silent updater to disable
Peak check in rateAbout 50 requests per secondOn the first registered domain

The macOS correction is large. Eye explains that the macOS hardware ID includes the hostname, so a laptop that changes its name, as many do when they move between networks, shows up as a new machine. On Windows the opposite problem appears, covered in the technical details below.

Technical details

Everything in this section comes from Eye Security's two posts, the CVE record as rendered by OpenCVE and Strix, and the CWE catalogue. We have left out anything that would help someone build an attack.

CVE-2026-30612 at a glance

FieldValueSource
CVECVE-2026-30612CVE record
ProductTime4 Popcorn (Time4Popcorn); vendor and product recorded as "n/a" by the CNAOpenCVE
DescriptionRemote code execution through the updater component, updater.exe on Windows and PT.updd on macOSOpenCVE, Strix
CVSS v3.19.8 Critical, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HCISA ADP via OpenCVE and Strix
CVSS from the CNANone suppliedOpenCVE
CWECWE-494, Download of Code Without Integrity Check (CISA ADP); an earlier CWE-94 entry was replacedOpenCVE
SSVCExploitation "poc", Automatable "yes", Technical impact "total"OpenCVE
EPSS0.00416 on OpenCVE; 0.26 percent, 18th percentile, on StrixValues differ by retrieval date
CISA KEVNot listedOpenCVE, Strix
NVD statusDeferredOpenCVE, Strix
PatchNoneAll sources

Two oddities in the record are worth knowing if you track this CVE in a vulnerability database. First, the score and weakness come from CISA's ADP enrichment, not from the CNA, so tools that only read CNA data may show no severity. Second, the record's reference list includes a GitHub path about an LB-Link AC1900 router, which has nothing to do with Popcorn Time and looks like a mislinked reference. Do not use it as a source.

How the updater works

PlatformBinaryLocationPersistenceTransportIntegrity check
WindowsUpdater.exeC:\Program Files\Popcorn Time\ or C:\Program Files (x86)\Popcorn Time\Windows service named "Update service"Plain HTTP, JSON responseNone
macOSPT.updd/Library/PrivilegedHelperTools/Launch daemon /Library/LaunchDaemons/PT.updd.plistPlain HTTP, JSON responseNone
AndroidIn appInside the APKNone; checks on app openHTTPRelies on the user prompt

Eye published one sample check in request, which shows the shape of the traffic defenders can hunt for in proxy logs:

GET /?app_id=T4PSEC&hid=0a62d1fbddf387e1b37b5034f21049f6&ver=6.1.0.0&os=WIN060200

The useful constants are the app_id=T4PSEC parameter and the hid, ver and os fields. In Eye's example the version is 6.1.0.0 and the OS value is WIN060200.

This is the textbook case for CWE-494. MITRE's entry lists DNS spoofing, a compromised host and in transit modification as ways to abuse it, and recommends cryptographic signatures checked by the client and running with the least privilege needed. The Time4Popcorn updater had none of those. Here the attacker did not even need to spoof DNS or sit on the network path: the domains were simply available to register.

The hardware ID and why the counts moved

Eye reverse engineered how each install identifies itself.

  • Windows: the hid is an MD5 hash built from the C drive's volume serial number, the C drive's volume GUID and the MachineGuid value under HKLM\SOFTWARE\Microsoft\Cryptography. Eye found a reversed error check around RegQueryValueExA and RegCloseKey (a jne where a je was meant), so the MachineGuid is usually left out of the hash.
  • macOS: the hid is built from network interface hardware addresses (en0, en1 and so on), the hostname and the CPU type and subtype.

The Windows bug matters for companies. Without MachineGuid, two machines built from the same disk image can produce the same hid. Eye gives a concrete example: HP EliteBook and ProBook G9 laptops sharing the volume GUID a4ff4960-8e16-4b10-a74d-8c389ac860b8, which made many separate laptops look like one. That pushes Windows counts down, while hostname churn pushes macOS counts up. Eye also saw one IP address report 11 different IDs in a single day. Treat every population number as an estimate with wide error bars.

What Eye's update did

Eye says its update only stopped and disabled the updater. It collected no telemetry and deleted no files. The equivalent commands, which Eye also published in June for anyone to run by hand, are:

# Windows, elevated prompt (from Eye Security's advisory)
sc.exe stop "Update service"
sc.exe config "Update service" start= disabled
# macOS (from Eye Security's advisory)
sudo launchctl unload -w /Library/LaunchDaemons/PT.updd.plist

Microsoft's documentation for sc.exe config notes that the space after start= is required; without it the command fails. Service names are not case sensitive, so "Update service" and "Update Service", the two spellings in Eye's posts, refer to the same thing.

Eye describes several safety limits on the rollout. At first it sent the update only to hardware IDs it had already seen, and only once per ID. It used HTTPS redirects where it could. It relaxed those limits after a few weeks once it was confident the update behaved as intended.

Antivirus reaction

A week after Eye's update binary reached VirusTotal, 11 vendors flagged it as malicious, and VirusTotal's AI summary called disabling a Windows service a sign of malware. Eye says reporting false positives to every vendor would have taken weeks, so it changed its code until only one vendor flagged it. This is one of the more debated parts of the write up: the same technique that kept a benign fix moving also shows how easily signature detection can be sidestepped.

The main app is still unsafe

Disabling the updater does not make Time4Popcorn safe to use. Eye reports that the app runs a Chromium engine from 2014 with the sandbox disabled, loads content over unencrypted HTTP, and loads JavaScript from abandoned domains. Eye registered some of those JavaScript domains too and chose not to use them, but showed in a proof of concept that code loaded that way could start a program on the machine. Its Hack.lu abstract answers the question "is it safe with the updater off" with a plain no. Eye's own summary for users: "that's why our advice is simple: uninstall it."

Indicators of compromise

Eye listed 20 domains. Defanged here as in the source; replace [.] with . in your blocklist.

#Domain#Domain
1besttime4popcorn[.]info11popcorntimeupd[.]xyz
2goldtime4popcorn[.]info12realpopcorntime[.]info
3itspopcorntime[.]info13sunnypopcorn[.]info
4mypopcorntime[.]info14t4p-upd[.]info
5pct-upd[.]info15time2popcorn[.]info
6pctupd[.]info16time4popcorn[.]info
7popcornforever[.]info17upd-pct[.]info
8popcorngoldtime[.]info18updatepopcorntime[.]xyz
9popcorntime-upd[.]xyz19updpct[.]info
10popcorntime-update[.]xyz20updpopcorntime[.]xyz

Eye does not say which 15 of the 20 it transferred to Shadowserver, and says some were held by third parties. You cannot assume every domain in the list resolves to a sinkhole.

File indicators. Eye links both files on VirusTotal; the 64 character identifiers in those links are VirusTotal's SHA-256 file IDs. Eye does not label them as SHA-256 in the text, so we note that here.

FilePlatformPathSHA-256 (VirusTotal ID)
Updater.exeWindowsC:\Program Files\Popcorn Time\ (or Program Files (x86))6f895e70e5e560b4b8189a8f7eddf59ea1d237c3d69af7c9e55cfbd76f334827
PT.upddmacOS/Library/PrivilegedHelperTools/4e4ad25e652768157b460a62f87f3d41586a40da4b3b8e40ee35a28d3f5cca03

Other markers:

TypeValueSource
Windows service"Update service"Eye Security
macOS launch daemon/Library/LaunchDaemons/PT.updd.plistEye Security
Process namesUpdater.exe, PT.upddEye Security
HTTP request parameterapp_id=T4PSECEye Security
IP addresses, user agentsNot publishedNone

A hash mismatch does not clear a machine. Eye published one build of each file, and there were many versions of the app over the years. Path, service name and network behaviour are better hunting keys than a single hash.

How to check if you are affected

Work through these in order. Steps 1 to 3 are for a single machine; steps 4 to 6 are for a fleet or a network.

1. Windows

Open PowerShell as administrator.

# Is the updater on disk?
Test-Path "C:\Program Files\Popcorn Time\Updater.exe"
Test-Path "C:\Program Files (x86)\Popcorn Time\Updater.exe"

# Which service points at it, and is it running?
Get-CimInstance Win32_Service |
  Where-Object { $_.PathName -like "*Popcorn Time*" } |
  Select-Object Name, DisplayName, State, StartMode, PathName

# Is the process running right now?
Get-Process -Name Updater -ErrorAction SilentlyContinue | Select-Object Id, Path

# Hash it and compare with Eye's published value
Get-FileHash -Algorithm SHA256 "C:\Program Files\Popcorn Time\Updater.exe"

If the service exists with StartMode set to Disabled, Eye's update (or someone following its advice) has probably already reached the machine. The app is still installed and still unsafe.

2. macOS

# Files Eye named
ls -l /Library/PrivilegedHelperTools/PT.updd /Library/LaunchDaemons/PT.updd.plist

# Is the daemon loaded, and is the helper running?
sudo launchctl list | grep -i updd
pgrep -fl PT.updd

# Hash the helper
shasum -a 256 /Library/PrivilegedHelperTools/PT.updd

Look in /Applications for anything named Popcorn Time as well. The bundle name varies by version, so check what is there rather than assuming.

3. Android

There is no background updater to find. Check the installed apps list on the device for Popcorn Time or Time4Popcorn. On a managed device or over USB debugging:

adb shell pm list packages | grep -i -E "popcorn|t4p"

The package name is not given in the sources we read, so treat this as a search, not a precise match.

4. Fleet check with osquery

If you run osquery or a tool built on it, these read only queries cover both desktop platforms.

-- Windows: services pointing into a Popcorn Time folder
SELECT name, display_name, status, start_type, path
FROM services
WHERE path LIKE '%Popcorn Time%';

-- macOS: the launch daemon
SELECT name, path, program, run_at_load
FROM launchd
WHERE path LIKE '%PT.updd%';

-- Both: hash the known files where present
SELECT path, sha256 FROM hash
WHERE path IN (
  'C:\Program Files\Popcorn Time\Updater.exe',
  'C:\Program Files (x86)\Popcorn Time\Updater.exe',
  '/Library/PrivilegedHelperTools/PT.updd'
);

Most endpoint management tools can run an equivalent file path or service name search if you do not use osquery.

5. DNS and proxy logs

Save the 20 domains, refanged, one per line, to a file such as ixim-domains.txt, then search your logs.

# Generic text logs (resolver, proxy, firewall)
grep -F -i -f ixim-domains.txt /var/log/dns/*.log

# Zeek dns.log: query field
zcat dns.*.log.gz | zeek-cut ts id.orig_h query | grep -F -i -f ixim-domains.txt

# Proxy logs: the request parameter Eye published
grep -i "app_id=T4PSEC" /var/log/proxy/access.log*

On a single Windows machine, the DNS client cache gives a quick look:

Get-DnsClientCache | Where-Object { $_.Entry -match "popcorn|pctupd|pct-upd|upd-pct|updpct|t4p-upd" }

Any internal source address that resolves these names is a host with the updater or the app still active.

6. Block the domains

Add the 20 domains to your DNS blocklist or response policy zone. That stops a third party holder of any remaining domain from reaching your hosts, and it turns every attempt into a log line pointing at a machine to clean. For a single machine, entries in the hosts file pointing each domain at 0.0.0.0 do the same job.

If you operate a network and do not already receive Shadowserver's reports, its subscription page says the service is free to organisations that control the network space or domains they ask about. Whether hits on these particular sinkholes appear in the report types you receive is a question for Shadowserver; the page we read does not say.

How to remove it

Disabling the updater is a stopgap. Removal is the fix.

  1. Stop and disable the updater with Eye's commands above, so nothing can run while you work.

  2. Uninstall the app. On Windows use Settings, Apps, or run the uninstaller in the Popcorn Time folder. On macOS move the app bundle to the Trash.

  3. Remove the privileged pieces that uninstallers often leave. On macOS, after unloading the daemon:

    sudo launchctl bootout system /Library/LaunchDaemons/PT.updd.plist 2>/dev/null
    sudo rm -f /Library/LaunchDaemons/PT.updd.plist
    sudo rm -f /Library/PrivilegedHelperTools/PT.updd
    

    On Windows, if the service survives the uninstall, confirm its name with the PowerShell query above and remove it:

    sc.exe delete "Update service"
    Remove-Item -Recurse -Force "C:\Program Files\Popcorn Time"
    

    Check the name first. "Update service" is a generic string, and you do not want to remove an unrelated service that happens to share it.

  4. Verify. Rerun the checks from the previous section. The service, daemon, helper and folder should all be gone, and the host should stop appearing in DNS logs.

  5. Decide whether to investigate further. If a machine was talking to one of the domains Eye did not control, at any time, you cannot be sure what it received. Treat it like any host that may have run untrusted code as SYSTEM or root: review it with your usual incident process or reimage it.

  6. Remove it on Android through the app settings; there is nothing else to clean.

What changed since first reports

TopicJune 2026 advisory22 October 2026 write up and CVE record
Affected versionsNot listedWindows 6.2.1.18, macOS 6.2.1.17, Android 3.5.0.173 and earlier (CVE record)
SeverityNot scoredCVSS 9.8 from CISA ADP; CWE-494 replaced an earlier CWE-94
DomainsNot listed; "most" infrastructure said to be sinkholed20 domains published
File hashesNot publishedTwo VirusTotal SHA-256 IDs
PopulationNot given3.8 million IDs; corrected estimates of 2.5 to 3.0 million Windows and 250,000 to 350,000 macOS hosts
macOS estimateNot givenRevised down from about 1.7 million
OperationNot describedBenign update from Nov 2025 to Mar 2026, over 2 million downloads, 98 percent drop by 1 Mar
Main app riskNot covered2014 Chromium, sandbox off, JavaScript loaded over HTTP from abandoned domains
Dates in databasesAdvisory 11 JuneCVE record published 27 August, modified 1 September; NVD status Deferred

Open questions

  • Which five domains are still outside Shadowserver's control, and who holds them? Eye says some were owned by third parties. It does not name them. Blocking all 20 is the safe default.
  • Did anyone malicious ever serve an update? Eye's write up describes no evidence of that, and none of the sources we read report it. Absence of a report is not proof; the domains lapsed at different times and Eye only saw traffic after it registered them.
  • How many machines never received Eye's update? About 5,000 updates a day were still going out on 1 March. Machines that were offline for the whole window, or that point at domains Eye did not hold, would still have a live updater.
  • What about Android? Eye deployed nothing to Android. Those installs still check for updates and still load content over HTTP.
  • The abandoned JavaScript domains. Eye says it registered some and did not use them. Their long term ownership is not stated.
  • Is the vendor reachable? Eye's June advisory says the software is abandoned, and its October write up says the operators seemed to have lost control of their domains. No vendor statement exists in any source we found.
  • The ethics. A private company sent code to millions of machines without their owners' consent, and adjusted that code to slip past antivirus detection. Eye says it took legal advice and kept the change minimal. Expect this to be argued about after the Hack.lu talk, and expect the outcome to shape how researchers handle the next abandoned updater.

What would have helped

Practices any team can use

For IT and security teams running endpoints:

  1. Keep a software inventory that flags abandoned and unsigned software. An app that has not shipped a release in years and installs a SYSTEM level service is a risk on its own, before any CVE exists. Inventory tools that report install paths, services and signer information make this a query, not a hunt.
  2. Alert on new privileged services and launch daemons. Both persistence points here, a Windows service and a macOS launch daemon in /Library/LaunchDaemons, are standard places to watch.
  3. Control what users can install as administrator. On managed machines, removing local administrator rights blocks a consumer app from installing a SYSTEM service in the first place.
  4. Watch DNS for lapsed domains. Requests that return NXDOMAIN at a steady rate from many hosts are exactly what Eye's threat hunt noticed. That signal is in most resolver logs already.
  5. Block plain HTTP downloads of executables at the proxy where you can. It would not stop every case, but it removes the easiest path.

For teams that ship software with an updater:

  1. Sign every update and verify the signature in the client before running anything. This is MITRE's primary mitigation for CWE-494. If the check fails, do nothing.
  2. Use HTTPS with certificate validation, and pin the update host to a name you control for the long term.
  3. Treat update domains as dependencies with an expiry date. Track their renewal like a certificate. A domain lapsing is a security event, the same pattern as an abandoned storage bucket or an expired email domain on a package maintainer account.
  4. Run the updater with the least privilege it needs, and only when it needs it, rather than as a permanent SYSTEM or root service.
  5. Plan for your own end of life. Before you stop maintaining a product, ship a final update that disables or removes the updater, and keep the domains registered for years afterwards. Eye had to do this job for Time4Popcorn's vendor.
  6. Never load executable content from remote domains over HTTP. The app side JavaScript problem shows that disabling one channel is not enough when another exists.

Where Safeguard fits

Safeguard would not have prevented this, and it is not the tool for finding Time4Popcorn on employee laptops. Safeguard works on the software you build and ship: repositories, container images and SBOMs. Endpoint detection and response is on Safeguard's roadmap, not shipping today. Use the endpoint checks above for the hunt.

Where Safeguard does help is the lesson for teams that build software:

Inventory of what you ship. safeguard scan --dir . builds an SBOM for a repository, safeguard scan --image <name> does the same for a container image, and safeguard scan --sbom <file> ingests an existing SBOM; results land as JSON under ./output. The platform shows which projects contain a given component and version, so when an updater library or HTTP client in your own product turns out to be the problem, finding every product that carries it is a lookup. A closed source desktop app with no package metadata will usually not show up in an SBOM at all, which is part of why abandoned software like this goes unnoticed.

Vulnerability matching and reachability. Safeguard matches components against vulnerability databases and uses reachability analysis to rank what your code actually calls. That is how you would find an outdated library in your own updater, the Boost 1.55 problem in a different shape.

Policies and gates. Platform policies and gates evaluate what a build contains, so a component you have retired cannot quietly return through an old branch.

Fixing your own updater with an assistant. The Safeguard CLI's assistant can edit code and run commands with your approval; /permissions offers Ask, Accept edits, Plan, Auto (the default) and Strict. You could ask it to find every place your product downloads code over http://, every update path that runs a download without a signature check, and every hard coded update domain, then propose and test the changes one approval at a time. safeguard exec runs checks in CI, and the desktop and phone apps can send that work to a computer running the CLI and approve each command. What it cannot do is renew your domains or decide your end of life plan; those stay with your team.

Zero-Day Discovery and Gold

  • Zero-Day Discovery looks for previously unknown vulnerabilities before a CVE exists, in an agentic mode and a deterministic scanner mode, across seven package ecosystems, and issues findings as SGZ advisories before they reach public CVE databases.
  • Gold Open Source at gold.safeguard.sh is free with no login: CVE intelligence with CVSS, EPSS, KEV status, affected and fixed versions and a recommended safe version, plus a free read API and a CI gate GitHub Action. For CVE-2026-30612 there is no fixed version anywhere to recommend, and we have not confirmed that Gold lists this CVE.
  • Gold Registry at registry.safeguard.sh is paid: hardened drop in components and container images held to zero exploitable critical or high CVEs, built to SLSA L3 or higher, Sigstore signed, with evidence pages. An artifact loses its badge on regression.

The link to this incident is a habit, not a record. Gold artifacts are signed and carry provenance, which is exactly what the Time4Popcorn updater never checked. Pulling components from a curated, signed source and verifying those signatures is the same discipline, applied to your build instead of your users' machines.

Common mistakes

  • Stopping at "the updater is disabled". Eye's own advice is to uninstall. The app still runs a 2014 browser engine with the sandbox off and loads JavaScript over HTTP.
  • Clearing a machine because the hash does not match. Eye published one build of each file. Hunt by path, service name, launch daemon and DNS, not only by hash.
  • Assuming every domain is sinkholed. Eye moved 15 to Shadowserver. Some of the 20 belong to third parties. Block all of them.
  • Deleting the wrong "Update service". The service name is generic. Confirm its binary path points into the Popcorn Time folder before removing it.
  • Confusing the projects. The popcorntime.app project that began in 2025 is not covered by Eye's research. Do not uninstall the wrong thing, and do not assume the right thing is safe because the name sounds new.
  • Trusting the CVE record alone. Vendor and product are "n/a", the score comes from CISA's enrichment, NVD has the record Deferred, and one reference is about an unrelated router. Tools that rely on CPE matching may never flag this.
  • Treating the population numbers as precise. Eye revised its macOS estimate down by roughly 80 percent. Quote ranges, not single figures.
  • Forgetting cloned images. If your company images laptops, one copy of this app in a golden image means many copies on the fleet, and Eye's data suggests they may all look like one machine.

FAQ

What is Operation IXIM?

It is Eye Security's name for its effort to neutralise the abandoned Time4Popcorn updater. Eye registered 15 lapsed update domains, served an update that stopped and disabled the updater on Windows and macOS between November 2025 and March 2026, and then handed the domains to The Shadowserver Foundation. It published the full account on 22 October 2026.

Is this the same Popcorn Time I can download today?

Not necessarily. Eye's research covers Time4Popcorn, a closed source fork. It says the newer Popcorn Time project at popcorntime.app, started in early 2025, is not covered. Check what you have installed before acting.

Which versions are affected, and is there a patch?

The CVE record lists Windows 6.2.1.18 and earlier, macOS 6.2.1.17 and earlier, and Android 3.5.0.173 and earlier. There is no patch, and none is expected, because the vendor is unreachable and lost control of its domains.

How serious is CVE-2026-30612?

CISA's ADP enrichment scores it 9.8 out of 10 under CVSS v3.1, with network attack, no privileges and no user interaction. Anyone controlling an update domain could run code as SYSTEM or root on reachable installs. It is not in CISA's Known Exploited Vulnerabilities catalogue, and no source we read reports malicious exploitation.

Was my computer already fixed by Eye's update?

Possibly, if it checked in between November 2025 and March 2026 through one of Eye's domains. On Windows, a Popcorn Time service with the start type set to Disabled is a good sign. Either way, the app is still unsafe, so uninstall it.

Did Eye collect data from my machine?

Eye says its update collected no telemetry and deleted no files. Its servers did see the check in requests that the updater sends to any domain owner, which include a hardware ID, version and OS string.

Is it legal for a researcher to push code to other people's computers?

That depends on jurisdiction, and we are not giving legal advice. Eye says it consulted its legal team and compares the action to the 2021 Emotet takedown by Dutch police. Others will disagree, especially about changing the update to avoid antivirus detection. Both views are part of the story.

Why did antivirus products flag Eye's fix?

Its update disabled a Windows service, which is something malware often does. Eleven vendors flagged it on VirusTotal within a week. Eye changed its code until one vendor flagged it, rather than filing false positive reports with each vendor.

My company does not allow this kind of software. Should I still check?

Yes. Eye saw identical hardware IDs from cloned HP laptop images, and its talk abstract mentions government, military and corporate networks. A DNS log search for the 20 domains takes minutes and answers the question.

We ship an app with an auto updater. What is the minimum we should do?

Sign updates and verify the signature before running anything, use HTTPS with certificate validation, run the updater with the least privilege it needs, and keep your update domains registered long after the product ends, ideally with a final release that removes the updater. See our incident response playbook for a compromised dependency for how to run the response if one of your own channels is abused.

Fix it without waiting for upstream

For Time4Popcorn itself there is no upstream left to wait for, and the right answer is removal. The habits below are for the open source components and images inside the software your team builds, where the same "nobody is shipping the fix" problem shows up far more often.

In incidents like this one, most of the risk sits in two gaps. The first is the time between a fix being published and that fix actually running in your production builds. The second, and worse, is the time before any fix exists at all, while a maintainer works out a patch and a release schedule. Waiting through both gaps is a habit, not a requirement. Safeguard gives teams three ways to close them.

1. Autonomous remediation: pull requests, not tickets

When a fixed version exists, Safeguard's Griffin models open a tested, policy gated pull request that moves the affected dependency to the safe version. You can run it on one repository or in bulk across every project that carries the vulnerable version. Remediation covers eight categories, including dependencies, licenses, security posture and findings. Reachability analysis ranks the vulnerable code paths your application actually calls first, so the first pull requests you merge are the ones that matter most. Autonomous remediation ships switched off, with every category set to Manual, so your team decides how much runs on its own and what still needs a human approval.

2. Gold Open Source: the safe version in seconds, free

gold.safeguard.sh is free and needs no login. Search any CVE or package to see affected and fixed versions, CVSS, EPSS, CISA KEV status and a recommended safe version, or use the "Am I affected?" checker. The same data is available through a free read API, README status badges and RSS threat feeds. The safeguard-sh/gold-scan-action GitHub Action can fail a build on a known exploited vulnerability, on any known vulnerability, or never, so a version you have just removed cannot quietly come back in next week's merge.

3. Gold Registry: start from components that are already fixed

registry.safeguard.sh provides hardened, drop in replacements for upstream packages and container images. Every Gold artifact is held continuously to zero exploitable critical or high CVEs, zero malware and a completed license check, with SLSA L3 or higher provenance, a Sigstore signature and a public evidence page you can hand to an auditor. An artifact loses its Gold badge if it regresses. Teams can point their own package directory at the registry so hardened equivalents resolve without changing how developers install anything.

When upstream has no fix yet, or will not ship one, Safeguard first works to get the fix accepted upstream. If the issue is severe or upstream will not move, Safeguard builds a fork, fixes the vulnerability there and publishes a hardened Gold build, so you are not stuck on a maintainer's release schedule. You can also request a hardened, compatibility tested build of a specific package. This fork and patch flow is in early access today, so ask which packages it covers before you plan around it.

Your situationWhat to use
A fixed version existsAutonomous remediation opens the upgrade pull request; Gold Open Source confirms the safe version
You need to know today whether you are affectedGold Open Source lookup and "Am I affected?" checker, free and without login
You want vulnerable versions to stop shippingThe Gold scan GitHub Action in CI, plus Safeguard policies and gates
Upstream has no fix yet, or will not ship oneA custom Gold request; fork and patch (early access)
You want to start clean on new projectsPull hardened components and images from Gold Registry

One honest limit: when the vulnerable code lives in a vendor appliance, a hosted service or an operating system runtime you do not build yourself, the fix still has to come from that vendor or distribution. The steps above apply to the open source dependencies and container images you build and ship, which is where most teams carry the largest and least tracked share of their exposure.

See how Safeguard would have helped

None of these demos show this incident. Each is a real Safeguard session; the text says how the same flow applies here. For more on finding affected products quickly, see SBOM incident response: finding affected products fast, and for the rest of the month, October 2026 security incidents and what would have helped.

The first demo is a CLI session that fixes a lodash CVE: the assistant reads the finding and advisory, asks before each command, edits package.json, runs the install and tests with your approval, and pushes nothing. If your team ships an app with its own updater, you would open the same session in that repository and ask it to find every update URL that uses http://, every download that runs without a signature check, and every hard coded update domain, then make and test the changes one approval at a time.

Click through it at your own pace, or open it full screen.

The second demo is a desktop app session: the CLI session shows in the conversation list, you ask for work on your computer, pick the folder, then Approve or Deny each command and file edit, ending with an upgrade done and tests passing. Here you would pick the folder that holds your fleet scripts and ask it to add the osquery checks and the 20 domain blocklist from this post, approving each file edit before it lands.

Click through it at your own pace, or open it full screen.

The third demo is a real Android session: work is sent to a computer running the CLI, and the command is approved on the phone with Allow once, Allow for turn or Deny. For this incident, an engineer away from the desk could approve the DNS log search against the indicator list, and deny anything that would delete a service before its path has been checked.

Click through it at your own pace, or open it full screen.

To try it on your own projects, download Safeguard and follow the CLI documentation. For another case where trust in a distribution channel was the weak point, see what the TensorLake npm compromise teaches about provenance.

Quick check

A Windows laptop shows the Popcorn Time "Update service" with its start type set to Disabled. Is it safe?

No. The updater is probably off, likely thanks to Eye's update, but the app still runs a 2014 browser engine with the sandbox disabled and loads JavaScript over HTTP from abandoned domains. Uninstall it and remove the leftover service and folder.

Your DNS logs show a host resolving updpct.info last week. Shadowserver sinkholes these domains, so can you ignore it?

No. Eye transferred 15 domains to Shadowserver and says some were held by third parties, and it does not say which. Treat the host as running a live updater, find and remove the software, and block all 20 domains.

Sources

Last reviewed: 22 October 2026. This is a developing story; check the linked advisories for the latest status.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.