skip to content

Your renderer's vendor shipped a fix this morning — why can the number of capable attackers rise?

level: middleimportance: should knowfreq 55%

answer

  1. Two curves, only one falls
  2. The change is visible to everyone
  3. Search problem becomes engineering problem
  4. Installed is not the same as running
  5. Counted in restarts, not advisories

basics

~20 s

The shipped fix is a description of the bug. Comparing the corrected code with the previous version localises the defect and often reveals the missing check, so people who could never have found it can now trigger it — while your machines still run the old code until each application restarts.

solid answer

~50 s

Publishing a fix converts a secret into a map. Before it shipped, exploiting the flaw required independently finding it — a small population. After it ships, anyone can compare the corrected code against the previous version, see exactly which function changed and which check was added, and work backwards to a trigger. That turns one or two capable actors into many, including crews that only ever work from published fixes. Meanwhile your side moves slowly: the update must be downloaded, installed, and then the vulnerable process must actually restart — a document renderer a user never closes keeps executing the old code long after the estate reports itself updated. The exposure that matters is the gap between the fix becoming public knowledge and the process restarting, and it is measured in restarts, not in advisory dates.

code

text · 9 lines
text
same flaw, six dates
  T0  holder has working exploit, no vendor fix ....... zero-day window OPENS
  T1  used against one chosen recipient (a copy leaves the holder)
  T2  vendor ships the fix ................ zero-day window CLOSES for the holder
                                            n-day window OPENS for everyone else
  T3  shipped fix compared with prior build; changed check reveals the defect
  T4  laptop installs the update, renderer process still running old code
  T5  renderer finally restarted .............. THIS host's exposure ends here
  ...

go deeper

for a junior

Be ready to say that a shipped fix does not protect a machine until that machine actually runs the new code, and that the flaw is public knowledge once the fix is out.

for a middle

Explain the mechanism: comparing the fixed build against the previous one localises the change, turning original discovery into a bounded reconstruction, so the capable population rises at publication.

for a senior

Show you distinguish an inventory claim from a risk claim — installed versions versus processes running corrected code — and that you can state your exposure window in restarts rather than advisory dates.

for a principal

Own the framing upward: for most organisations the n-day window carries almost all of the real loss, and the argument for investment is about the length of your own clock rather than about adversary sophistication.

## Two curves crossing Think of a single flaw's life as two quantities changing over time: **how many people can exploit it**, and **how many machines are still vulnerable**. Intuition says the fix makes both fall. Only the second one does, and it falls slowly. Before the fix, the first quantity is tiny. Exploiting the defect requires having found it — original research, or a purchase from someone who did it. After the fix, the first quantity jumps, because the fix itself tells people where to look. ## Why a fix is a description of the bug A fix is a change to code, and a change is visible. Comparing the corrected build with the immediately preceding one narrows attention from an entire application to a handful of altered functions. The nature of the change is often self-explanatory: a length check added before a copy, a bounds test on an index, a type confirmed before a cast, a permission verified before an action. Each of those says, in effect, 'the previous version could be driven past this point'. Reconstructing input that reaches the changed code is then a bounded engineering problem rather than a search. This is why disclosure timing is contentious at all: the moment of publication is the moment the knowledge becomes symmetrical. It is also why the interval between a fix shipping and exploitation appearing has, for well-understood classes of flaw, been observed to be short — sometimes days. ## Why your side does not move at the same speed Getting the corrected code *running* is a chain, and every link is a place where the estate stalls: - The update must be published to the channel the machines use. - It must be downloaded and installed. - The vulnerable code must actually be re-loaded, which for a long-running application means the process has to restart. That last step is the one that surprises people. An inventory can honestly report that every laptop has the fixed version installed while a renderer process that a user has kept open for eleven days is still executing the old code in memory. Exposure ends at the restart, not at the install, and certainly not at the advisory. ## The window, laid out The same defect produces two different exposures. The first — the true zero-day window — is narrow in reach: one holder, spending the asset carefully. The second — the n-day window — is wide: many actors, working from public knowledge, against every machine that has not yet restarted the affected program. For most organisations the second window is where nearly all the real risk lives, and it opens at the moment the first one closes. ## What this means for how you talk about a compromise When someone says 'we were hit by a zero-day', the load-bearing check is whether a fix existed on the day. If it did, the event lives in the n-day window, and the honest description is that public knowledge outran the estate's restart clock. That is a different problem with different owners and, unlike the zero-day case, it is entirely addressable. It also reframes what 'we are patched' means as a claim. 'Patched' as an inventory statement is about installed versions. 'Patched' as a risk statement is about processes running corrected code. Only the second one closes the window, and only the second one is worth asserting to anyone who will act on it. ## Common wrong answers - 'Risk falls the moment the vendor ships' — it falls only for the machines that have already restarted, while the capable population rises immediately. - 'Only sophisticated actors can build an exploit from a fix' — deriving a trigger from a visible code change is far cheaper than original discovery, which is exactly the point. - 'The advisory date is the exposure date' — the advisory marks when knowledge became public, not when your code changed behaviour.

  • An inventory says every laptop has the fixed version installed. Are you done?
    Not necessarily. Long-running programs keep executing the code they loaded at start, so a renderer or browser a user never closes can still run the vulnerable version after the update is on disk. The claim you can defend is about installed versions; the claim that matters is about processes running corrected code, and the two diverge by however long people leave applications open.
  • Does this mean vendors should stop shipping fixes publicly?
    No — the alternative is worse. Without a public fix the defect stays exploitable indefinitely for whoever already has it, and nobody else can act. Publication makes knowledge symmetrical: it raises the capable population, but it is also the only thing that lets the whole world remove the defect. The lesson is about your own restart clock, not about disclosure being a mistake.

Publishing the fix is like announcing which window in the building was left unlatched, while the caretaker still has to walk to every floor and close it.

saying these in an interview costs you the question

  • Believes exposure falls immediately when the fix ships
  • Thinks deriving a trigger from a published fix needs elite skill
  • Treats the advisory date as the date exposure ended
  • Confuses installed version with running code
  • Assumes the n-day window is smaller than the zero-day window

context