Audits Go modules and Maven/JVM dependencies for vulnerabilities, supply chain risks, and provenance issues using govulncheck, go mod verify, OWASP Dependency-Check, plus CI scanning checklists.
npx claudepluginhub habitat-thinking/ai-literacy-superpowers --plugin ai-literacy-superpowersThis skill uses the workspace's default tool permissions.
Dependencies are the largest attack surface in most projects. This skill provides a structured audit process for Go and Maven/JVM projects, combining static manifest review with tool-driven vulnerability scanning.
Audits project dependencies for vulnerabilities, licensing issues, outdated packages, and supply chain risks, providing prioritized remediation strategies.
Analyzes project dependencies for vulnerabilities, licensing issues, outdated packages, and supply chain risks. Provides prioritized remediation strategies and upgrade paths.
Audits direct and transitive dependencies for license compliance, maintenance health, CVEs, abandoned packages, and bloat. Supports Python, Node.js, Rust, Go via tools like pip-audit, npm audit, cargo audit.
Share bugs, ideas, or general feedback.
Dependencies are the largest attack surface in most projects. This skill provides a structured audit process for Go and Maven/JVM projects, combining static manifest review with tool-driven vulnerability scanning.
Critical rule: Never judge a dependency as safe or unsafe based on your knowledge of its version number. Version numbers in your training data are stale. Always run the tools.
replace directives in go.mod pointing to local paths or forksgo.sum is committed alongside go.modgovulncheck runs in CI and fails the build on known CVEsreplace directives substituting public modules with local or private alternativesgo mod verify passes (confirms module content matches go.sum hashes)[1.0,2.0))mvn dependency:tree)# Install once:
go install golang.org/x/vuln/cmd/govulncheck@latest
# Run from the module root:
govulncheck ./...
govulncheck cross-references the Go vulnerability database (https://vuln.go.dev/) against the specific functions your code actually calls — not just which modules are present. This means fewer false positives than tools that flag any version of a module with any CVE.
# Confirms every module in the build matches its go.sum hash.
# Fails if any module has been tampered with or if go.sum is stale.
go mod verify
# Print any replace directives in go.mod:
grep -A1 "^replace" go.mod
A replace directive substituting a public module with a local path (=> ../local-fork) or a private fork is a supply chain red flag — it bypasses the module proxy and checksum verification.
go list -m all
Review the output for unfamiliar or unexpected module paths.
# Run from the project root (downloads NVD data on first run — takes ~5 min):
mvn org.owasp:dependency-check-maven:check
# HTML report is generated at:
# target/dependency-check-report.html
# Show all direct and transitive dependencies with versions:
mvn dependency:tree
Look for:
com.googlecode.*, org.codehaus.*) where maintainer continuity may be uncertain# Version ranges in pom.xml allow Maven to silently pull newer versions:
grep -E "\[|,|\)" pom.xml
Any match is a risk: Maven may resolve a different version than was tested.
- name: Run vulnerability scan
working-directory: go-tui
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
Add the plugin to pom.xml under <build><plugins>:
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>9.0.9</version>
<executions>
<execution>
<goals><goal>check</goal></goals>
</execution>
</executions>
<configuration>
<!-- Fail build if any dependency has a CVSS score >= 7 (high) -->
<failBuildOnCVSS>7</failBuildOnCVSS>
</configuration>
</plugin>
Then in the CI workflow:
- name: Run OWASP dependency scan
working-directory: tui
run: mvn -B org.owasp:dependency-check-maven:check
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: gomod
directory: /go-tui
schedule:
interval: weekly
- package-ecosystem: maven
directory: /tui
schedule:
interval: weekly
CVE scanners tell you whether a dependency has a known vulnerability. They do not tell you how stale your dependency set is overall. A project can pass every CVE check while silently accumulating years of staleness across dozens of libraries — each one a growing risk window for undiscovered vulnerabilities, breaking API changes, and lost upstream support.
The libyear metric fills this gap. It sums, for every direct dependency, the number of years between the version you use and the latest release. A project at 2 libyears is reasonably current; a project at 15 libyears has significant staleness risk even if no individual dependency has a CVE today.
npx libyear
Produces a table showing each dependency, its current version, latest version, and age in years. The final line gives the total libyear score.
bundle exec libyear-bundler
Same tabular output for Bundler-managed gems.
pip list --outdated --format=columns
Python has no single libyear tool with broad adoption. Use
pip list --outdated to get current vs. latest versions, then calculate
the age delta manually: for each outdated package, find the release date
of your pinned version and the release date of latest on PyPI, and sum
the differences.
go list -m -u all
This lists every module dependency and flags those with available updates. As with Python, calculate libyears manually: compare the date of your current version tag with the date of the latest version tag for each module that shows an update.
| Project size | Budget |
|---|---|
| Small (fewer than 20 direct dependencies) | < 10 libyears |
| Large (20+ direct dependencies) | < 20 libyears |
These are starting points. Adjust based on your risk tolerance and release cadence.
After completing the audit, produce a findings table:
## Dependency Audit
| Ecosystem | Finding | Severity | Fix |
| --- | --- | --- | --- |
| Go | `govulncheck` not in CI | Medium | Add govulncheck step to go-tui-tests.yml |
| Maven | OWASP Dependency-Check not in CI | Medium | Add plugin + CI step |
| Maven | `lanterna:3.1.1` — legacy com.googlecode group ID | Low | Verify provenance once; monitor for updates |
| All | No dependabot.yml for packages | Medium | Add gomod + maven ecosystems to dependabot.yml |
Severity guide:
For highest assurance, generate an SBOM and sign it:
# Using Syft (install from https://github.com/anchore/syft):
syft dir:. -o cyclonedx-json > sbom.json