Join our Newsletter — 33% off our NHI Course
Home FAQ Cyber Security What happens when organisations rely on direct dependency…
Cyber Security

What happens when organisations rely on direct dependency reviews but ignore transitive dependencies?

← Back to all FAQ
By NHI Mgmt Group Editorial Team Updated September 8, 2026 Domain: Cyber Security

Organisations can miss the largest part of their real attack surface. Direct packages may be reviewed carefully, but their nested dependencies can introduce malicious code, unlicensed components, or exploitable flaws long after initial approval. That creates blind spots in software composition analysis, slows remediation, and leaves teams reacting to problems they did not know they had.

Why Direct Reviews Miss the Dependency Chain Below Them

direct dependency review gives a useful first filter, but it does not describe the full software bill of materials that will actually run in production. The security problem is that trust is often assigned one layer too early: teams approve a top-level package, then inherit every nested library, build helper, and module that package pulls in. That is where integrity issues, unpatched flaws, licence conflicts, and hidden functionality can enter without being visible in the original review.

For security teams, the practical consequence is that approval decisions become stale faster than release cycles. A dependency tree can change when maintainers update sub-dependencies, when lockfiles are refreshed, or when a build pipeline resolves a different version than the one that was reviewed. Control reviews that stop at the first level therefore create a false sense of coverage, especially when organisations assume their pipeline is already checking everything downstream. NIST’s control family on configuration and software integrity is relevant here because the question is fundamentally about whether approved software remains the same trusted software over time. NIST SP 800-53 Rev 5 Security and Privacy Controls In practice, many security teams discover the dependency they should have been watching only after a nested package has already changed the behaviour of the application.

How the Risk Emerges in Real Software Supply Chains

Direct dependency review answers only one question: “Do we trust this named package?” transitive dependency review answers the more important one: “Do we trust everything that package will execute, compile, or bundle into the final artefact?” In modern build systems, that chain can be deep, dynamic, and environment-dependent. A package may be safe at the top level but still drag in an outdated parsing library, a vulnerable compression module, or a maintainer-controlled helper that receives less scrutiny than the primary package.

That matters because the failure modes are not limited to obvious malware. A transitive component can introduce a known vulnerability, a dependency confusion path, a compromised release, or an unwanted licence obligation. It can also break reproducibility if the build is not pinned tightly enough, meaning the artefact reviewed last week is not necessarily the artefact deployed today. The problem is amplified when organisations rely on automated allowlists without validating whether the nested graph has changed between releases.

  • Direct review checks the package you chose.
  • Transitive review checks the packages your package chose.
  • Build controls determine whether the graph stays stable after approval.
  • Software composition analysis only helps when it covers the full resolved tree, not a partial view.

In practice, the gap usually appears where procurement-style approval is treated as equivalent to runtime assurance, even though the build pipeline can resolve different components later on.

Where the Dependency Problem Becomes Hard to Contain

Tighter dependency scrutiny often increases engineering overhead, requiring organisations to balance release speed against assurance depth. The trade-off is real: the more layers a team inspects, the more exceptions, false positives, and update work it must manage. That is why the strongest programmes distinguish between “reviewed” and “continuously governed” rather than assuming a one-time approval is enough.

There is also an important consensus point: the industry agrees that transitive dependencies must be visible, but there is less agreement on how much manual review is proportionate for every layer. For low-risk internal tooling, automated policy and pinned versions may be enough. For high-impact applications, especially those handling secrets, regulated data, or privileged actions, teams should treat nested dependency changes as a control event, not a routine housekeeping update. The right answer depends on the exposure of the application, the maturity of the build process, and the consequences if a hidden dependency fails or turns hostile.

Some edge cases are especially awkward. Package managers may resolve dependencies differently across platforms, optional features can pull in extra modules only in certain environments, and vendored code can hide third-party content from casual review. That is why a dependency policy should define what counts as an approved graph, what must be pinned, and what triggers re-review. Where organisations do not control those boundaries, direct review becomes little more than a partial snapshot of a moving target.

Risk and Threat Considerations

The material risk is supply-chain exposure through uninspected nested components. Even when the top-level package is legitimate, a transitive dependency can carry a vulnerable code path, malicious update, or hidden build-time behaviour that widens the attack surface without changing the visible approval record.

Failure mechanism: Attackers and compromised maintainers exploit trust in upstream packages, then reach downstream applications through dependency resolution, version drift, and incomplete composition analysis. The control fails when organisations assume first-level review is equivalent to full graph assurance.

Impact: The application can inherit exploitable flaws, integrity issues, licence violations, or altered runtime behaviour, while defenders remain blind to the true source of exposure and slow to remediate.

Standards & Framework Alignment

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

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

FrameworkControl / ReferenceRelevance
CIS Controls v815 — Service Provider ManagementCovers third-party software and supplier dependency risk in the supply chain.
16 — Application Software SecurityDirectly addresses secure software development and composition review coverage.
Recommendation — Map nested dependency oversight into supplier controls and require visibility into downstream components. Scan the full dependency tree and gate releases on composition findings across nested packages.
NIST CSF 2.0GV.SC-04 — Supplier Risk ManagementApplies to software supply-chain dependency exposure and downstream trust boundaries.
ID.SC-5 — Response and Recovery Plans and PlaybooksNested dependency failures often require faster response and recovery decisions.
Recommendation — Extend supplier oversight to transitive components and verify downstream dependency changes. Include dependency-chain failure scenarios in response plans and recovery playbooks.
MITRE ATT&CKT1195 — Supply Chain CompromiseTransitive dependencies are a classic supply-chain compromise path into software environments.
Recommendation — Hunt for compromised dependency paths and validate upstream package integrity before release.

Practitioner Guidance

What to prioritise: Treat the resolved dependency graph, not the top-level package list, as the unit of review when the application is externally exposed, privilege-bearing, or handles sensitive data. If the component can change what the system executes or bundles, it belongs in scope for governance.

What to verify: Confirm that your tooling reports transitive depth, resolved versions, and changes between builds, not just declared dependencies. If the build output can differ from the reviewed input, the approval process is incomplete.

Common mistake: Teams often confuse “we approved the package” with “we approved the code that will actually run.” That shortcut usually fails when lockfiles are refreshed, optional modules are enabled, or upstream maintainers release a nested update.

Practitioner takeaway: Dependency risk is cumulative, so the real control question is whether your approval model follows the software that ships, not just the software you first selected.

Deepen Your Knowledge

Sign up to our weekly newsletter — get 33% off our NHI Foundation Level Course

    NHIMG Editorial Note
    Reviewed and updated by the NHIMG editorial team on September 8, 2026.
    NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org