T08 · Insecure Dependencies
- Location
SKILL.md:29- Finding
Unpinned External Repository and Dependency Execution
- Content
View full analysis
=1.40.0" }, "installation": { "steps": [ "git clone https://github.com/mbahar/oto.git ~/oto", "cd ~/oto && npm install", "cp -r oto-sessions ~/.openclaw/skills/" ], "verification": "node ~/oto/scripts/list-sessions.js" } ``` The downloaded implementation is subsequently loaded by `scripts/launch-session.js:21-25`: ```js const { launchSession, hasSession } = require( process.env.OTO_PATH ? `${process.env.OTO_PATH}/lib/session-manager` : `${require('path').join(require('os').homedir(), 'oto/lib/session-manager')}` ); ``` The same external module-loading pattern appears in `scripts/check-session.js:18-22`. ### Technical Analysis The installation procedure clones the current default branch of an external Git repository without selecting a reviewed commit, signed tag, or immutable release. It then runs `npm install` without a lockfile or documented integrity verification. Consequently, the code and dependency graph installed by users may differ from the versions examined when this skill was reviewed. The semver range `">=1.40.0"` also has no upper bound and permits future Playwright releases to be selected. Running `npm install` can execute package lifecycle scripts. After installation, the local wrappers directly load and execute the external Oto session manager. That component operates on authenticated browser contexts and saved ses ...[truncated 1949 chars]- Remediation
View remediation
``` 2. Prefer a signed release and verify its signature or published SHA-256 checksum before installation. 3. Include and maintain a reviewed lockfile for every npm dependency tree. Use: ```bash npm ci ``` rather than unconstrained `npm install`. 4. Replace open-ended dependency ranges with exact reviewed versions, for example: ```json { "dependencies": { "playwright": "1.x.y" } } ``` 5. Review npm lifecycle scripts before installation. Where compatible with the dependency set, install using: ```bash npm ci --ignore-scripts ``` and explicitly run only the required, reviewed setup operations afterward. 6. Vendor the security-critical session manager into the audited distribution, or publish it as a versioned package with integrity metadata, so that the code handling browser sessions is included in the review boundary. 7. Add automated dependency auditing, provenance verification, and update review procedures. Dependency updates should require security review before changing the pinned commit or lockfile. 8. Validate `OTO_PATH` against an explicitly trusted directory before loading modules from it, and document that an untrusted environment value results in arbitrary local JavaScript execution. ]]>
