{"id":76,"date":"2022-09-16T17:30:00","date_gmt":"2022-09-16T17:30:00","guid":{"rendered":"https:\/\/baecke.io\/?p=76"},"modified":"2022-09-16T17:30:00","modified_gmt":"2022-09-16T17:30:00","slug":"software-supply-chain-security-devsecops-gap","status":"publish","type":"post","link":"https:\/\/baecke.io\/?p=76","title":{"rendered":"Software Supply Chain Security: The DevSecOps Gap That Enterprises Are Only Now Starting to Close"},"content":{"rendered":"<h2>What Log4Shell Revealed About Enterprise Software Practices<\/h2>\n<p>Log4Shell was not primarily a story about a vulnerability in a logging library. It was a story about how little most enterprises know about the open source components embedded in their production software. When the vulnerability was disclosed in December 2021, the first question every security team was asked was: where are we exposed? For most, the honest answer was that they did not know, and finding out would take time they did not have.<\/p>\n<p>The exposure was as pervasive as the response was unprepared. Log4j is embedded in Java applications across every industry, in commercial software products that do not publish their dependency manifests, in infrastructure components that enterprises deploy without inspecting their composition. The organisations that could answer the exposure question within hours had invested in software composition analysis and maintained current software bill of materials for their applications. The ones that were still investigating weeks later had not.<\/p>\n<p>Log4Shell is the most visible example of a category of risk that predates it and will outlast it. The software supply chain, meaning the open source libraries, commercial dependencies, and third-party components that make up modern enterprise software, represents an attack surface that most organisations have historically managed by not looking at it. The Log4Shell response forced a look, but the look has produced inconsistent action.<\/p>\n<h2>Where Enterprise Programmes Are After One Year<\/h2>\n<p>The typical enterprise DevSecOps programme twelve months after Log4Shell has made two changes. It has added software composition analysis tooling to the CI\/CD pipeline. And it has added a software bill of materials requirement to some portion of its application portfolio.<\/p>\n<p>Both additions are improvements over the prior state. Neither is sufficient.<\/p>\n<p>Software composition analysis in the pipeline catches known vulnerabilities in declared dependencies at build time. It does not catch vulnerabilities in transitive dependencies that the build system resolves at compile time. It does not catch vulnerabilities in components that were embedded in the application before the SCA tool was added. It does not provide a process for responding to vulnerabilities discovered after deployment. And it does not address the dependencies embedded in infrastructure components, container base images, or commercial software that the enterprise deploys but does not build.<\/p>\n<p>Software bill of materials requirements applied to some applications create a gap between the applications covered and the ones not covered that is itself a governance problem. The vulnerable dependency is rarely in the most carefully governed application. It is in the application that was built before the policy was written, or the one that the team responsible for it did not know was in scope, or the commercial product for which the vendor has not published a machine-readable SBOM.<\/p>\n<p>The gap between where most enterprise programmes currently are and where they need to be is not primarily a tooling gap. The tools exist. It is a process and governance gap.<\/p>\n<h2>The Process Changes That Close the Gap<\/h2>\n<p>Dependency management policies with automated enforcement are the foundation. Most enterprise organisations have policies about which open source components can be used: licencing requirements, security vulnerability tolerance thresholds, approved component registries. Most of these policies exist as documents that development teams are expected to read and follow. Automated enforcement in the build pipeline converts policies from expectations to controls: a build that introduces a dependency with a known critical vulnerability fails rather than succeeds, and the development team must either remediate the vulnerability or obtain an explicit policy exception that creates an auditable record.<\/p>\n<p>Vulnerability response processes at the library level rather than the application level represent the most significant process gap in most programmes. The typical enterprise vulnerability response process is designed around CVEs identified in specific applications. When a library vulnerability is disclosed, the response identifies which applications use the affected library and assigns remediation to the teams owning those applications. This works when the number of affected applications is small and the remediation is straightforward. When a vulnerability affects hundreds of applications across dozens of teams, the application-centric response model cannot coordinate at the required scale. Library-level response, where a central team identifies the remediated version, validates it, and coordinates its deployment across all affected applications, is the process model that works at enterprise scale.<\/p>\n<p>Developer security training that covers supply chain risks specifically is largely absent from enterprise security training programmes. Secure coding training for web application developers typically covers OWASP Top 10 vulnerabilities: injection, authentication failures, XSS. Supply chain security adds a different category of concern: how to evaluate open source libraries before introducing them as dependencies, how to assess the security posture of a library&#8217;s maintainer community, how to identify the signals that indicate a library has been compromised or abandoned, and how to balance the productivity benefits of open source reuse against the security risk it introduces.<\/p>\n<p>Vendor assessment processes that include open source dependency governance are becoming standard for commercial software procurement in security-conscious organisations. A vendor that cannot produce a current SBOM for the product being procured, or that cannot demonstrate a process for responding to vulnerabilities in their dependencies, is a supply chain risk that the procurement conversation should surface before the contract is signed rather than after the vendor&#8217;s product becomes a vulnerability vector in the enterprise environment.<\/p>\n<h2>The Maturity Model for Assessing Current Posture<\/h2>\n<p>Supply chain security maturity can be assessed across four dimensions, each with a progression from reactive to managed.<\/p>\n<p>On inventory, the progression runs from &#8220;we do not know what open source components we use&#8221; through &#8220;we have SBOM for some applications&#8221; to &#8220;we have current, machine-readable SBOM for the full application portfolio including infrastructure components and commercial software.&#8221;<\/p>\n<p>On detection, the progression runs from &#8220;we learn about vulnerabilities from public disclosure&#8221; through &#8220;we have SCA in our pipeline for new builds&#8221; to &#8220;we have continuous monitoring that identifies new vulnerabilities in already-deployed components and surfaces them to the responsible teams automatically.&#8221;<\/p>\n<p>On response, the progression runs from &#8220;we respond to vulnerabilities after they are exploited&#8221; through &#8220;we have a defined process for critical vulnerabilities in specific applications&#8221; to &#8220;we have a library-level response capability that can coordinate remediation across the full affected portfolio within defined SLA windows.&#8221;<\/p>\n<p>On governance, the progression runs from &#8220;open source usage is ungoverned&#8221; through &#8220;we have a policy but limited enforcement&#8221; to &#8220;we have automated enforcement of dependency policy at build time with exception management and audit logging.&#8221;<\/p>\n<p>Most enterprises sit at the second level across all four dimensions after their Log4Shell response. The investment required to reach the third level in each dimension is not primarily financial. It is process design, governance framework development, and the organisational change required to embed supply chain security practices in the development workflows where dependency decisions are made.<\/p>\n<h2>Starting Where the Risk Is Highest<\/h2>\n<p>The prioritisation framework for supply chain security investment starts with the applications that carry the most significant business risk: systems that process customer data, handle financial transactions, or control operational technology. These applications receive the highest investment in SBOM completeness, continuous vulnerability monitoring, and rapid response capability.<\/p>\n<p>The investment then extends through the application portfolio in order of risk, using the initial deployment to mature the process before applying it at scale. A supply chain security programme that attempts to implement the full maturity model across the entire portfolio simultaneously will create more governance debt than it resolves. One that starts with the highest-risk applications, learns from that deployment, and extends systematically will reach maturity faster and with more durability.<\/p>\n<p>Log4Shell provided the urgency. The question is whether that urgency has been converted into a durable programme or a compliance response that addressed the immediate problem without building the capability that addresses the category.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Log4Shell made software supply chain security a board-level topic. A year later, most enterprise DevSecOps programmes have added tooling to their pipeline but haven&#8217;t addressed the deeper process and governance gaps that make supply chain security genuinely effective.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-operating-models"],"_links":{"self":[{"href":"https:\/\/baecke.io\/index.php?rest_route=\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/baecke.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/baecke.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/baecke.io\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/baecke.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":0,"href":"https:\/\/baecke.io\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"https:\/\/baecke.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/baecke.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/baecke.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}