Blog Supply chain security

OWASP Top 10 Risks for Open Source Software: Controls

A technical guide to all ten OWASP OSS risks and the inventory, provenance, maintenance, licensing, update, and dependency controls they require.

OWASP Top 10 Risks for Open Source Software: Controls, Infosec Writing Studio article image

The OWASP Top 10 Risks for Open Source Software is a list of security, operational, and licensing risks created by third-party components. It covers known vulnerabilities, compromised packages, name confusion, missing maintenance, old versions, untracked dependencies, license problems, immature projects, mutable components, and dependencies whose size does not fit their use.

The official OWASP open source project page makes a useful distinction: CVEs describe only part of OSS risk. A package without a known vulnerability can still be malicious, abandoned, mislabeled, mutable, legally incompatible, or far larger than the functionality an application needs.

Open source risk begins before installation and continues after release. Teams choose a component and version, obtain it through a registry, resolve transitive dependencies, build it into artifacts, monitor new information, and eventually update or remove it. A control at one stage cannot replace the others.

Key Takeaways

  • Inventory direct, transitive, bundled, generated, build-time, and runtime components using evidence from source and shipped artifacts.
  • Evaluate provenance, maintainer security, release integrity, project health, license, and functional fit beside vulnerability data.
  • Pin immutable versions, verify artifacts, use controlled repositories, and require review before dependency changes reach trusted builds.
  • Assign an owner and update or replacement plan for every material dependency before adoption creates an unsupported production commitment.

Why CVE Scanning Is Not Enough

A vulnerability scanner compares component identity and version with known advisories. It may also estimate reachability or exploitability. That process cannot show whether the package publisher was compromised, a lookalike name was installed, a mutable download changed, or the project will respond to the next security report.

Inventory also has limits. A software bill of materials records component identity and relationships, but it does not prove that a release came from the stated source or that its maintainers follow safe practices. SBOM, provenance, signatures, project assessment, and runtime exposure answer different questions.

The OWASP list includes license and dependency-size risks because they affect whether software can be used and maintained safely. Security review that ignores them can leave teams unable to update, redistribute, or replace a component during an incident.

OWASP Open Source Software Top 10 Risks Explained

OSS-RISK-1: Known vulnerabilities

A component version may contain a publicly disclosed weakness identified through a CVE, security advisory, project notice, or other report. Severity scores help comparison but do not establish whether the vulnerable function is reachable in the deployed application.

Continuously identify components across source, images, systems, and deployed artifacts. Prioritize with affected configuration, reachability, exploit maturity, internet exposure, business impact, and sources such as the CISA Known Exploited Vulnerabilities Catalog. Patch, mitigate, isolate, or remove the component under a documented decision.

OSS-RISK-2: Compromise of legitimate package

Attackers can take over a maintainer account, source repository, build service, registry, domain, or distribution path and publish malicious code under a trusted project name. A valid version and clean vulnerability scan may not detect this change.

Verify publisher and artifact provenance, protect internal mirrors, and review unexpected ownership or release behavior. Pin and inspect updates before use, verify signatures or attestations where available, and isolate package installation. Prepare to locate and replace a compromised version across every environment.

OSS-RISK-3: Name confusion attacks

Name confusion uses typosquatting, namespace differences, brand impersonation, or familiar naming patterns to make a malicious package look legitimate. Automated installation can execute the package before a reviewer notices the wrong identity.

Use allowlisted package coordinates and controlled repositories, reserve internal names in public ecosystems where appropriate, and block unexpected sources. Review publisher, repository, install scripts, age, version history, and dependency graph before adoption. A similar display name should never substitute for exact namespace identity.

OSS-RISK-4: Unmaintained software

An unmaintained project may stop reviewing reports, patching vulnerabilities, updating dependencies, or supporting new platforms. The last release date alone does not prove abandonment, but missing maintainers and unanswered security issues create a practical response risk.

Assess maintainer activity, security policy, issue response, release cadence, supported versions, governance, and downstream community. Assign an internal owner and replacement option for important components. Forking is a real maintenance commitment, not a label that removes the risk.

OSS-RISK-5: Outdated software

An application may use an old component even though the project maintains a newer release. Teams often delay updates because of breaking changes, weak tests, transitive constraints, or unclear ownership.

Track version age and support state beside known vulnerabilities. Use automated update proposals with tests, small upgrade intervals, compatibility policy, and explicit service-level targets. Remove version pins that no owner can explain, while retaining reproducibility and review.

OSS-RISK-6: Untracked dependencies

Dependencies may enter through package managers, copied source, bundled archives, base images, operating-system packages, build tools, IDE extensions, generated clients, or installation scripts. A manifest-only scanner misses components included outside its ecosystem.

Generate inventory from source and final artifacts, then reconcile the results. Record direct and transitive relationships, component hashes, origin, scope, and environment. Test the process with deliberately bundled files and packages installed during container or pipeline execution.

OSS-RISK-7: License risk

A component may lack a license, use terms incompatible with distribution or service operation, include files under conflicting terms, or create regulatory restrictions. Package metadata can be incomplete, and the repository may contain notices that change the analysis.

Define approved license policy with legal input and scan both metadata and included files. Record obligations such as attribution, source availability, notices, or redistribution conditions. Resolve exceptions before release and preserve license evidence with the shipped artifact.

OSS-RISK-8: Immature software

An immature project may lack tests, documentation, versioning, review rules, security contacts, or release discipline. The component can create reliability and security work even when its current code has no disclosed vulnerability.

Evaluate development practices and operational fit before adoption. Review tests, CI, documentation, release process, issue handling, contributor concentration, binary content, and downstream use. Run the component under expected load and failure conditions rather than relying on repository badges.

OSS-RISK-9: Unapproved change

A dependency is mutable when the same reference can return different content. Examples include floating branches, unversioned scripts, overwritten tags, image tags without digests, and downloads whose integrity is not verified.

Use immutable revisions and content digests, verify signatures or checksums, and retrieve through secure controlled channels. Lock files should travel with source review. Build systems must fail when resolved content differs from the approved record instead of silently accepting the change.

OSS-RISK-10: Under-sized or over-sized dependency

A very small package can introduce maintainer, registry, update, and transitive risk for a few lines of functionality. A very large framework can add unused code, dependencies, configuration, and attack surface when the application needs one feature.

Compare functionality received with lifecycle cost and reachable code. Prefer platform capabilities or small internal implementations only when the maintenance tradeoff is understood. For large packages, use modular distributions, disable unused features, and monitor the full included dependency graph.

A Practical OSS Adoption Review

Start with exact identity: ecosystem, namespace, package, version, source repository, publisher, artifact digest, and license. A package name without ecosystem and namespace is ambiguous. Preserve the reviewed artifact and metadata rather than depending on a registry page that can change.

Next assess project and release behavior. Review maintainers, security reporting, recent releases, open issues, build provenance, installation hooks, bundled binaries, dependencies, tests, and documentation. A popular project can still have concentrated publishing authority or unsafe release automation.

Finish with application context. Record what function the component provides, which code paths are reachable, what privileges it receives, which data it handles, and how difficult replacement would be. Adoption is a production dependency decision, not a one-time developer convenience.

Inventory Should Match the Shipped Artifact

Manifest and lock files describe intended resolution, while build steps can add or remove content. Container stages, vendoring, bundling, code generation, native compilation, and manual downloads create differences between source inventory and release output.

Scan the final package, image, firmware, or deployment artifact and compare it with source records. Investigate components that appear only in one view. Store the resulting SBOM with artifact digest and provenance so future vulnerability queries target the bytes that were actually released.

Inventory quality also includes identity confidence. A scanner may infer a package from filenames without proving version or origin. Retain evidence and mark uncertain matches instead of turning guesses into authoritative records.

How to Prioritize OSS Findings

Start with active exploitation, reachable vulnerable behavior, high privilege, sensitive data, internet exposure, and production spread. Add project maintenance and replacement difficulty because a serious issue in an abandoned dependency may take longer to resolve than the score suggests.

Package compromise and name confusion require fast containment even without a CVE. Identify every installation, block further downloads, preserve artifacts, rotate exposed credentials, and review build and developer activity. Vulnerability-only workflows often miss this response path.

Licensing and maturity need owners outside the vulnerability queue. Define separate decisions and service targets, then combine them in the component risk record. One numerical score can hide materially different work.

OSS, SCA, SBOM, and CI/CD Controls Have Different Jobs

Software composition analysis identifies components and known issues. An SBOM records component inventory and relationships. Provenance describes how an artifact was produced, while the OWASP CI/CD Security Top 10 guide examines the trusted pipeline that resolves and packages dependencies.

These controls reinforce one another. A signed artifact with an incomplete inventory leaves responders blind, while a complete SBOM cannot prove that the build used the reviewed source. Review the chain from dependency decision to deployed artifact.

Frequently Asked Questions

What is the OWASP Open Source Software Top 10?

It is an OWASP list of ten security, operational, and licensing risks associated with open source components. The list extends beyond known vulnerabilities to cover provenance, project health, tracking, mutability, and dependency fit. Teams can use it for adoption, monitoring, and incident-response reviews.

Is an SBOM enough to manage open source risk?

An SBOM records component identity and relationships, but it does not prove provenance, maintenance quality, license suitability, or safe behavior. It can also be incomplete if build tools add untracked content. Pair SBOMs with artifact verification, project assessment, vulnerability monitoring, and deployment evidence.

What is the difference between unmaintained and outdated software?

Unmaintained software lacks active project support for the component or version. Outdated software means the consumer uses an older release while a newer one exists. A dependency can be both outdated and unmaintained, but the remediation options and ownership questions differ.

How should teams evaluate a new open source dependency?

Confirm exact identity, publisher, source, version, digest, license, and dependencies before installation. Review project maintenance, security process, release integrity, installation behavior, requested privilege, and functional fit. Record an owner, update method, monitoring source, and replacement plan before production use.

Continue your research

Use the Reference Indexes for Definitions and Evergreen Guidance.

Editorial support

Need a Security Article Researched, Written, or Reviewed?