Back to blog

// OSSeva Blog

Security

Open Source Security vs Support: Which Fixes Risk Faster?

Matt Reynolds10 min read

The short answer

For a CVE on an end-of-life component, compensating controls are the fastest way to cut risk but rarely remove it. A backported fix on the version you already run, from your own team or a support provider, is usually the fastest way to remove it. An upgrade to a supported line removes it most durably, and takes the longest. Taking a community fix only works if you are already on a supported line, which by definition you are not. Doing nothing is only defensible when an assessment shows the vulnerability cannot be exploited in your deployment, and then it is not really doing nothing.

In practice teams combine them: controls the same day, a fix on the current line as soon as one exists, and the upgrade on a schedule the business can absorb. This article is general information, not legal or audit advice.

Why speed matters more than it used to

Mandiant's analysis of 138 vulnerabilities disclosed in 2023 and exploited in the wild, published in October 2024, measured an average time-to-exploit of five days, after removing statistical outliers. Its earlier analyses had measured 63 days for 2018 to 2019, 44 days for 2020 to the start of 2021, and 32 days for 2021 and 2022. Of the 138, 97 were exploited as zero-days, before a patch existed. The window between a fix appearing and someone using the flaw has become short enough that a monthly patch cycle can miss it.

Policy has followed. PCI DSS 6.3.3 gives one month for critical patches. CISA's Binding Operational Directive 26-04, issued on 10 June 2026 for US federal civilian agencies, requires the most urgent combinations of exposure and exploitation to be remediated within three days with a forensic triage. Both assume a fix exists. For an end-of-life line, the first question is where the fix will come from at all.

The five paths

1. Upgrade to a supported release line

Time to fix. As long as the migration takes. For a patch release on the same line, that can be a normal change window. For an end-of-life component it usually means a major or minor version jump, with API changes, configuration changes, dependency changes and a test cycle, so weeks or months are common.

Effort. The highest of the five, and it lands on the teams that own every application using the component.

Residual risk. The lowest once complete, because you are back on a line that receives upstream fixes. Until then the CVE stays open, so an upgrade alone is a slow way to close an urgent finding.

Our upgrade guides, such as ZooKeeper 3.4 or 3.5 to 3.8 or 3.9, show what that work involves for specific runtimes.

2. Take the community fix on a supported line

Time to fix. Upstream's release time plus your own testing and rollout. For a project with an active security process this is often the fastest durable fix available.

Effort. Low to moderate: a version bump within a line you already run.

Residual risk. Low.

The catch is in the name. Community fixes go to supported lines. If the component is end of life, the fix exists for someone else's version, and taking it means doing path 1 first. Projects also differ in how far back they look when they publish an advisory, so check which lines it actually names. Our vulnerability-by-version guides for ZooKeeper, Kafka and Spring Boot list them.

3. A backported fix from a support provider, or from your own team

Time to fix. The provider's delivery time plus your rollout. A drop-in build of the version you already run needs regression testing but not a migration, so rollout looks like any other patch. Delivery time depends on the contract: check whether it commits to out-of-cycle releases for severe CVEs or only to a regular cadence.

Effort. Low for an external provider. High if you backport in-house, because someone has to understand the upstream fix, adapt it to old code, build, sign and test it, and keep doing that for every later CVE.

Residual risk. Low for the CVEs the fix covers. The component is still old, so new CVEs keep arriving, and what matters is that each one has a source of fixes. That is exactly what NIST SP 800-53 SA-22 recognises as "alternative sources for continued support", in-house or from external providers.

4. Compensating controls

Time to fix. Hours to days. Firewall rules, disabling a vulnerable feature in configuration, tightening authentication or access lists, and adding detection can all go in quickly.

Effort. Low to moderate at first, then ongoing, because every control has to be maintained and retested as the environment changes.

Residual risk. Moderate. The vulnerable code is still present, and the control holds only as long as nobody changes the network, the configuration or the access model it depends on. The SA-22 discussion suggests isolation to reduce the risk of unsupported components, but it does not list isolation as one of the control's two ways of complying. PCI DSS treats compensating controls as acceptable only with a documented constraint and an analysis of the risk that remains.

5. Do nothing

Time to fix. Never.

Effort. None now. Possibly a great deal later.

Residual risk. All of it, plus every CVE disclosed after this one. US federal policy is blunt about unsupported components: OMB Circular A-130, as quoted in CISA's BOD 26-02, requires that "unsupported information systems and system components are phased out as rapidly as possible".

There is one legitimate version of this path. If analysis shows the vulnerable code is not present, not in the execution path, or cannot be reached by an attacker in your deployment, record that as a VEX statement with status not_affected and the evidence behind it. That is an assessed decision, it is reversible when the deployment changes, and it does nothing for the next CVE.

Side by side

PathTime to reduce riskEffortResidual riskWhat an auditor sees
UpgradeSlowest: weeks to monthsHighLowest once doneChange records, updated inventory, clean rescan
Community fix on a supported lineFast, if you are on that lineLow to moderateLowNormal patch evidence
Backported fix (provider or in-house)Fast: provider delivery plus rolloutLow with a provider, high in-houseLow for covered CVEsContract or team procedure, delivery and change records, signatures
Compensating controlsFastest: hours to daysLow at first, ongoingModerateControl description, test results, approval with expiry
Do nothingNeverNone nowFullAn open finding, or a VEX statement if not exploitable

Worked example: ZooKeeper 3.6 and CVE-2024-23944

Apache rates CVE-2024-23944 critical. Persistent watchers in ZooKeeper skip an ACL check when they fire, so a client that can read a parent znode can attach a persistent watcher and learn the full paths of child znodes it should not see. The advisory notes that only the path is exposed, not the data, but paths can contain user names or login IDs. It lists 3.6.0 through 3.7.2 as affected, along with early 3.8 and 3.9 releases, and the fixes are 3.8.4 and 3.9.2. There is no fixed 3.6 or 3.7 release.

  • Do nothing is not defensible unless no untrusted client can connect and read the relevant parents, which is a claim you need evidence for.
  • Compensating controls come first: restrict which hosts and principals can open sessions against the ensemble, and review ACLs so clients cannot read parents of sensitive subtrees. This can be done the same day and lowers the risk, but the flaw remains.
  • A community fix exists only on 3.8.4 and 3.9.2, so on 3.6 it is really an upgrade.
  • A backported fix to 3.6 closes the CVE on the version in production, and the VEX status can move to fixed against the patched build.
  • The upgrade to a supported 3.8 or 3.9 release is scheduled with its own testing plan, and removes the need for backports on that cluster once complete.

Choosing a sequence

  1. Assess first. Confirm the vulnerable code is present and reachable. If it is not, write the VEX statement and stop.
  2. Contain the same day if the component is exposed or the CVE is known to be exploited. Compensating controls buy time; they do not end the work.
  3. Fix on the current line next. A backported build is the fastest way to remove the vulnerability without a migration.
  4. Upgrade on a plan. Schedule it for the next window the applications can absorb, with the upgrade date recorded in your end-of-life inventory.
  5. Record each step. The same records satisfy the change, exception and SA-22 evidence auditors ask for. Our audit evidence checklist lists them, and our post on compliance versus security explains why the paperwork alone does not close the risk.

Where OSSeva fits

OSSeva Patch is path 3 for community end-of-life runtimes such as ZooKeeper: drop-in builds with backported security fixes, delivered quarterly and out of cycle for CVSS 9.0 and above, signed with GPG and attested with Sigstore Cosign, through your existing repository manager. If you stop the subscription, you keep running the last patched version. OSSeva Assure adds upgrade planning for path 1 and the compliance documentation for whichever paths you take. The compliance library covers the frameworks.

Frequently asked questions

Is upgrading always the most secure option?

Once it is finished, usually yes. While it is in progress the CVE stays open, so for an urgent vulnerability an upgrade needs a faster measure alongside it.

Are compensating controls enough on their own?

They reduce risk quickly but leave the vulnerable code in place, and they depend on the environment staying as it was when they were tested. Treat them as temporary unless the vulnerability is genuinely unreachable.

How fast should a backported fix arrive?

That depends on the contract. Look for a stated cadence, a commitment for out-of-cycle releases on severe CVEs, and signed builds you can verify.

Can we accept the risk of an end-of-life component?

Frameworks allow documented risk acceptance, but it leaves the vulnerability open, and NIST SA-22 still expects either replacement or a source of continued support for components you keep.

Tags

Vulnerability ManagementEnd of LifeExtended SupportPatchingZooKeeper

Ready to get your open source under control?

Talk to an OSSeva engineer about CVE coverage, compliance, and migration support for your stack.