Dependency scanning
De agent walkt elke 6h een aantal standaard project-locaties en parset lockfiles per package manager. Alleen (name, version, ecosystem, is_direct) tuples + het project_path worden naar de hub gestuurd — nooit file-inhoud, nooit env vars, nooit secrets.
Welke paden worden gescand
/var/www/opt/srv/home/<user>/root/var/lib/jenkins/workspaceC:\inetpub\wwwroot (Windows)C:\Program Files\nodejs (Windows)Diepte: max 6 niveaus. Skipt node_modules, vendor, .git, .svn, .idea, .vscode, target, build, dist, __pycache__, en alles dat met . begint.
Welke lockfiles worden herkend
| Bestand | Ecosystem |
|---|---|
package-lock.json (npm v1/v2/v3) | npm |
yarn.lock | npm |
pnpm-lock.yaml | npm |
requirements.txt | PyPI |
Pipfile.lock | PyPI |
composer.lock | Packagist |
Gemfile.lock | RubyGems |
go.sum | Go |
Niet (yet) ondersteund: Cargo.lock, pubspec.lock, mix.lock, Maven pom.xml. PR’s welkom.
Caps om payload te bounden
- Max 100 projecten per host
- Max 20.000 packages totaal per host
node_modules-style transitives worden meegenomen maaris_direct=falsegemarkeerd
Wat de hub ermee doet
De DependencyScanWorker neemt elke 30s (cold-start) of 6h (steady) alle unique (ecosystem, package_name, version) tuples uit inventory_dependencies en batch-queryt https://api.osv.dev/v1/querybatch (1000 tuples per call). Per match wordt de vuln-detail opgehaald van /v1/vulns/<id>, severity genormaliseerd, en geschreven naar inventory_dependency_cves.
Endpoint: GET /api/v1/agents/:id/inventory/dependencies → returnt:
{ "projects": [ { "project_path": "/var/www/api", "manifest": "package-lock.json", "ecosystem": "npm", "dep_count": 1248, "direct_count": 47, "cve_count": 89, "critical_count": 3 } ], "cves": [ { "vulnerability_id": "GHSA-9jj7-4m8r-rfcm", "severity": "CRITICAL", "package_name": "jackc/pgx/v5", "installed_version": "5.7.0", "fixed_version": "5.9.0", ... } ]}Privacy
Wat WEL naar de hub gaat:
- Project pad (bv.
/var/www/api) - Package naam + versie
- Ecosystem label
- Direct/transitive flag
Wat NIET naar de hub gaat:
- Lockfile-inhoud
- Andere bestanden in het project (geen
.env, geen broncode) - Sha256 van de lockfile zelf
- Env vars uit het project
De npm ls output op de host zelf onthult exact dezelfde informatie aan iedereen met shell-toegang. We sturen niet meer dan dat.
Wat te doen met findings
inventory_dependency_cves rijen zijn idle data zonder operator-actie. Je kan ze:
- Bekijken in
/agents/<id>→ Dependencies tab (per agent, per project) - Fleet-wide doorzoeken in
/inventory(filter op CVE-id, package, severity) - Alert rule maken: trigger als een agent met tag
production≥1 CRITICAL dependency-CVE heeft (combineerbaar met threshold + duration) - CSV exporteren voor je security-team
Limitaties die je moet weten:
- Geen typosquatting-detectie (
react-domvsreact.dom). OSV.dev matcht alleen op exacte (pakket, versie). - Geen malicious install-script-detectie (post-install hooks die backdoors plaatsen).
- Geen detectie van gecompromitteerde maintainer accounts waar legitieme versies plots malicious worden.
Voor die drie zou je tools zoals Socket.dev of npm audit signatures (sigstore) moeten toevoegen — staat op de roadmap.