The trust model fails because reviewers often inspect install scripts while ignoring code that runs as soon as a dependency is required. That makes transitive packages an execution path, not just a distribution path. Teams should review require-time behaviour, treat dependency changes as code execution changes, and assume a compromised maintainer or republished package can reach developer secrets quickly.
Why This Matters for Security Teams
When a package can execute code during normal library load, the trust boundary shifts from “approved dependency” to “active code execution.” That is materially different from a package that only exposes static assets or build-time helpers. Reviewers who focus on install-time scripts miss the more dangerous path: code that runs simply because another service imports the library. The result is that transitive dependencies can reach secrets, network paths, and developer tooling before any runtime guardrail has a chance to intervene.
This matters because the blast radius is often larger than teams expect. A compromised maintainer, republished package, or malicious update can trigger code execution in environments that were assumed to be low risk. NIST’s NIST SP 800-53 Rev 5 Security and Privacy Controls frames this as a control problem, but the operational reality is an execution-path problem: dependency trust is not the same as code safety. NHIMG research on the LiteLLM PyPI package breach shows how quickly package trust can be turned into credential exposure once code is able to run in the consuming environment.
In practice, many security teams encounter this only after a dependency update has already touched developer secrets or CI tokens, rather than through intentional review of require-time behaviour.
How It Works in Practice
The key distinction is between install-time behaviour and load-time behaviour. Install-time scripts run during package installation; load-time code runs when the library is imported or required, which can happen implicitly inside application startup, tests, notebooks, or agent toolchains. For a trusted package, that means the library itself becomes an execution path. If that package sits deep in the dependency tree, the consuming team may never have reviewed the code that actually runs.
Current guidance suggests treating dependency changes as code execution changes. That means reviewing require-time side effects, not just package metadata or install hooks. Security teams should look for filesystem access, subprocess execution, environment variable reads, outbound network calls, dynamic imports, and any access to local credential stores. Where possible, pin versions, verify provenance, and isolate build and test environments so imported dependencies cannot reach long-lived secrets.
A practical control set often includes:
- Dependency allowlisting for high-trust paths and explicit approval for transitive updates.
- Static analysis for import-time side effects and suspicious module initializers.
- Short-lived credentials in CI and development so load-time code cannot harvest durable secrets.
- Segmentation between package installation, test execution, and production runtime.
- Runtime egress controls so imported code cannot silently beacon or exfiltrate data.
For broader NHI governance, NHIMG’s DeepSeek breach analysis is a useful reminder that exposed credentials and latent execution paths often compound each other. The same pattern is reflected in NIST’s control model for system integrity and least privilege, but teams still need dependency-level review because package ecosystems move faster than formal control refresh cycles. These controls tend to break down when dynamic plugin systems import packages at runtime because the actual execution path is discovered only after deployment.
Common Variations and Edge Cases
Tighter dependency review often increases release friction, requiring organisations to balance supply chain speed against the cost of deeper inspection. That tradeoff becomes sharper in ecosystems that encourage plugins, optional extras, or dynamic loading, because the package may appear harmless in a normal code scan while still executing privileged logic at import time.
There is no universal standard for every language runtime, but current guidance suggests the highest scrutiny should go to packages that can:
- Run initialization code on import or require.
- Access environment variables, tokens, or secret stores during module load.
- Trigger outbound requests before application policy is applied.
- Chain into other packages or tool adapters that expand the execution surface.
This is also where build systems and developer workstations matter. A package that is safe in production may still be dangerous if it runs in a developer shell with broad access to cloud credentials, signing keys, or local config files. The practical answer is to reduce the value of what load-time code can reach, not to assume dependency trust can be made perfect. If a package can execute during normal library load, treat that import as an execution event, not a passive library reference.
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, NIST SP 800-63, NIST Zero Trust (SP 800-207) 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-03 | Covers secret exposure from trusted software paths. |
| NIST CSF 2.0 | PR.AC-4 | Least privilege limits what import-time code can access. |
| NIST SP 800-63 | Strong auth and session hygiene reduce abuse after secret theft. | |
| NIST Zero Trust (SP 800-207) | SC.L2 | Zero trust limits implicit trust in dependencies and runtime paths. |
| NIST AI RMF | GOVERN | Governance is needed where software behaviour changes through supply chain updates. |
Assign ownership for dependency risk and review import-time behaviour as part of AI and software governance.