By NHI Mgmt Group Editorial TeamBased on Boost Security: “Don't Go with the flaw” (December 3, 2025)

TL;DR: Go’s module ecosystem preserves integrity through proxy caching and checksum verification, but Boost Security shows that those controls do not establish trust, leaving room for repojacking, domain takeover, dependency confusion, typosquatting, and cached malicious pseudo-versions to persist undetected. The practical lesson is that supply-chain governance must extend beyond hashes to ownership, namespace, and lifecycle controls.


At a glance

What this is: This analysis argues that Go module integrity controls can preserve immutable package bytes while still failing to prove that a dependency is safe, owned, or trustworthy.

Why it matters: For IAM and NHI practitioners, the issue is that trust decisions often sit outside the checksum layer, so dependency governance must cover ownership, namespace control, and lifecycle offboarding.


Context

Go module resolution is designed to preserve package integrity, but integrity is not the same as trust. In this ecosystem, the security gap appears when a package can be fetched and verified while its owner, namespace, or publishing path has changed hands.

That matters for identity and supply-chain governance because the risk is not only malicious code. It is also abandoned or repurposed package identities, cached artifacts, and dependency paths that continue to look legitimate after the trust relationship has changed.


Key questions

Q: What breaks when Go module integrity is treated as trust?

A: Checksum verification still works, but it only proves that a package matches a previously published hash. It does not prove the namespace owner is still valid, the repository has not been reclaimed, or the host domain is still controlled by the intended organisation. That is why ownership and lifecycle checks must sit beside integrity controls.

Q: Why do repojacked or expired Go package names remain risky after verification?

A: Because verification is blind to who controls the namespace now. If an account, repository, or domain is deleted and later reused, the package path can still resolve cleanly while the new publisher is hostile. The risk is highest when teams trust the path label more than the current ownership state.

Q: What do security teams get wrong about Go proxy caching?

A: They often assume immutable caching makes a dependency safe, when it only makes the bytes stable. If a malicious module is cached once, the proxy can preserve that artifact long enough for it to be reused in downstream builds even after the upstream source is changed or removed.

Q: How should teams govern Go dependencies when module ownership changes?

A: They should treat owner changes, repository renames, deleted accounts, and expired domains as security events for the dependency inventory. A module that is still verifiable may no longer be trustworthy, so the control should focus on current ownership state, not just package identity or checksum validity.


Technical breakdown

Why Go proxy immutability does not equal trust

Go’s proxy and checksum database create a durable record of package bytes, which is useful for reproducibility and tamper detection. But a cryptographic checksum only answers whether the downloaded object matches what was previously published. It does not answer whether the publisher is still legitimate, whether the namespace is still controlled by the same owner, or whether the package has become unsafe through account deletion, domain expiry, or repository takeover. In other words, the ecosystem verifies content lineage, not governance lineage.

Practical implication: Treat checksum validation as a baseline control and add ownership and lifecycle checks before allowing a module into production.

How repojacking and domain takeover survive integrity checks

Repojacking happens when a deleted or renamed account leaves a namespace open for reuse, while domain takeover occurs when a custom module host expires and can be re-registered by an attacker. In both cases, the module path still looks legitimate to the Go toolchain, so a package can be republished under the same name with malicious content. The integrity controls continue to work exactly as designed, which is why they are not sufficient to stop namespace abuse.

Practical implication: Continuously verify that module hosts, owner accounts, and organization names remain under active, intended control.

Why pseudo-versions and cached malicious commits are especially dangerous

Go pseudo-versions can point to specific commits, including commits that were later removed or obscured in the source repository. Once a malicious commit is cached by the proxy, the cached artifact can persist even if the upstream evidence is scrubbed, creating a durable delivery channel for compromised code. That makes the proxy itself part of the attacker’s persistence strategy, not just a neutral distribution layer. The trust problem is therefore not limited to published releases.

Practical implication: Review pseudo-versions, commit provenance, and proxy-cached artifacts as part of software supply-chain assurance.


Threat narrative

Attacker objective: The attacker wants a malicious Go package to be accepted as a trusted dependency and then persist through immutable proxy caching.

  1. Entry occurs when attackers exploit repojacking, domain expiry, dependency confusion, or typosquatting to place malicious code behind a trusted-looking Go module path.
  2. Credential or namespace control is abused to publish or redirect users toward the attacker-controlled package, while the Go proxy preserves the artifact for later delivery.
  3. Impact occurs when developers fetch and build the module, allowing backdoors, data theft, or other malicious behaviour to enter downstream projects through a seemingly valid dependency.

Read and download The State of NHI & AI Agent Breach Report 2026, covering 200+ breaches impacting Non-Human Identities including AI Agents.


NHI Mgmt Group analysis

Integrity without ownership verification is a broken trust model: Go’s checksum and proxy architecture proves that bytes have not changed, but it does not prove the publisher still owns the namespace. That distinction matters because supply-chain governance depends on identity, not only on content hashes. Practitioners should treat package ownership as a control plane, not a metadata footnote.

Namespace lifecycle is the hidden control gap: repojacking, domain takeover, and account deletion all exploit the same assumption that a package path continues to mean the same thing over time. Once that assumption breaks, integrity controls can faithfully preserve malicious content. The practical conclusion is that ownership monitoring must sit alongside dependency allowlisting and artifact verification.

Proxy caching creates persistence for software supply-chain abuse: immutable distribution is valuable for reproducibility, but it also gives attackers a long-lived delivery surface once a malicious module is cached. That is a supply-chain persistence problem, not just an integrity problem. Security teams should extend threat modeling beyond build inputs to the lifecycle of the upstream identity behind each dependency.

Dependency trust is now an identity governance problem for engineering teams: the article shows that module safety depends on the status of accounts, domains, and repository histories, all of which are identity-linked controls. That makes the boundary between IAM and software supply-chain security much thinner than many teams assume. A dependency inventory without ownership state is incomplete.

Go creates a useful named concept here: proxy-preserved trust drift: the package remains verifiable while the trust relationship behind it decays or changes. This is the condition defenders need to detect, because it explains why a package can still look safe after the original owner, repo, or domain is gone. Practitioners should monitor drift between integrity proof and identity proof.

From our research library:

What this signals

Proxy-preserved trust drift: once a package is cached, the artifact can stay reproducible long after the original owner, repository, or domain has changed. That creates a governance problem for engineering teams because build systems may continue to trust a dependency whose identity relationship has already decayed.

The practical response is to treat dependency ownership as an active control, not a one-time review. That means monitoring namespace status, expired hosts, and repository transfers as part of software supply-chain assurance, alongside checksum validation and SBOM review.

The scale of the exposure is not theoretical. According to the State of Secrets Sprawl 2026, 28.65 million new hardcoded secrets were detected in public GitHub commits in 2025 alone, a 34% year-over-year increase and the largest single-year jump ever recorded.


For practitioners

  • Audit module ownership before promotion Check whether each Go dependency’s account, organization, and custom domain are still under the expected owner before approving it for build use.
  • Track repojacking and domain-expiry exposure Continuously scan go.mod files and dependency metadata for deleted GitHub accounts, expired domains, and renamed repositories that could be reclaimed.
  • Treat pseudo-versions as higher-risk inputs Review pseudo-versions and commit-based imports separately from tagged releases so cached malicious commits do not blend into normal dependency flow.
  • Enforce private-module routing explicitly Set GOPRIVATE and related fetch controls so internal packages are never allowed to fall back to public proxy resolution by accident.
  • Add ownership checks to SBOM review Extend SBOM review to include namespace ownership, repository status, and domain registration state rather than relying on checksum consistency alone.

Key takeaways

  • Go module integrity does not establish trust, because hashes prove content stability but not current ownership or legitimacy.
  • Repojacking, domain takeover, typosquatting, and cached pseudo-versions all exploit the gap between verified bytes and verified identity.
  • The control that matters most is dependency lifecycle governance, including ownership monitoring, namespace validation, and tighter handling of proxy-cached artifacts.

Standards & Framework Alignment

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

OWASP API Security Top 10 and MITRE ATT&CK address the attack and risk surface, while NIST CSF 2.0, CIS Controls v8 and SLSA set the governance and control requirements practitioners need to meet.

FrameworkControl / ReferenceRelevance
OWASP API Security Top 10API9 — Improper Inventory ManagementGo dependency sprawl creates blind spots in module ownership and lifecycle tracking.
Recommendation — Inventory dependencies continuously and remove modules whose ownership or provenance can no longer be verified.
NIST CSF 2.0PR.AA-05 — Access Permissions, Entitlements and AuthorizationsModule ownership and namespace control are authorization problems in the supply chain.
Recommendation — Verify that every dependency path is still authorised by the current owner before build approval.
CIS Controls v8CIS-15 — Service Provider ManagementThird-party package hosts and registries act as service providers in this trust chain.
Recommendation — Assess package hosts and dependency sources as third-party providers and revalidate them after ownership changes.
MITRE ATT&CKTA0001;TA0006;TA0040 — Initial Access; Credential Access; ImpactThe article describes attacker paths that use namespace abuse to seed malicious dependencies.
Recommendation — Map dependency abuse to ATT&CK and hunt for namespace takeover, credential misuse, and downstream impact indicators.
SLSAProvenance — ProvenanceThe article focuses on provenance gaps in cached and republished modules.
Recommendation — Require provenance evidence for dependencies whose upstream identity can change or be reclaimed.

Key terms

  • Repojacking: Repojacking is the takeover of a deleted or renamed repository namespace so an attacker can publish malicious code under a previously trusted path. In software supply chains, the attack works because the name still looks legitimate to dependency resolvers even after the original owner has lost control.
  • Dependency Confusion: A supply chain attack in which a build system resolves a malicious public package instead of an intended internal one because of naming, versioning, or registry precedence. The risk is not only code substitution but automatic execution inside trusted pipelines that already contain valuable credentials.
  • Pseudo-Version: A pseudo-version is a Go module version derived from a specific commit rather than a standard release tag. It can improve traceability, but it also creates a persistence risk if a malicious or abandoned commit is cached and later consumed as if it were a trusted release artifact.
  • Proxy-Cached Artifact: A proxy-cached artifact is a module copy preserved by an intermediary distribution service rather than fetched directly from the original source each time. This improves availability and reproducibility, but it also means malicious code can persist even after the upstream repository changes or disappears.

Deepen your knowledge

NHI Mgmt Group covers identity security, NHI governance, and agentic AI through independent research, practitioner guides, and the NHI Foundation Level course. It is designed for practitioners who need to connect identity controls to broader security and supply-chain governance.
NHIMG Editorial Note
Published by the NHIMG editorial team on August 18, 2026.
Updated on October 12, 2026.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org