T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Third-Party Runtime Dependency Lacks Artifact Integrity Verification
- Content
View full analysis
Vulnerability Details
File Location:
requirements.txt:1;nornr_governance.py:1-17
Vulnerability Type: Third-party supply-chain dependency without hash verification or locally auditable implementation
Risk Level: MediumComplete Code Snippet
requirements.txt:1:text nornr-agentpay==0.1.0nornr_governance.py:1-17:python import sys try: from agentpay.openclaw import openclaw_cli except ImportError as exc: # pragma: no cover - install-time guard sys.stderr.write( "Missing dependency: agentpay\n" "Install the pinned NORNR SDK dependency first:\n" " python -m pip install -r requirements.txt\n" "Pinned package release:\n" " nornr-agentpay==0.1.0\n" ) raise SystemExit(1) from exc if __name__ == "__main__": raise SystemExit(openclaw_cli())Technical Analysis
The project delegates all executable governance behavior to the external
nornr-agentpaypackage. The requirement is version-pinned, which prevents ordinary upgrades to another version, but it does not use package hashes or include the dependency source in the audited artifact. Consequently, this audit cannot verify the dependency's import-time behavior, network destinations, credential handling, filesystem access, subprocess use, or implementation of approval decisions.Python executes top-level package code during the following import:
python from agentpay.openclaw import openclaw_cliThe imported function then receives control of the process through:
python raise SystemExit(openclaw_cli())Therefore, the security of the skill depends almost entirely on the integrity of the externally distributed package. Version pinning alone does not cryptographically ensure that the installed artifact is the exact artifact reviewed by an operator.
Attack Path
A feasible supply-chain exploitation path is:
- An operator follows the documented installation command and runs `python -m pi ...[truncated 1815 chars]
- Remediation
View remediation
Remediation Suggestions
-
Require cryptographic package hashes
- Generate a lock file containing hashes for the exact approved wheel or source distribution.
- Install with
pip --require-hashesso an artifact that differs from the reviewed package is rejected.
-
Lock the complete dependency graph
- Resolve and pin every transitive dependency rather than only the direct
nornr-agentpayrequirement. - Review dependency changes before updating the lock file.
- Resolve and pin every transitive dependency rather than only the direct
-
Audit the delegated implementation
- Review the source corresponding exactly to
nornr-agentpay==0.1.0. - Verify import-time behavior, network endpoints, TLS validation, credential storage, subprocess execution, filesystem operations, and approval-state handling.
- Preserve the reviewed source revision and artifact hashes as audit evidence.
- Review the source corresponding exactly to
-
Strengthen release provenance
- Verify package ownership and the relationship between the documented source repository and the published PyPI artifact.
- Prefer signed releases, attestations, and reproducible builds where available.
- Use a controlled internal package mirror containing only approved artifacts.
-
Apply least privilege
- Use a dedicated NORNR API key rather than a general operator credential.
- Grant only the scopes required by the enabled commands.
- Do not grant optional finance or webhook scopes unless those features are actually used.
- Rotate the key if dependency integrity is ever uncertain.
-
Isolate runtime execution
- Run the bridge under a dedicated, unprivileged operating-system account or sandbox.
- Restrict filesystem access and outbound network destinations to those strictly required.
- Avoid exposing unrelated credentials through the process environment.
-
Fail closed at the calling workflow
- Ensure dependency errors, malformed responses, unavailable services, queued states, and blocked states cannot be interpreted as approval.
- Require an ...[truncated 88 chars]
-
