PatchDay Alert
Analysis · 6 min read · 1,234 words By analysis-desk

The second bug is the easy one now

Two unrelated actors weaponized the same Task Scheduler zero-day at the same time. The reason isn't sophistication, it's that missing-auth on local RPC is sitting under most of Windows.

The second bug is the easy one now

The conventional read on CVE-2024-49039 is the one Microsoft’s rating suggests: Important, not Critical. Local elevation of privilege. CVSS 8.8, which is high for an EoP but doesn’t crash the dashboards. A Russia-aligned actor used it before the November 12, 2024 patch shipped. Move on.

That read isn’t wrong. It’s just looking at the wrong half of the chain.

The pattern

What the data actually shows is that two unrelated threat actors weaponized this bug simultaneously, before Microsoft had a fix, and both used it for the same purpose: the second link in a two-bug, zero-click browser chain. RomCom (also tracked as CIGAR / UNC4895) paired CVE-2024-49039 with CVE-2024-9680, a Firefox use-after-free Mozilla patched on October 9, 2024. Google’s Threat Intelligence Group documented a second, financially-motivated actor running the same two-CVE recipe via a watering hole on a compromised cryptocurrency news site. Different payloads, same chain, overlapping window. GTIG correlated the second cluster partly through a PDB string left in the shellcode: C:\etalon\PocLowIL\@Output\PocLowIL.pdb.

Two independent actors landing on the same zero-day pairing in the same window is unusual. The more interesting detail is which bug they converged on. The Firefox UAF is the harder half, a memory-corruption primitive in a hardened browser, found and burned inside a narrow window. CVE-2024-49039 is the easier half by an order of magnitude. It is not a memory corruption bug. It is a single missing access-control check on an RPC interface registered by WPTaskScheduler.dll inside the Task Scheduler service. The interface, GUID 33D84484-3626-47EE-8C6F-E7E98B113BE1, accepted calls from any local caller, including AppContainer. The patch, per researcher diffing by je5442804, modified TsiRegisterRPCInterface to require Medium Integrity. One line of policy. That was it.

The structural story is that the second-stage bug, the part that turns sandboxed code execution into a user session, has become the easier link to find. And the supply of that link is hiding in plain sight, inside services that have been registering local RPC interfaces since Windows 10 1507 shipped.

The evidence

Look at what CVE-2024-49039 actually is, mechanically. AppContainer is the lowest Windows integrity level. It’s the sandbox that wraps Firefox and Chromium renderer processes, Windows Store apps, and similar low-trust contexts. The trust boundary exists because Microsoft told the platform: a process at this level cannot reach privileged services without going through a broker.

WPTaskScheduler.dll, hosted inside schedsvc.dll, never got that memo. Its RPC interface’s security descriptor was effectively open. An attacker-controlled AppContainer process could call NdrClientCall2 against the endpoint and have Task Scheduler execute the request as if it came from a trusted local user. The PoC author and Tenable’s Patch Tuesday write-up describe the direct primitive as AppContainer to Medium Integrity, which is consistent with the CVSS 8.8 vector (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H). The scope-changed flag is doing the work that pushes a local EoP into the high-8s, because crossing the AppContainer boundary is exactly what CVSS treats as a scope change. GTIG’s writeup of the in-the-wild chain describes Low Integrity to SYSTEM, which most likely means the bug bought Medium and RomCom’s full kill chain layered additional techniques on top. The discrepancy is worth carrying. It tells you the bug itself is a sandbox-escape primitive, and SYSTEM is something attackers compose on top of it.

The affected surface is also telling. MSRC’s table lists Windows 10 1507 through 22H2, Windows 11 22H2 through 24H2, and Server 2016, 2019, 2022, and 2025. The component (WPTaskScheduler.dll) is a Windows 10-era addition, which is why Server 2012/R2 isn’t on the list. So this missing access-control check sat in a service-hosted RPC interface across roughly a decade of Windows builds, on every supported edition, until someone in the offense community went looking and two crews shipped exploits concurrently.

The November 12, 2024 cumulative updates fixing it (KB5046612, KB5046615, KB5046613, KB5046633, KB5046617, KB5046616/5046618) are standard monthly cumulatives. No out-of-band release. No documented servicing-stack prerequisites. ESET observed RomCom campaign activity between October 10 and November 4, 2024, targeting Ukrainian government, defense, and energy entities; U.S. pharmaceutical and insurance organizations; German legal firms; and European government bodies. Victim counts per country ranged from single digits to roughly 250. The exploitation window closed before the patch shipped, which is what “zero-day” actually means in practice and not just in marketing.

What this means for prioritization

The operational implication is a shift in how to score local-EoP bugs in service-hosted RPC interfaces. The reflex move on a CVSS 8.8 local EoP is to slot it behind the remote-unauthenticated criticals and the Edge/Chromium-class browser bugs. That ordering assumes the local EoP is the limiting reagent in any attack. It increasingly isn’t.

If the threat model you actually care about is zero-click browser-to-user-session compromise, the second-stage bug is now the constraint that defines the chain’s existence. Browser memory corruption gets found and burned. The supply of “service that trusts a local caller it shouldn’t” is large, sitting on every Windows host, and largely unexamined outside a small research community. When that supply is the rate-limiter, every credible AppContainer-escape primitive becomes a prebuilt second stage for whichever first-stage drops next. The practical reframe for a prioritization call is to treat second-stage sandbox-escape bugs (local-RPC, IPC, broker-service flaws) as gating dependencies for browser-RCE risk, not as separate lower-priority items. The bug whose CVSS vector starts AV:L may be the bug that decides whether next month’s browser zero-day matters on the fleet. In practice that puts browser-heavy hosts at the front of the cumulative-update queue and pulls behavioral hunts for sandboxed-process-to-elevated-token transitions out of “nice to have” and into the same tier as browser-RCE response. PatchDay Alert exists for exactly that prioritization call.

One caveat worth carrying. CISA’s KEV entry for CVE-2024-49039 is tagged “Known ransomware campaign use.” That designation is consistent with RomCom’s broader history of deploying Cuba, Underground, and Industrial Spy ransomware in double-extortion operations. But the ESET-documented October-November 2024 chain delivered the RomCom backdoor, not a ransomware payload directly, and no public report ties a specific ransomware family to this CVE. Read the tag as “this actor runs ransomware operations,” not “this specific exploit dropped ransomware in the wild.” It changes how you’d brief it up.

What to watch

The thing that would confirm the pattern is the next two-bug zero-click chain Microsoft acknowledges. If the second link is again a missing-auth or weak-ACL bug on a service-hosted local RPC interface, rather than a kernel memory-corruption EoP, the trend is real and the prioritization shift above is the right move. If the next chain pivots back to a kernel UAF or a token-impersonation primitive, CVE-2024-49039 was a one-off and the conventional ordering holds.

The defensive supply is also worth tracking. Detection content specific to this CVE is thin. A community KQL hunt in SlimKQL/Hunting-Queries-Detection-Rules for Microsoft Defender XDR exists, and no purpose-built Sigma, Splunk, or Elastic content surfaced in research. Whether the WPTaskScheduler RPC interface security descriptor can be tightened externally on unpatched hosts (via sc sdset or registry ACL changes) has not been publicly explored, and the exact Windows Security Event IDs that fire when a low-integrity caller hits the vulnerable endpoint aren’t documented in any source located. Both are gaps a determined defender could close, and both would meaningfully change the compensating-control story for orgs that lag the November 2024 cumulatives.

If your patch cadence is calibrated for a world where the local EoP is the easy half of an attacker’s day, CVE-2024-49039 is the bug that suggests recalibrating.

Share

Related field notes

One email, every weekday morning.

You're in. Check your inbox.

Get the digest

Free. Weekday mornings. Plain English CVE triage.

Check your inbox to confirm.