Subscribe to the Non-Human & AI Identity Journal

What fails when a patched upstream project still exists inside an untracked fork?

The control that fails is ownership of the actual running code. Teams may believe the upstream fix removed the risk, but forked binaries, vendored copies, and old package builds can keep the vulnerable logic live. The result is blind exposure, especially on internet-facing services where runtime reachability matters more than the original product name.

Why This Matters for Security Teams

A patched upstream release only reduces risk if the running artifact actually changes. In forked repositories, vendored modules, cached container layers, and repackaged binaries, the vulnerable code can survive long after the main project has fixed it. That makes ownership of deployed code, not just the upstream project name, the real control boundary.

This is why security teams need runtime and supply chain visibility together. A software bill of materials can help, but it does not prove which fork, build, or package is live. Guidance from the NIST Cybersecurity Framework 2.0 still depends on accurate asset and dependency inventory, and NHIMG research on The State of Secrets in AppSec shows how fragmentation and weak remediation discipline routinely undermine centralised control. In practice, many security teams encounter the exposed fork only after external scanning, incident response, or an attacker has already found it.

How It Works in Practice

When an upstream patch exists, the normal failure is not the absence of a fix. It is the absence of enforcement across every code path that can still produce a runnable artifact. A team may update the main repository, while an untracked fork continues to build an older branch, a container image still carries a stale layer, or a downstream package vendor ships a delayed rebuild. The original CVE looks resolved on paper, but the executable surface remains vulnerable.

Practically, this is where software inventory, build provenance, and runtime validation need to be linked. Teams should treat each fork, release branch, and package registry as a separate trust domain until it is proven otherwise. Useful checks include:

  • Comparing deployed hashes against the upstream fixed commit, not just the package version.
  • Scanning container images and build caches for stale layers that still contain the vulnerable library.
  • Tracking vendored dependencies separately from package manager manifests.
  • Verifying whether the fork has diverged enough that the upstream patch must be manually backported.

For organisations running internet-facing services, the most important question is whether the vulnerable code is reachable at runtime. That aligns with the visibility and response priorities in the NIST Cybersecurity Framework 2.0 and with NHIMG guidance to validate the actual asset in use, not the assumed one. The DeepSeek breach and JetBrains GitHub plugin token exposure illustrate the same operational theme: what matters is what remained exposed in the live environment, not what the patch notice implied. These controls tend to break down when build pipelines are decentralized and no one can prove which fork produced the running binary.

Common Variations and Edge Cases

Tighter supply chain control often increases build and release overhead, requiring organisations to balance faster patch adoption against stronger provenance checks. That tradeoff becomes sharper when a fork is intentionally maintained for feature work, regulatory constraints, or emergency hotfixes, because the fork may need its own patch backlog and security sign-off.

Best practice is evolving, but the current guidance suggests treating untracked forks as separate products until inventory proves otherwise. A fork can inherit the upstream fix partially, miss adjacent changes, or reintroduce the vulnerability through a local modification. The same is true for language ecosystems that support vendoring, where the package name can look current while the embedded source is stale.

Edge cases also include blue-green deployments, long-lived release branches, and appliance-style software where the vendor publishes fixes slowly. In those environments, patch verification should focus on code lineage and runtime reachability, not just version numbers. NHIMG research on the State of Secrets in AppSec shows how fragmented ownership creates blind spots, and that pattern applies directly to untracked forks. The guidance breaks down when no one controls the fork’s build pipeline because there is no reliable way to confirm the patched code is the code actually shipped.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP Non-Human Identity Top 10 address the attack and risk surface, while NIST CSF 2.0 and NIST AI RMF set the governance and control requirements practitioners need to meet.

Framework Control / Reference Relevance
OWASP Non-Human Identity Top 10 NHI-01 Untracked forks create unknown runtime assets and hidden identity-bearing code paths.
NIST CSF 2.0 ID.AM-1 Asset inventory is required to know which fork or binary is actually running.
NIST AI RMF AI RMF is relevant where automated code generation or agents alter forked software paths.

Extend inventory to deployed binaries, images, and forks, then reconcile them continuously.