<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://chtiangg.github.io/slsa/feed.xml" rel="self" type="application/atom+xml" /><link href="https://chtiangg.github.io/slsa/" rel="alternate" type="text/html" /><updated>2023-06-14T14:22:53+00:00</updated><id>https://chtiangg.github.io/slsa/feed.xml</id><title type="html">SLSA</title><subtitle>SLSA: Security framework to ensure software supply chain integrity</subtitle><entry><title type="html">Announcing Container-based SLSA 3 Builder on GitHub Actions</title><link href="https://chtiangg.github.io/slsa/blog/2023/06/slsa-github-worfklows-container-based" rel="alternate" type="text/html" title="Announcing Container-based SLSA 3 Builder on GitHub Actions" /><published>2023-06-13T00:00:00+00:00</published><updated>2023-06-13T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/06/slsa-github-worfklows-container-based</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/06/slsa-github-worfklows-container-based">&lt;p&gt;Following the recent &lt;a href=&quot;https://openssf.org/press-release/2023/04/19/openssf-announces-slsa-version-1-0-release/&quot;&gt;launch of SLSA v1.0&lt;/a&gt;, we’re announcing a new, &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/docker&quot;&gt;GitHub Actions workflow&lt;/a&gt; that achieves SLSA Build Track Level 3 for provenance generation. This lets users generate &lt;a href=&quot;/spec/v1.0/requirements#provenance-unforgeable&quot;&gt;unforgeable provenance&lt;/a&gt;, allowing consumers to trust &lt;em&gt;and&lt;/em&gt; verify how their software artifacts were built. The container-based SLSA 3 builder is the result of a collaboration between the Google Open Source Security Team (GOSST), the SLSA community, and &lt;a href=&quot;https://github.com/project-oak/oak&quot;&gt;Project Oak&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;stronghow-it-worksstrong&quot;&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;The new container-based SLSA 3 builder runs a containerised build in a secure environment and generates an unforgeable provenance statement of the execution, all in an ecosystem-agnostic way that’s easy to add to your GitHub CI.&lt;/p&gt;
&lt;p&gt;To ensure unforgeability of provenance, the container-based SLSA 3 builder uses the same secure build mechanisms used in other SLSA builders and generators, relying on GitHub reusable workflows and ephemeral VM containers for isolation. For more details, see the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/blob/main/SPECIFICATIONS.md&quot;&gt;technical design document&lt;/a&gt;. As before, we rely on OpenID Connect (OIDC) with &lt;a href=&quot;https://www.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt; tooling to prove the identity of the workflow. These provide the workflow identity guarantees described in &lt;a href=&quot;https://security.googleblog.com/2022/04/improving-software-supply-chain.html&quot;&gt;an earlier blog post&lt;/a&gt; that announced the generic SLSA 3 generator.&lt;/p&gt;
&lt;p&gt;The builder allows a developer to run a custom command in &lt;a href=&quot;https://opencontainers.org/&quot;&gt;a container&lt;/a&gt; in a secure environment, which gives the developer full control of the environment and customization of the container’s function. For example, the developer may choose to use the command to build a binary artifact, or produce metadata like &lt;a href=&quot;https://securityscorecards.dev/&quot;&gt;OpenSSF’s Scorecard&lt;/a&gt; reports.&lt;/p&gt;
&lt;h2 id=&quot;strongenhanced-provenance-verification-with-the-new-workflowstrong&quot;&gt;&lt;strong&gt;Enhanced provenance verification with the new workflow&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The container-based SLSA 3 builder differs from earlier builders and generators in the content of the generated provenance statements, and therefore how they can be verified. Like all provenance generated by all SLSA 3 builders and generators, you can trace the binary to its source code and verify the builder’s identity—and now, you can additionally perform detailed verification of the build process.&lt;/p&gt;
&lt;p&gt;For instance, the provenance produced by the generic &lt;a href=&quot;/_posts/2022-08-29-slsa-github-workflows-generic-ga&quot;&gt;SLSA 3 provenance generator minimally contains&lt;/a&gt; the source GitHub repository and a reference to the workflow file that built the artifact. This workflow may contain any operation, ranging from copying a pre-built binary from another resource to running a massive build script. Because the provenance does not include these details, verifiers need to audit the referenced workflow file to establish trust in the build process.&lt;/p&gt;
&lt;p&gt;The container-based SLSA 3 builder simplifies and enhances provenance verification by including the build process directly inside the provenance. This is enabled by a Docker-based build tool used internally in the container-based SLSA 3 builder for building the binaries and the new SLSA v1.0 provenance format. In particular, it includes the builder image and command directly inside the build definition:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;buildDefinition&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;buildType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://slsa.dev/container-based-build/v0.1?draft&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;externalParameters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git+https://github.com/slsa-framework/example-package@v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ca220e54c07b6fcdd758184a12c132ee3ae531f1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;builderImage&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rust@sha256:74ad9d14ec89bc4e83bf2a3d007fd981513ee4b44279b40d3a90c001a6ca938c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;74ad9d14ec89bc4e83bf2a3d007fd981513ee4b44279b40d3a90c001a6ca938c&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;configPath&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;.github/configs-docker/release-config.toml&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;buildConfig&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;ArtifactPath&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;target/release/my-rust-app&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cargo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;--release&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h1 id=&quot;strongnext-stepsstrong&quot;&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;If your builds are already containerized, we encourage you to give the container-based SLSA 3 builder a try—see the step-by-step guide in our &lt;a href=&quot;https://github.com/project-oak/hello-transparent-release/blob/main/README.md&quot;&gt;onboarding tutorial.&lt;/a&gt; Otherwise, we suggest containerizing your build, which also improves the &lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;reproducibility&lt;/a&gt; of your binaries, and adopting the container-based SLSA 3 builder.&lt;/p&gt;
&lt;p&gt;Once you have generated a SLSA provenance with the container-based SLSA 3 builder, the next step to complete the lifecycle is to provide instructions to &lt;a href=&quot;/spec/v1.0/verifying-artifacts&quot;&gt;verify the artifacts&lt;/a&gt;, including using the &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier&quot;&gt;slsa-verifier&lt;/a&gt; to verify the provenance. If you are using these artifacts in your own build pipeline, consider threat modeling your software supply chain and &lt;a href=&quot;/spec/v1.0/verifying-artifacts#forming-expectations&quot;&gt;building expectations&lt;/a&gt; for your build origins and process.&lt;/p&gt;
&lt;p&gt;Please share your success stories with us by creating a pull request to add your project to &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/docker/README.md#users&quot;&gt;the list of container-based SLSA 3 users&lt;/a&gt;. Feel free to create issues on the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator&quot;&gt;repository&lt;/a&gt; if you have noticed any issues, or are missing features you need. We look forward to fulfilling new requests and accepting new contributors to create even more useful features going forward.&lt;/p&gt;</content><author><name>Asra Ali, Razieh Behjati, Tiziano Santoro (Google)</name></author><summary type="html">Following the recent launch of SLSA v1.0, we’re announcing a new, GitHub Actions workflow that achieves SLSA Build Track Level 3 for provenance generation. This lets users generate unforgeable provenance, allowing consumers to trust and verify how their software artifacts were built. The container-based SLSA 3 builder is the result of a collaboration between the Google Open Source Security Team (GOSST), the SLSA community, and Project Oak.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bringing Improved Supply Chain Security to the Node.js Ecosystem</title><link href="https://chtiangg.github.io/slsa/blog/2023/05/bringing-improved-supply-chain-security-to-the-nodejs-ecosystem" rel="alternate" type="text/html" title="Bringing Improved Supply Chain Security to the Node.js Ecosystem" /><published>2023-05-11T00:00:00+00:00</published><updated>2023-05-11T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/05/bringing-improved-supply-chain-security-to-the-nodejs-ecosystem</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/05/bringing-improved-supply-chain-security-to-the-nodejs-ecosystem">&lt;p&gt;It has been a big month for supply chain security!
&lt;a href=&quot;https://github.blog/2023-04-19-introducing-npm-package-provenance/&quot;&gt;GitHub recently announced the public beta&lt;/a&gt;
for npm package provenance. This adds new functionality to npmjs.com and the npm
CLI that allows package maintainers to generate and upload SLSA Build Level 2
provenance along with their packages. Integration with
&lt;a href=&quot;https://www.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt; enables verification of signature and
certificate metadata so users know that the package came from the expected
source repository.&lt;/p&gt;
&lt;p&gt;The SLSA Tooling SIG has been collaborating with GitHub to give npm package
authors more options to further harden builds. As part of this collaboration, we
are announcing the beta of the
&lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/nodejs&quot;&gt;SLSA3 Node.js builder for GitHub Actions&lt;/a&gt;.
The Node.js builder provides a
&lt;a href=&quot;https://docs.github.com/en/actions/using-workflows/reusing-workflows&quot;&gt;GitHub Actions reusable workflow&lt;/a&gt;
that can be called to perform the build, generate SLSA Build L3 compliant
provenance, and publish it to the npm registry along with the package.&lt;/p&gt;
&lt;p&gt;Given that Node.js is one of the largest open source ecosystems, we believe
these announcements go a long way towards improving supply chain security for
open source overall. As packages adopt SLSA provenance, we hope that npm can
serve as a model for more open source ecosystems in the future.&lt;/p&gt;
&lt;h2 id=&quot;major-steps-in-securing-the-oss-supply-chain&quot;&gt;Major Steps in Securing the OSS Supply Chain&lt;/h2&gt;
&lt;p&gt;GitHub’s first-class support for package provenance in npm is a major step
forward in Open Source supply chain security for a number of reasons.&lt;/p&gt;
&lt;p&gt;First, it provides a way for package maintainers to generate provenance for
their packages with minimal changes to their development workflows. This allows
busy Open Source developers to get large supply chain security gains with only a
small time investment.&lt;/p&gt;
&lt;p&gt;Second, it provides a natural way to host provenance along with the package
itself. This takes advantage of existing package tooling to transparently
distribute provenance to users so it can be verified easily.&lt;/p&gt;
&lt;p&gt;Third, verification can be incorporated into the user’s normal workflow via the
&lt;code&gt;npm audit signatures&lt;/code&gt; command. Provenance adds the most value if it can be
verified before install. Support for verification in the npm CLI makes this much
easier.&lt;/p&gt;
&lt;p&gt;With this new support the provenance generated by npm projects achieves
&lt;a href=&quot;/spec/v1.0/levels#build-l2&quot;&gt;SLSA Build Level 2&lt;/a&gt;. SLSA Build L2
gives projects a huge boost to software supply chain integrity of npm packages.
It prevents tampering after the build with digital signatures, reduces the
attack surface to one that can be more easily audited and hardened, and allows
for easier migration to more hardened SLSA Build levels in the future.&lt;/p&gt;
&lt;h2 id=&quot;going-further-with-slsa-on-github-actions&quot;&gt;Going Further with SLSA on GitHub Actions&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/spec/v1.0/levels#build-l3-hardened-builds&quot;&gt;SLSA Build L3&lt;/a&gt;
improves upon SLSA Build L2 with additional requirements. These include further
hardening the build process by preventing build runs from influencing one
another, and preventing secret material used to sign the provenance from being
accessible to the build steps. The benefits of the new requirements include
preventing tampering during the build, and reducing the impact of compromised
registry credentials.&lt;/p&gt;
&lt;p&gt;These advantages are important because package installs and builds can run
untrusted and potentially compromised code from dependencies and other sources.
This in turn could allow attackers to leak private keys, modify provenance or
generate provenance for other artifacts. As we have seen
&lt;a href=&quot;https://github.com/advisories/GHSA-pjwm-rvh2-c87w&quot;&gt;in&lt;/a&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-73qr-pfmq-6rp8&quot;&gt;the&lt;/a&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-g2q5-5433-rhrf&quot;&gt;past&lt;/a&gt;, open source packages
are not immune to these targeted attacks.&lt;/p&gt;
&lt;p&gt;The Node.js builder, built in collaboration with GitHub, does this by executing
the build, generation, and signing of provenance in separate
&lt;a href=&quot;https://docs.github.com/en/actions/using-jobs/using-jobs-in-a-workflow&quot;&gt;jobs&lt;/a&gt;
separated by a virtual machine (VM) security boundary provided by
&lt;a href=&quot;https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners&quot;&gt;GitHub-hosted runners&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Using the Node.js builder is as easy as making a GitHub Actions
reusable workflow call. Most packages can slot this into their workflows fairly
seamlessly.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;id-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# For signing&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# For repo checkout.&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;actions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;# For getting workflow run info.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;startsWith(github.ref, 'refs/tags/')&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;uses&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;slsa-framework/slsa-github-generator/.github/workflows/builder_nodejs_slsa3.yml@v1.6.0&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;run-scripts&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ci,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;build&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Learn more about Node.js builder in the
&lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/nodejs&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;exploring-and-monitoring-the-npm-package-security-landscape&quot;&gt;Exploring and monitoring the npm package security landscape&lt;/h2&gt;
&lt;p&gt;In addition to the direct security benefits provided by SLSA, provenance
provides more information on packages, improving their trustworthiness. The SLSA
Tooling SIG has collaborated with Google
&lt;a href=&quot;https://deps.dev/&quot;&gt;Open Source Insights&lt;/a&gt; (deps.dev) to support
&lt;a href=&quot;https://blog.deps.dev/npm-provenance/&quot;&gt;exploration of provenance metadata for npm packages&lt;/a&gt;.
This new feature will support both npm package provenance and provenance
generated by the SLSA3 Node.js builder and can be used in conjunction with the
npm official registry.&lt;/p&gt;
&lt;p&gt;Explore some packages that generate provenance today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://deps.dev/npm/js-cookie&quot;&gt;js-cookie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deps.dev/npm/jose&quot;&gt;jose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deps.dev/npm/sigstore&quot;&gt;sigstore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deps.dev/npm/pacote&quot;&gt;pacote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deps.dev/npm/swr&quot;&gt;swr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-value-of-cooperation&quot;&gt;The value of cooperation&lt;/h2&gt;
&lt;p&gt;Support for SLSA provenance in the npm public registry is a great step forward
for improving the supply chain security of open-source projects. As we move
forward, improved support for supply chain security and cooperation with
programming language ecosystems is vital and we are looking forward to working
with more ecosystems in the future.&lt;/p&gt;
&lt;p&gt;Please try out the new
&lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/nodejs&quot;&gt;Node.js builder&lt;/a&gt;
and let us know what you think by opening an
&lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/issues&quot;&gt;issue&lt;/a&gt; on
GitHub. You can also ask a question in the
&lt;a href=&quot;https://openssf.slack.com/archives/C03PDLFET5W&quot;&gt;#slsa-tooling&lt;/a&gt; channel in the
&lt;a href=&quot;https://slack.openssf.org/&quot;&gt;OpenSSF community slack&lt;/a&gt;. We would love to hear
from you! You can follow along with the development of the Node.js builder’s GA
release via our development
&lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/milestone/17&quot;&gt;milestone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See you soon!&lt;/p&gt;</content><author><name>Ian Lewis &amp; Laurent Simon (Google), Fredrik Skogman (GitHub)</name></author><summary type="html">It has been a big month for supply chain security! GitHub recently announced the public beta for npm package provenance. This adds new functionality to npmjs.com and the npm CLI that allows package maintainers to generate and upload SLSA Build Level 2 provenance along with their packages. Integration with Sigstore enables verification of signature and certificate metadata so users know that the package came from the expected source repository.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">in-toto and SLSA</title><link href="https://chtiangg.github.io/slsa/blog/2023/05/in-toto-and-slsa" rel="alternate" type="text/html" title="in-toto and SLSA" /><published>2023-05-02T00:00:00+00:00</published><updated>2023-05-02T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/05/in-toto-and-slsa</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/05/in-toto-and-slsa">&lt;p&gt;As an adopter of SLSA, you have likely encountered the
&lt;a href=&quot;https://in-toto.io/&quot;&gt;in-toto project&lt;/a&gt;.
&lt;a href=&quot;https://github.com/in-toto/attestation&quot;&gt;in-toto attestations&lt;/a&gt; are part of
&lt;a href=&quot;/attestation-model#recommended-suite&quot;&gt;SLSA’s recommended suite&lt;/a&gt; for expressing
software supply chain claims. As in-toto maintainers, we’ve interacted with a
number of people who know of in-toto through SLSA but don’t fully understand the
project. For example, some were surprised to learn that “in-toto isn’t just a
format of attestations”, and that the framework also defines verification
workflows that make use of attestations that are not SLSA Provenance. So, we
decided to author this post as a quick primer on in-toto, how SLSA uses in-toto,
and how other attestations can be used to complement SLSA.&lt;/p&gt;
&lt;h2 id=&quot;in-toto-primer&quot;&gt;in-toto Primer&lt;/h2&gt;
&lt;p&gt;The in-toto Attestation Framework defines a fixed, lightweight “Statement” that
communicates some information about the execution of a software supply chain,
such as if the source was reviewed, or if it went through a SLSA conformant
build process. The information is communicated as a “Predicate” using a
context-specific schema identified by a “Predicate Type”, and applies to one or
more software supply chain “Subjects”. &lt;a href=&quot;/provenance/v1&quot;&gt;SLSA Provenance&lt;/a&gt; is one
such predicate type.&lt;/p&gt;
&lt;p&gt;in-toto models the software supply chain as a series of “steps”. Supply chain
owners, i.e. project owners or maintainers, define the set of actors authorized
to perform each step and rules that govern the artifacts used and produced by
the step. They can also include other arbitrary checks called “inspections” to
be performed during the verification workflow. These policies are recorded in a
piece of metadata called a supply chain “Layout”, which is cryptographically
signed by the supply chain owners. As each step is performed, one or more
attestations are generated recording various aspects of the process, and during
verification, in-toto applies the policies in the layout against the set of
attestations produced during the execution of the supply chain.&lt;/p&gt;
&lt;h2 id=&quot;what-slsa-gets-from-in-toto&quot;&gt;What SLSA gets from in-toto?&lt;/h2&gt;
&lt;p&gt;SLSA v1 is focused on the build aspects of the software supply chain. It defines
the Provenance predicate to record the build characteristics of the produced
artifacts. The specification describes how to verify Provenance as well as lays
out other requirements that are to be verified separately. The SLSA community
has also indicated a
&lt;a href=&quot;/blog/2023/04/the-breadth-and-depth-of-slsa&quot;&gt;future source track&lt;/a&gt; focused on
the security posture of how source is stored and developed prior to being fed
into a build process.&lt;/p&gt;
&lt;p&gt;This is where &lt;em&gt;other&lt;/em&gt; in-toto predicate types can complement SLSA. in-toto
allows for defining use case specific predicates that contain contextual
information. Apart from SLSA Provenance, the framework currently
&lt;a href=&quot;https://github.com/in-toto/attestation/tree/main/spec/predicates&quot;&gt;lists definitions&lt;/a&gt;
for in-toto Links, results of runtime traces, Software Bill of Materials (SBOM)
specifications such as SPDX and CycloneDX, the Software Supply Chain Attribute
Integrity (SCAI) specification, and SLSA Verification Summary Attestations.
in-toto also has a process for members of the community to propose new predicate
types. Proposals are reviewed by the maintainers of the project who are supply
chain security stakeholders at Google, Verizon, Intel, Kusari, and TestifySec.
This ensures that predicate types are of high quality, useful to different
organizations and their specific use cases, and, most importantly, consistent so
that attestations are usable beyond organization boundaries.&lt;/p&gt;
&lt;p&gt;With the
&lt;a href=&quot;https://github.com/in-toto/ITE/pull/38&quot;&gt;upcoming enhancements to in-toto layouts&lt;/a&gt;,
supply chain owners can define granular policies for all of the different
predicates they generate during the execution of their software supply chain.
For example, they can embed SLSA Provenance specific checks alongside others
that verify best practices such as two party code reviews, successful test runs,
and so on were adhered to. Taken together, a
&lt;a href=&quot;https://github.com/in-toto/attestation/blob/main/spec/v1.0/bundle.md&quot;&gt;bundle of in-toto attestations&lt;/a&gt;
and a layout can be used to comprehensively verify a software supply chain’s
security posture.&lt;/p&gt;
&lt;h2 id=&quot;end-to-end-attestations-for-your-software-supply-chain&quot;&gt;End-to-end attestations for your software supply chain&lt;/h2&gt;
&lt;p&gt;Let’s take a look at how other in-toto attestations can complement SLSA
Provenance. Here are a series of attestations (truncated where necessary) for
the execution of a supply chain. For the sake of this example, the attestations
are presented without their outer signing layer; in the real world, they’d all
be signed by the actors performing the corresponding operations.&lt;/p&gt;
&lt;h3 id=&quot;check-out-the-source-code&quot;&gt;Check out the source code&lt;/h3&gt;
&lt;p&gt;First, the source repository is checked out and its Git commit is recorded using
an in-toto link.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;gitCommit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;abcdef123456&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/attestation/link/v0.3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;checkout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git clone https://git.example.com/foo.git&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;materials&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;byproducts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;environment&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;is-the-code-reviewed&quot;&gt;Is the code reviewed?&lt;/h3&gt;
&lt;p&gt;The attestation bundle includes a code review for the commit that was checked
out.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;gitCommit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;abcdef123456&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/attestation/human-review/v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PASSED&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;reviewLink&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://cr.example.com/foo/abcdef123456&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2023-04-02T12:34:23Z&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;run-tests&quot;&gt;Run tests&lt;/h3&gt;
&lt;p&gt;Prior to actually executing the build, the source’s tests are run. This test run
and its results are recorded as a standalone attestation.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;gitCommit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;abcdef123456&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/attestation/test-result/v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PASSED&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;configuration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo/test.yml&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;gitBlob&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;123456abcd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://ci.example.com/23048&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;passedTests&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;(test.yml, ubuntu-latest)&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;(test.yml, windows-latest)&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;warnedTests&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;failedTests&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;build-the-final-product&quot;&gt;Build the final product&lt;/h3&gt;
&lt;p&gt;The build service performs the actual build itself and records SLSA Provenance
of the resulting artifact.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bin/foo-v1.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ff332109abdd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://slsa.dev/provenance/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;buildDefinition&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;buildType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;buildType&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;externalParameters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;repository&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://git.example.com/foo.git&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;ref&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;refs/heads/main&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;resolvedDependencies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git+https://git.example.com/foo@refs/heads/main&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;gitCommit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;abcdef123456&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;runDetails&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;builder&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://ci.example.com/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;runtime-trace-results-of-the-build&quot;&gt;Runtime trace results of the build&lt;/h3&gt;
&lt;p&gt;In addition to recording provenance, the bundle includes the results of a
runtime trace of the build process.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bin/foo-v1.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ff332109abdd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/attestation/runtime-trace/v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;monitor&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://github.com/cilium/tetragon/v0.8.4&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;tracePolicy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;policies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;connect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;monitoredProcess&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;hostID&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://ci.example.com&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;custom&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;event&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://ci.example.com/23055&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;monitorLog&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;process&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;network&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;fileAccess&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo/Makefile&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1209abcd56&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;build-compiler-configuration-attributes&quot;&gt;Build compiler configuration attributes&lt;/h3&gt;
&lt;p&gt;Finally, the bundle has a Software Supply Chain Attribute Integrity (SCAI)
attestation that records some attributes of the build tool. Specifically, the
attestation indicates the build step used GCC with stack protection enabled.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bin/foo-v1.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ff332109abdd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/attestation/scai/attribute-report/v0.2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;attributes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;attribute&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;WITH_STACK_PROTECTION&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;conditions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;flags&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-fstack-protector*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;producer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;file:///usr/bin/gcc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;gcc9.3.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;78ab6a8...&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;verification&quot;&gt;Verification&lt;/h3&gt;
&lt;p&gt;This set of metadata can be submitted to in-toto’s verification workflow using a
layout conforming to the new, under-development schema. Successful verification
would result in a Verification Summary Attestation.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo-v1.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ff332109abdd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://slsa.dev/verification_summary/v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;verifier&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://example.com/publication_verifier&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;timeVerified&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2023-04-12T23:20:50.52Z&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;resourceUri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://download.example.com/foo-v1.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;policy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://example.com/foo.layout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;dabc8907fa&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;inputAttestations&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://example.com/foo-v1.1.intoto.jsonl&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;7843adcf34&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;verificationResult&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PASSED&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;verifiedLevels&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SLSA_LEVEL_3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;slsaVersion&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;
&lt;p&gt;There are a number of exciting developments underway in in-toto such as the new
layouts, several new predicate specifications, and improvements to our tooling.
Come say hello at an
&lt;a href=&quot;https://hackmd.io/@lukpueh/ry_e70Qqw&quot;&gt;in-toto community meeting&lt;/a&gt; and on
&lt;a href=&quot;https://cloud-native.slack.com/archives/CM46K2VT2&quot;&gt;#in-toto&lt;/a&gt; on the
&lt;a href=&quot;https://slack.cncf.io/&quot;&gt;CNCF Slack workspace&lt;/a&gt;.&lt;/p&gt;</content><author><name>Aditya Sirish (NYU) and Tom Hennen (Google) representing the in-toto Community</name></author><summary type="html">As an adopter of SLSA, you have likely encountered the in-toto project. in-toto attestations are part of SLSA’s recommended suite for expressing software supply chain claims. As in-toto maintainers, we’ve interacted with a number of people who know of in-toto through SLSA but don’t fully understand the project. For example, some were surprised to learn that “in-toto isn’t just a format of attestations”, and that the framework also defines verification workflows that make use of attestations that are not SLSA Provenance. So, we decided to author this post as a quick primer on in-toto, how SLSA uses in-toto, and how other attestations can be used to complement SLSA.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SLSA v1.0 is now final!</title><link href="https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-final" rel="alternate" type="text/html" title="SLSA v1.0 is now final!" /><published>2023-04-19T00:00:00+00:00</published><updated>2023-04-19T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-final</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-final">&lt;p&gt;After almost two years since SLSA’s initial preview release, we are pleased to
announce our first official stable version, &lt;a href=&quot;/spec/v1.0&quot;&gt;SLSA v1.0&lt;/a&gt;! The full
announcement can be found at the &lt;a href=&quot;https://openssf.org/press-release/2023/04/19/openssf-announces-slsa-version-1-0-release/&quot;&gt;OpenSSF press release&lt;/a&gt;, and a description of
changes can be found at &lt;a href=&quot;/spec/v1.0/whats-new&quot;&gt;What’s new in v1.0&lt;/a&gt;. Thank you to
all members of the SLSA community who made this possible through your feedback,
suggestions, discussions, and pull requests!&lt;/p&gt;
&lt;p&gt;But SLSA doesn’t stop here. We intend to continue working through the &lt;a href=&quot;https://github.com/orgs/slsa-framework/projects/1/views/1&quot;&gt;backlog&lt;/a&gt;
of editorial feedback we received from RC1 and RC2 and updating the
specification on a rolling basis. Further down the road, our
&lt;a href=&quot;/spec/v1.0/future-directions&quot;&gt;plans&lt;/a&gt; include expanding the depth and breadth of
the specification.&lt;/p&gt;
&lt;p&gt;As always, we welcome contributions from all. Please see the
&lt;a href=&quot;/community&quot;&gt;Community&lt;/a&gt; page for ways to participate.&lt;/p&gt;
&lt;h2 id=&quot;changes-since-rc2&quot;&gt;Changes since RC2&lt;/h2&gt;
&lt;p&gt;There is one breaking change since &lt;a href=&quot;/slsa/blog/2023/04/slsa-v1-rc2&quot;&gt;RC2&lt;/a&gt;: the
&lt;a href=&quot;/provenance/v1&quot;&gt;provenance&lt;/a&gt; field &lt;code&gt;systemParameters&lt;/code&gt; was renamed to
&lt;code&gt;internalParameters&lt;/code&gt; to highlight the contrast from &lt;code&gt;externalParameters&lt;/code&gt;.&lt;/p&gt;</content><author><name>Mark Lodato</name></author><summary type="html">After almost two years since SLSA’s initial preview release, we are pleased to announce our first official stable version, SLSA v1.0! The full announcement can be found at the OpenSSF press release, and a description of changes can be found at What’s new in v1.0. Thank you to all members of the SLSA community who made this possible through your feedback, suggestions, discussions, and pull requests!</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Announcing SLSA v1.0 Release Candidate 2</title><link href="https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-rc2" rel="alternate" type="text/html" title="Announcing SLSA v1.0 Release Candidate 2" /><published>2023-04-04T00:00:00+00:00</published><updated>2023-04-04T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-rc2</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/04/slsa-v1-rc2">&lt;p&gt;We’re excited to announce &lt;a href=&quot;/spec/v1.0-rc2/&quot;&gt;SLSA v1.0 Release Candidate 2 (RC2)&lt;/a&gt; following
the valuable feedback we received on the &lt;a href=&quot;/slsa/blog/2023/02/slsa-v1-rc&quot;&gt;first release candidate&lt;/a&gt;. This is
intended to be the final release candidate before marking v1.0 as an &lt;a href=&quot;/spec-stages#approved&quot;&gt;Approved
Specification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We ask that all community members review the full specification and raise any
significant concerns as a &lt;a href=&quot;https://github.com/slsa-framework/slsa/issues&quot;&gt;GitHub issue&lt;/a&gt; &lt;strong&gt;by April 17, 2023&lt;/strong&gt;. While we always
appreciate clarity or editorial feedback, during this review period we are
specifically looking to identify significant problems that would require a
breaking change—and thus a new version—to address. (We plan to continue to
addressing clarity issues via editorial changes after the v1.0 release,
particularly the &lt;a href=&quot;https://github.com/orgs/slsa-framework/projects/1/views/1&quot;&gt;backlog&lt;/a&gt; of editorial feedback from RC1 that we have not yet
addressed.)&lt;/p&gt;
&lt;p&gt;Assuming there are no significant objections, we plan to mark this candidate as
an Approved Specification on April 19.&lt;/p&gt;
&lt;p&gt;We appreciate the continued support and engagement from the SLSA community and
all early adopters who have provided valuable feedback on the previous release
candidate. Thank you for your contributions to the project!&lt;/p&gt;
&lt;h2 id=&quot;summary-of-changes-since-rc1&quot;&gt;Summary of changes since RC1&lt;/h2&gt;
&lt;p&gt;There have been no major changes to requirements since &lt;a href=&quot;/slsa/blog/2023/02/slsa-v1-rc&quot;&gt;RC1&lt;/a&gt;. Most of the
changes have been editorial in nature. The following is a summary of the most
significant changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;a href=&quot;/spec/v1.0/distributing-provenance&quot;&gt;Distributing provenance&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Renamed “non-forgeable” to “unforgeable”&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;/verification_summary/v1&quot;&gt;VSA&lt;/a&gt; for v1.0&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;/spec/v1.0/threats&quot;&gt;Threats &amp;amp; mitigations&lt;/a&gt; for v1.0 and relabeled
the diagram (swapped labels “D” and “E”)&lt;/li&gt;
&lt;li&gt;Resolved various inconsistencies, simplified terminology, and added more
introductory material&lt;/li&gt;
&lt;/ul&gt;</content><author><name>SLSA Community</name></author><summary type="html">We’re excited to announce SLSA v1.0 Release Candidate 2 (RC2) following the valuable feedback we received on the first release candidate. This is intended to be the final release candidate before marking v1.0 as an Approved Specification.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Breadth and Depth of SLSA</title><link href="https://chtiangg.github.io/slsa/blog/2023/04/the-breadth-and-depth-of-slsa" rel="alternate" type="text/html" title="The Breadth and Depth of SLSA" /><published>2023-04-03T00:00:00+00:00</published><updated>2023-04-03T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/04/the-breadth-and-depth-of-slsa</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/04/the-breadth-and-depth-of-slsa">&lt;p&gt;Interested in getting involved? Now’s the chance to &lt;a href=&quot;/slsa/blog/2023/02/slsa-v1-rc&quot;&gt;provide your feedback on the foundational v1 release of the SLSA framework.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;“Software Supply chain security is more than just the build” is a common response when folks learn about SLSA. This is true. SLSA 1.0 is entirely focused on generating &lt;a href=&quot;/slsa/provenance/v1&quot;&gt;build provenance&lt;/a&gt; and assurance around that provenance due to the security capabilities of the build system and security properties of a particular running build. Software Supply Chain Security is the cybersecurity practice of extending left into System Delivery Lifecycle or Software Delivery Lifecycle and the SDLC is more than just the build.&lt;/p&gt;
&lt;p&gt;If the SDLC is more than the build, why is the SLSA community only focused on that one aspect? We’re not. We’re just starting with the build. The initial focus on the &lt;strong&gt;build track&lt;/strong&gt; is a strategic decision made due to its significance in the overall process. The build serves as the bridge between various inputs, such as source code and dependencies, and the final product, which is the software package or artifact intended to run in production environments or be used as a dependency to downstream consumers.&lt;/p&gt;
&lt;p&gt;The build process plays a vital role in ensuring the quality, safety, and security of the final software. This is because it performs actions like compilation, linking and packaging the code while applying various testing, linting, optimization, and security measures. It’s the stage where all the source and dependency components come together to form the final product. It is also often one of the hardest to introspect on because it is taking arbitrary source code and transforming it into non-human readable binaries. Consequently, vulnerabilities or misconfigurations in the build system or in the build itself can compromise the security of the software. Similarly, direct attacks on the build system or build itself can introduce malicious behavior in any and all output artifacts.&lt;/p&gt;
&lt;p&gt;Focusing on the build process and the provenance of the build artifacts enables the build systems to develop a solid foundation for Software Supply Chain Security. By establishing secure, traceable, and auditable build processes, SLSA aims to minimize the risks associated with compromised or malicious components that end up impacting or being included with the build artifacts.&lt;/p&gt;
&lt;p&gt;While the build process is crucial, the SLSA contributors and maintainers recognize that Software Supply Chain Security is a multi-faceted problem that extends beyond this stage. As the framework evolves, it will expand its scope to include other critical aspects of the SDLC, such as secure source code management and dependency ingestion.
For instance, future iterations of SLSA will introduce more stringent requirements for source code management in a &lt;strong&gt;source track&lt;/strong&gt; that might include code reviews, vulnerability scanning, and secure coding practices. These measures will ensure that the source code ingested into a build is secure and free of common vulnerabilities. Similarly, SLSA may also explore ways to ensure that dependencies, such as third-party libraries, are following security standards, up-to-date, and free from known security issues in a &lt;strong&gt;dependency track&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ultimately, SLSA aims to create a comprehensive, adaptable framework that addresses critical pieces of Software Supply Chain Security. By starting with the &lt;strong&gt;build track&lt;/strong&gt;, SLSA establishes a robust foundation on which to build and expand the framework to address other critical aspects of the SDLC. This approach will help end users, whether they are open source project maintainers or stakeholders in a corporation, better understand and mitigate the risks associated with software supply chains, and ultimately develop more secure and reliable software.&lt;/p&gt;
&lt;p&gt;For more information visit the SLSA website, &lt;a href=&quot;https://github.com/slsa-framework/slsa/issues&quot;&gt;give feedback&lt;/a&gt; on the &lt;a href=&quot;/spec/v1.0/&quot;&gt;SLSA v1.0 release candidate&lt;/a&gt; and get involved with the SLSA &lt;a href=&quot;/community&quot;&gt;community&lt;/a&gt;.&lt;/p&gt;</content><author><name>Mike Lieberman</name></author><summary type="html">Interested in getting involved? Now’s the chance to provide your feedback on the foundational v1 release of the SLSA framework.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Announcing SLSA v1.0 Release Candidate</title><link href="https://chtiangg.github.io/slsa/blog/2023/02/slsa-v1-rc" rel="alternate" type="text/html" title="Announcing SLSA v1.0 Release Candidate" /><published>2023-02-24T00:00:00+00:00</published><updated>2023-02-24T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/02/slsa-v1-rc</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/02/slsa-v1-rc">&lt;p&gt;Today, we are excited to announce the important milestone of a release candidate
(RC) SLSA Specification. This is the first major update to SLSA since its v0.1
release in June 2021, and the RC finalizes multiple revisions to the SLSA
specifications and requirements. We’re grateful for the huge community
engagement that went into shaping this work.&lt;/p&gt;
&lt;p&gt;We’re requesting community feedback on the
&lt;a href=&quot;/spec/v1.0-rc1&quot;&gt;SLSA v1.0 RC1 Specification&lt;/a&gt; by &lt;strong&gt;March 24, 2023&lt;/strong&gt;,
with a view towards releasing a 1.0 Stable revision at the end of March.&lt;/p&gt;
&lt;h2 id=&quot;whats-changed&quot;&gt;What’s changed&lt;/h2&gt;
&lt;p&gt;We reworked the SLSA specification in response to ongoing feedback, filed
issues, suggestions for course corrections, and other input from the SLSA
community and early adopters. The most significant changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the division of SLSA into multiple &lt;em&gt;SLSA tracks&lt;/em&gt;, which are separate
sets of levels that measure a particular aspect of software supply chain
security&lt;/li&gt;
&lt;li&gt;many simplifications and clarifications throughout the specification&lt;/li&gt;
&lt;li&gt;new guidance on provenance verification&lt;/li&gt;
&lt;li&gt;clarification of the build model and provenance schema, with an
accompanying v1 provenance format&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tracks&quot;&gt;Tracks&lt;/h3&gt;
&lt;p&gt;A significant conceptual change is the division of SLSA’s level requirements
into multiple tracks. Previously, each SLSA level encompassed requirements
across multiple software supply chain aspects: there were source, build,
provenance, and common requirements. To reach a particular level, adopters
needed to meet
&lt;a href=&quot;/spec/v0.1/requirements&quot;&gt;all requirements in each of the four areas&lt;/a&gt;.
Organizing the specification in that way made adoption cumbersome, since
requirements were split across unrelated domains—improvements in one area were
not recognized until improvements were made in all areas.&lt;/p&gt;
&lt;p&gt;Now, the requirements are divided into SLSA tracks that each focus on one area
of the software supply chain. We anticipate this division will make SLSA
adoption easier for users. Division into tracks also benefits the SLSA
community: developers contributing to SLSA can parallelize work on multiple
tracks without blocking each other, and members of the community can contribute
specifically to their areas of expertise.&lt;/p&gt;
&lt;p&gt;SLSA v1.0 RC defines the SLSA Build Track to begin this separation of
requirements, with other tracks to come in future versions. The new &lt;a href=&quot;/spec/v1.0-rc1/levels#build-track&quot;&gt;SLSA Build
Track Levels 1-3&lt;/a&gt; roughly
correspond to
&lt;a href=&quot;/spec/v1.0-rc1/requirements#build-requirements&quot;&gt;Levels 1-3 of v0.1&lt;/a&gt;,
minus the Source requirements. We anticipate future versions of the
specification to continue building on requirements without changing the existing
requirements defined in v1.0. The specification will likely expand to
incorporate both new tracks and additional levels for existing tracks. We
currently have &lt;a href=&quot;/spec/v1.0-rc1/future-directions&quot;&gt;plans&lt;/a&gt; for Build
Level 4 and a Source Track.&lt;/p&gt;
&lt;p&gt;The v1.0 RC also defines the &lt;a href=&quot;/spec/v1.0-rc1/principles&quot;&gt;principles&lt;/a&gt;
behind SLSA track requirements, which will guide future track additions. For
more information about the rationale for tracks, see the
&lt;a href=&quot;https://github.com/slsa-framework/slsa-proposals/blob/main/0003/README.md&quot;&gt;proposal&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;simplifications-and-clarifications&quot;&gt;Simplifications and clarifications&lt;/h3&gt;
&lt;p&gt;We’ve organized the Build track requirements to be more user friendly by better
reflecting the division of labor across the software supply chain: &lt;strong&gt;producing
artifacts&lt;/strong&gt;, &lt;strong&gt;verifying build systems&lt;/strong&gt;, and &lt;strong&gt;verifying artifacts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/spec/v1.0-rc1/requirements&quot;&gt;Producing artifacts&lt;/a&gt;&lt;/strong&gt; explains
requirements for the software producer and the build system. It corresponds to
v0.1’s Build and Provenance requirements. We’ve renamed some requirements to be
more intuitive and have merged others, but the content is largely the same. The
only substantive difference is that we’ve removed the requirements that were
part of v0.1 L4 and the “build as code” requirement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/spec/v1.0-rc1/verifying-systems&quot;&gt;Verifying build systems&lt;/a&gt;&lt;/strong&gt;
provides a list of prompts for evaluating a build system’s SLSA conformance.
Some content comes from v0.1’s Common requirements; the rest is new to v1.0.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/spec/v1.0-rc1/verifying-artifacts&quot;&gt;Verifying artifacts&lt;/a&gt;&lt;/strong&gt;
provides guidance to package ecosystems and consumers for how to verify
provenance and compare it to expectations. It is discussed more in the following
section.&lt;/p&gt;
&lt;h3 id=&quot;verification&quot;&gt;Verification&lt;/h3&gt;
&lt;p&gt;Another significant change in the v1.0 RC is documenting the need for provenance
verification.&lt;/p&gt;
&lt;p&gt;SLSA v0.1 specified guidance for how to produce provenance but not how to verify
it. This left a large gap—most threats targeted by SLSA are only mitigated by
verifying provenance and comparing it to expectations.&lt;/p&gt;
&lt;p&gt;SLSA v1.0 RC addresses this gap by providing more explicit guidance on how to
verify provenance. This is split between establishing trust in build systems
themselves versus establishing trust in artifacts produced by those build
systems. Build systems implement the requirements around isolation and
provenance generation, and consumers choose whether to trust those build
systems. Once that trust is established, consumers or package managers can
verify artifacts by comparing the provenance to expectations for the package in
question.&lt;/p&gt;
&lt;p&gt;Ecosystems are already creating verification tooling, such as &lt;a href=&quot;https://github.com/github/roadmap/issues/612&quot;&gt;npm’s forthcoming
SLSA support&lt;/a&gt;. Tooling for
organizations that need to protect first-party software is also available, such
as &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier&quot;&gt;slsa-verifier&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;provenance-format&quot;&gt;Provenance format&lt;/h3&gt;
&lt;p&gt;The SLSA v1.0 RC simplifies SLSA’s build model and makes corresponding changes
to the specification and provenance format.&lt;/p&gt;
&lt;p&gt;A major source of confusion for SLSA v0.1 was how to model a build and represent
it in provenance. The v0.1 spec and v0.x provenance formats were overly rigid
about a build’s inputs, differentiating between “source”, “build config”, “entry
point”, and so on. Many implementers found that their build systems did not
clearly fit into this model, and the intent of each field was not clear.
Furthermore, provenance requirements were described both abstractly in the SLSA
specification and concretely in the provenance format, using different language.
Implementers needed to jump back and forth and mentally map one concept to
another.&lt;/p&gt;
&lt;p&gt;SLSA v1.0 and the accompanying &lt;a href=&quot;/provenance/v1-rc1&quot;&gt;provenance v1
format&lt;/a&gt; attempt to address this confusion by
simplifying the model and aligning terminology between the two. The main change
is to represent all “external parameters” that are exposed to the build system’s
users, instead of differentiating between various inputs. Now, you can represent
arbitrary parameters, as long as it is possible to compare these parameters to
expectations. Other parts of the provenance format were renamed, though
conceptually most concepts translate from the old format to the new format. For
a detailed list of changes, see &lt;a href=&quot;/provenance/v1-rc1#change-history&quot;&gt;provenance change
history&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;request-for-feedback&quot;&gt;Request for feedback&lt;/h2&gt;
&lt;p&gt;Please &lt;a href=&quot;https://github.com/slsa-framework/slsa/issues&quot;&gt;open an issue&lt;/a&gt; to discuss
feedback on the RC by March 24, 2023. We particularly welcome comments in
response to the following questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the new specification clarify SLSA’s benefits for supply chain
security?&lt;/li&gt;
&lt;li&gt;Is the specification unambiguous on how to carry out requirements?&lt;/li&gt;
&lt;li&gt;Is there feedback on the provenance verification guidance?&lt;/li&gt;
&lt;li&gt;Are there suggestions to improve the division into multiple tracks?&lt;/li&gt;
&lt;li&gt;Are the updated build model and provenance format easily understood?&lt;/li&gt;
&lt;li&gt;Is there any remaining feedback on what may be missing?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We appreciate everyone who has contributed to the project and all the early
adopters who have provided valuable feedback. Thank you to the SLSA community!&lt;/p&gt;</content><author><name>Mark Lodato, Kris Kooi, Joshua Lock</name></author><summary type="html">Today, we are excited to announce the important milestone of a release candidate (RC) SLSA Specification. This is the first major update to SLSA since its v0.1 release in June 2021, and the RC finalizes multiple revisions to the SLSA specifications and requirements. We’re grateful for the huge community engagement that went into shaping this work.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">General availability of SLSA 3 Container Generator for GitHub Actions</title><link href="https://chtiangg.github.io/slsa/blog/2023/02/slsa-github-workflows-container-ga" rel="alternate" type="text/html" title="General availability of SLSA 3 Container Generator for GitHub Actions" /><published>2023-02-01T00:00:00+00:00</published><updated>2023-02-01T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2023/02/slsa-github-workflows-container-ga</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2023/02/slsa-github-workflows-container-ga">&lt;p&gt;Today, we are announcing the general availability of the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/container&quot;&gt;SLSA 3 Container Generator for GitHub Actions&lt;/a&gt; starting with v1.4.0. This free tool allows any GitHub project to produce SLSA level 3 compliant provenance statements so users can verify the origin of container images they use. While previous tools allowed users to generate provenance for file artifacts, the Container Generator is able to support container ecosystems. It does this by allowing provenance statements to be distributed alongside your images in a container registry and integrating directly with &lt;a href=&quot;https://www.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt;-compatible tooling for inspection and verification.&lt;/p&gt;
&lt;p&gt;In only a few short years since container management platforms like Docker and Kubernetes were released, container images have become one of the most popular ways to deploy software. Containers allow their users to deploy software in a more flexible way without depending on language specific packaging or deployment mechanisms. Many public repositories of container images, like &lt;a href=&quot;https://hub.docker.com/&quot;&gt;Docker Hub&lt;/a&gt;, allow you to upload pre-packaged images that can be used out of the box or customized by users as base images.&lt;/p&gt;
&lt;p&gt;However, it can be a huge challenge for users to verify the provenance of your images. Various reports from &lt;a href=&quot;https://blog.aquasec.com/supply-chain-threats-using-container-images&quot;&gt;Aqua Security’s Team Nautilus&lt;/a&gt; and the &lt;a href=&quot;https://sysdig.com/blog/analysis-of-supply-chain-attacks-through-public-docker-images/&quot;&gt;Sysdig Threat Research Team&lt;/a&gt; show that container images which include malicious payloads are common. How can users of your image be confident of how the images you use were built? How can they be sure they haven’t been modified to include malicious payloads?&lt;/p&gt;
&lt;p&gt;One solution is including &lt;a href=&quot;/provenance/&quot;&gt;SLSA provenance&lt;/a&gt; with your container image. SLSA provenance is metadata about your build that includes information that strongly links your artifacts to the build system and source code that was used. SLSA provenance can build trust in your images by helping your users verify that the images come from you and your source repositories.&lt;/p&gt;
&lt;p&gt;The Container Generator’s reusable workflow can help you to achieve &lt;a href=&quot;/spec/v0.1/levels&quot;&gt;SLSA level 3&lt;/a&gt; for your project by automatically generating provenance from your existing GitHub Actions workflows to generate images. This can be done by simply adding a new job step to call the generator’s reusable workflow, which generates and signs the provenance in an isolated job separate from your image’s build step for added security. Popular projects like &lt;a href=&quot;https://kyverno.io/docs/&quot;&gt;Kyverno&lt;/a&gt; are already using this workflow to generate provenance for their container image releases.&lt;/p&gt;
&lt;h2 id=&quot;generating-provenance&quot;&gt;Generating Provenance&lt;/h2&gt;
&lt;p&gt;Under the hood, the Container Generator’s reusable workflow uses &lt;a href=&quot;https://sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt;’s &lt;a href=&quot;https://github.com/sigstore/cosign&quot;&gt;cosign&lt;/a&gt; to sign the provenance. This provenance is combined with the cryptographic signature into something called an attestation. This attestation is then uploaded to the container registry. Using cosign to sign the provenance allows the generated attestation to integrate well with Sigstore’s ecosystem of tools for discovery and verification.&lt;/p&gt;
&lt;p&gt;However, unlike simply signing your container directly with cosign, using the Container Generator as a &lt;a href=&quot;https://docs.github.com/en/actions/using-workflows/reusing-workflows&quot;&gt;GitHub Actions reusable workflow&lt;/a&gt; generates the signed provenance in an isolated build job. This protects the provenance from being modified by malicious code in the build itself and enables you to meet the &lt;a href=&quot;/spec/v0.1/requirements#non-falsifiable&quot;&gt;Non-Falsifiable requirements&lt;/a&gt; for &lt;a href=&quot;/spec/v0.1/levels&quot;&gt;SLSA level 3&lt;/a&gt;. You can find out more about the specifics in our &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/blob/main/SPECIFICATIONS.md&quot;&gt;Technical Design&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following is an example of how to generate provenance using the Container Generator. You can read more details in the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/container&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;step-1-build-and-push-your-container-image&quot;&gt;Step 1: Build and push your container image&lt;/h3&gt;
&lt;p&gt;You can first build and push your image as you would normally using Docker’s &lt;code&gt;build-push-action&lt;/code&gt;. You can find a full example in the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#getting-started&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# ...&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Build and push Docker image&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;uses&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;docker/build-push-action@e551b19e49efd4e98792db7592c17c09b89db8d8&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# v3.0.0&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;build&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ steps.meta.outputs.tags }}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;labels&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ steps.meta.outputs.labels }}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;step-2-call-the-container-generator-to-generate-and-upload-slsa-provenance&quot;&gt;Step 2: Call the Container Generator to generate and upload SLSA provenance&lt;/h3&gt;
&lt;p&gt;With the outputs from image generation you can call the Container Generator reusable workflow. This step calls the container workflow to generate provenance, sign it, and push the resulting attestation to the container registry. An example looks like this:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;provenance&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;needs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;actions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# for detecting the Github Actions environment.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;id-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# for creating OIDC tokens for signing.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# for uploading attestations.&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;uses&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.4.0&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ needs.build.outputs.image }}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# The image digest is used to prevent TOCTOU issues.&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# This is an output of the docker/build-push-action&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# See: https://github.com/slsa-framework/slsa-verifier#toctou-attacks&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;digest&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ needs.build.outputs.digest }}&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;registry-username&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ github.actor }}&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;secrets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;registry-password&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;step-3-inspection&quot;&gt;Step 3: Inspection&lt;/h3&gt;
&lt;p&gt;You can validate that the attestation has been uploaded to the repository using cosign. Here we use the &lt;code&gt;cosign tree&lt;/code&gt; command to display the SLSA provenance attestation associated with our image.&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cosign tree ghcr.io/ianlewis/actions-test:v0.0.86@sha256:70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35
📦 Supply Chain Security Related artifacts &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;an image: ghcr.io/ianlewis/actions-test:v0.0.86@sha256:70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35
└── 💾 Attestations &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;an image tag: ghcr.io/ianlewis/actions-test:sha256-70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35.att
   └── 🍒 sha256:1f7571f8ca4e22229ae6fb53fdc1282cd3c251cd121e61fb035cce55bc227070
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can also inspect the uploaded provenance payload using the &lt;code&gt;cosign download attestation&lt;/code&gt; command. The attestation is stored in a &lt;a href=&quot;https://github.com/secure-systems-lab/dsse/blob/master/protocol.md&quot;&gt;DSSE envelope&lt;/a&gt;, which includes the cryptographic signature and encoded provenance payload in base64. Use the following command to retrieve the payload in human readable format:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cosign download attestation ghcr.io/ianlewis/actions-test:v0.0.86@sha256:70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35 | jq &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'.payload'&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;base64&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; | jq
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;_type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v0.1&quot;&lt;/span&gt;,
  &lt;span class=&quot;s2&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;https://slsa.dev/provenance/v0.2&quot;&lt;/span&gt;,
  &lt;span class=&quot;s2&quot;&gt;&quot;subject&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;ghcr.io/ianlewis/actions-test&quot;&lt;/span&gt;,
      &lt;span class=&quot;s2&quot;&gt;&quot;digest&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;sha256&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35&quot;&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/container#provenance-format&quot;&gt;Container Generator’s documentation&lt;/a&gt; and the &lt;a href=&quot;/provenance&quot;&gt;SLSA documentation&lt;/a&gt; for more information about the provenance’s JSON format.&lt;/p&gt;
&lt;h3 id=&quot;step-4-verification&quot;&gt;Step 4: Verification&lt;/h3&gt;
&lt;p&gt;To verify your image’s provenance, use the &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier#containers&quot;&gt;slsa-verifier&lt;/a&gt; tool on the command line. This tool will verify the provenance’s signature and check the expected source repository and builder ID.&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;slsa-verifier verify-image ghcr.io/ianlewis/actions-test:v0.0.86@sha256:70205a915e3288e71b48e794e4789bf28ae4c0660c4ce340f2c48ed356b68d35 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;--source-uri&lt;/span&gt; github.com/ianlewis/actions-test &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;--source-tag&lt;/span&gt; v0.0.86 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;--builder-id&lt;/span&gt; https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@refs/tags/v1.4.0
Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@refs/tags/v1.4.0 at commit d9be953dd17e7f20c7a234ada668f9c8c4aaafc3
PASSED: Verified SLSA provenance
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can also use &lt;a href=&quot;https://kyverno.io/docs/writing-policies/verify-images/&quot;&gt;Kyverno&lt;/a&gt; or sigstore’s &lt;a href=&quot;https://docs.sigstore.dev/policy-controller/overview/&quot;&gt;policy-controller&lt;/a&gt; for verification in Kubernetes environments. See the &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/container#verification&quot;&gt;documentation&lt;/a&gt; for more examples of verifying SLSA provenance.&lt;/p&gt;
&lt;h2 id=&quot;no-more-weak-links&quot;&gt;No more weak links&lt;/h2&gt;
&lt;p&gt;Tackling supply chain security can be a daunting task for large organizations and open source ecosystems. The Container Generator allows any project on GitHub that generates container images to generate provenance using GitHub Actions.&lt;/p&gt;
&lt;p&gt;Our work on SLSA tooling is just getting started. You can follow along with our project roadmap on our &lt;a href=&quot;https://github.com/slsa-framework/slsa-github-generator/milestones&quot;&gt;milestones page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SLSA generation and verification is also only a small part of what we need to do to improve supply chain security. Connect with us via the &lt;a href=&quot;/community&quot;&gt;SLSA community&lt;/a&gt; on &lt;a href=&quot;https://openssf.slack.com/archives/C029E4N3DPF&quot;&gt;Slack&lt;/a&gt;, discuss ideas with us in the &lt;a href=&quot;https://openssf.slack.com/archives/C03PDLFET5W&quot;&gt;#slsa-tooling&lt;/a&gt; channel, and join our &lt;a href=&quot;https://docs.google.com/document/d/15Xp8-0Ff_BPg_LMKr1RIKtwAavXGdrgb1BoX4Cl2bE4/edit&quot;&gt;SLSA Tooling working group meetings&lt;/a&gt; to help us prioritize future work. We welcome any contributions you can make. See you there!&lt;/p&gt;</content><author><name>Asra Ali, Ian Lewis, Laurent Simon</name></author><summary type="html">Today, we are announcing the general availability of the SLSA 3 Container Generator for GitHub Actions starting with v1.4.0. This free tool allows any GitHub project to produce SLSA level 3 compliant provenance statements so users can verify the origin of container images they use. While previous tools allowed users to generate provenance for file artifacts, the Container Generator is able to support container ecosystems. It does this by allowing provenance statements to be distributed alongside your images in a container registry and integrating directly with Sigstore-compatible tooling for inspection and verification.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Safeguarding builds on Google Cloud Build with SLSA</title><link href="https://chtiangg.github.io/slsa/blog/2022/12/gcb-slsa-verification" rel="alternate" type="text/html" title="Safeguarding builds on Google Cloud Build with SLSA" /><published>2022-12-05T00:00:00+00:00</published><updated>2022-12-05T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2022/12/gcb-slsa-verification</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2022/12/gcb-slsa-verification">&lt;p&gt;Earlier this year, &lt;a href=&quot;https://cloud.google.com/build/docs/overview&quot;&gt;Google Cloud Build&lt;/a&gt; (GCB) announced support for Level 3 assurance of &lt;a href=&quot;/&quot;&gt;Supply-chain Levels for Software Artifacts&lt;/a&gt; (SLSA) for container images. Users can now automatically generate verifiable provenance documents (build records) of builds that take place in Cloud Build. Provenance can be used to provide assurance that a trusted builder (in this case, GCB) produced the resulting image through some declared process with trusted source material. To make verification effortless, we are announcing support for verifying the provenance document in the open-source &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier&quot;&gt;slsa-verifier&lt;/a&gt; CLI tool, which previously only had support for &lt;a href=&quot;/blog/2022/06/slsa-github-workflows&quot;&gt;GitHub Actions&lt;/a&gt;. With the slsa-verifier, everyone — not just the container authors — can verify the SLSA provenance document.&lt;/p&gt;
&lt;p&gt;SLSA’s series of &lt;a href=&quot;/spec/v0.1/levels&quot;&gt;levels&lt;/a&gt; provide progressively stronger guarantees about the integrity of a software artifact.  Requirements in each level are grouped by components, so projects receive separate sub-ratings for &lt;em&gt;build&lt;/em&gt; level and &lt;em&gt;provenance&lt;/em&gt; level. GCB users may already be familiar with SLSA build levels: &lt;a href=&quot;https://cloud.google.com/software-supply-chain-security/docs/sds/overview&quot;&gt;Software Delivery Shield’s security insights&lt;/a&gt; in-console panel displays the SLSA build levels of artifacts. GCB already reaches Level 3 build requirements by performing builds in isolated and ephemeral environments. Now, GCB also meets the Level 3 provenance requirements by recording the “entry point” (or command) that was used to define the build and all user-controlled parameters. These details are in addition to the verifiable information the provenance already contained, such as the digests of the built images, the input sources, the build arguments, and the build recipe. To learn more about GCB provenance, see &lt;a href=&quot;https://cloud.google.com/software-supply-chain-security/docs/safeguard-builds#provenance&quot;&gt;Safeguard builds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As we’ll see below, this new provenance information can be used to validate that builds were generated from a specific version-controlled build pipeline, and to maintain a record of the parameters used to generate the container image for policy evaluation or reproducibility.&lt;/p&gt;
&lt;h3 id=&quot;gcb-provenance-at-slsa-level-3&quot;&gt;GCB Provenance at SLSA Level 3&lt;/h3&gt;
&lt;p&gt;At SLSA Level 3, users have assurance that the metadata content is authentic, tamper-proof, and not altered by the project maintainers. The build definition and configuration is verifiably derived from definitions stored in versioned source control systems (known as “&lt;a href=&quot;/spec/v0.1/requirements#build-as-code&quot;&gt;build-as-code&lt;/a&gt;”). So in order to describe the full top-level build instructions, GCB now identifies the build configuration stored in git, the &lt;code&gt;entrypoint&lt;/code&gt;, often named &lt;a href=&quot;https://cloud.google.com/build/docs/configuring-builds/create-basic-configuration&quot;&gt;cloudbuild.yaml&lt;/a&gt;.  A record of all user-controlled parameters (&lt;a href=&quot;https://cloud.google.com/build/docs/configuring-builds/substitute-variable-values&quot;&gt;substitutions&lt;/a&gt;) to the build is also provided in the provenance’s &lt;code&gt;recipe&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://in-toto.io/Statement/v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicateType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://slsa.dev/provenance/v0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;predicate&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;builder&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://cloudbuild.googleapis.com/GoogleHostedWorker@v0.3&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;materials&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;01ce393d04eb6df2a7b2b3e95d4126e687afb7ae&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uri&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://github.com/ORG/REPO&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;recipe&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;arguments&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sourceProvenance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;steps&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;substitutions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;_IMAGE_NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PROJECT_ID/REPOSITORY/IMAGE_NAME:TAG&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;definedInMaterial&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;entryPoint&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cloudbuild.yaml&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://cloudbuild.googleapis.com/CloudBuildSteps@v0.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;29e5d68bdb6b95cbcb456953ae5981f9dca6a50c3621c01beb9a75869bc79bec&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://us-LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME:TAG&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A user can view a container’s provenance by following the &lt;a href=&quot;https://cloud.google.com/build/docs/securing-builds/view-build-provenance#validate_the_provenance_metadata&quot;&gt;viewing instructions&lt;/a&gt;. Next, we’ll discuss how you can use our SLSA tools to easily verify its authenticity, integrity and properties.&lt;/p&gt;
&lt;h3 id=&quot;verification&quot;&gt;Verification&lt;/h3&gt;
&lt;p&gt;Validating SLSA Level 3 provenance can help to both verify that a build was produced by an expected source and build system and also identify whether any code was injected via an untrusted source location or build system. At SLSA Level 3, the provenance is service-generated (by GCB), verifiable for authenticity and integrity, and non-forgeable—meaning that a user cannot tamper with the provenance metadata.&lt;/p&gt;
&lt;p&gt;Our SLSA verification CLI tool now supports &lt;a href=&quot;https://cloud.google.com/build/docs/securing-builds/view-build-provenance#validate_provenance_using_the_slsa_verifier&quot;&gt;GCB provenance verification&lt;/a&gt; for container images. Not only does &lt;code&gt;slsa-verifier&lt;/code&gt; verify the signature over the provenance and the human-readable provenance summary, but it also automatically handles verification key management and allows end-users to validate that the container image was generated from the trusted Cloud Build builder and trusted source location.&lt;/p&gt;
&lt;p&gt;To start verifying provenance, you must provide a container image name that is &lt;em&gt;immutable&lt;/em&gt; by providing its digest (rather than, say, a mutable image tag). This avoids “Time-of-check-to-time-of-use” (TOCTTOU) attacks, described in &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier#toctou-attacks&quot;&gt;this overview&lt;/a&gt;. A user can retrieve the digest of the container using the &lt;a href=&quot;https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md&quot;&gt;crane&lt;/a&gt; command:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;UNVERIFIED_IMAGE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;us-LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME:TAG&quot;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;IMMUTABLE_IMAGE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;UNVERIFIED_IMAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%&lt;/span&gt;:&lt;span class=&quot;p&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;crane digest &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;UNVERIFIED_IMAGE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then, retrieve the provenance using the &lt;a href=&quot;https://cloud.google.com/sdk/gcloud&quot;&gt;gcloud&lt;/a&gt; CLI utility. (Note: You &lt;em&gt;must&lt;/em&gt; be authenticated to GCP to retrieve information about the image and &lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker&quot;&gt;configure docker authentication&lt;/a&gt;.)&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gcloud artifacts docker images describe &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;IMMUTABLE_IMAGE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--format&lt;/span&gt; json &lt;span class=&quot;nt&quot;&gt;--show-provenance&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; unverified-provenance.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Verify the image using the slsa-verifier CLI tool (&lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier#installation&quot;&gt;installation instructions&lt;/a&gt;) against the downloaded provenance via the &lt;code&gt;--provenance-path&lt;/code&gt; flag. The &lt;code&gt;--source-uri&lt;/code&gt; flag specifies the version-controlled source repository that was expected to be used to build the image. The &lt;code&gt;--builder-id&lt;/code&gt; flag specifies the expected builder identity; in this case, we specify GCB’s builders: &lt;code&gt;https://cloudbuild.googleapis.com/GoogleHostedWorker&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;slsa-verifier verify-image &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;IMMUTABLE_IMAGE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--provenance-path&lt;/span&gt; unverified-provenance.json &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--source-uri&lt;/span&gt; github.com/laurentsimon/gcb-tests &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--builder-id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;https://cloudbuild.googleapis.com/GoogleHostedWorker &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--print-provenance&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; verified-provenance.json &lt;span class=&quot;c&quot;&gt;# PASSED: Verified SLSA provenance&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Using the &lt;code&gt;--print-provenance&lt;/code&gt; flag will print the validated provenance JSON to allow piping into a policy engine. If verification succeeds, &lt;code&gt;$IMMUTABLE_IMAGE&lt;/code&gt; is verified.&lt;/p&gt;
&lt;p&gt;To run the verified container image, use the &lt;code&gt;$IMMUTABLE_IMAGE&lt;/code&gt; (not &lt;code&gt;$UNVERIFIED_IMAGE&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;IMMUTABLE_IMAGE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;use-cases&quot;&gt;Use-Cases&lt;/h3&gt;
&lt;p&gt;In previous posts (&lt;a href=&quot;/blog/2022/06/slsa-github-workflows&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;/blog/2022/08/slsa-github-workflows-generic-ga&quot;&gt;2&lt;/a&gt;), we described how consumers can use information found in non-forgeable SLSA Level 3 build provenance to evaluate policies that may prevent certain classes of supply chain attacks.&lt;/p&gt;
&lt;p&gt;In particular, with the new information provided in GCB’s provenance, users may validate that a predefined set of workflows created the artifacts. For example, an organization may use a certain build configuration to generate a base image for building a final artifact. Before executing the image to create their releases, they can verify the SLSA provenance like above and then validate that the base image was generated from the authorized configuration. The GCB provenance exposes the metadata in the build recipe:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jq &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'.predicate.recipe.entryPoint'&lt;/span&gt; verified-provenance.json &lt;span class=&quot;c&quot;&gt;# cloudbuild.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Reaching SLSA Level 3 with GCB is a major step in making provenance available to even more consumers. This is important to provide build transparency and security in your own or your end-users’ supply-chain. We encourage you to enable build provenance in your container image builds on GCB and to use our verification tools to start validating provenance for policy evaluation. We welcome all types of feedback and contributions to our &lt;a href=&quot;https://github.com/slsa-framework/slsa-verifier&quot;&gt;verifier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the future, we’re looking to move towards more seamless SLSA provenance verification and also enable policy evaluation on images. We’re also hoping to add build provenance verification for other artifact types to slsa-verifier as support for provenance generation expands.&lt;/p&gt;
&lt;p&gt;If you are interested in working with us to grow the ecosystem of SLSA tooling, we invite you to the &lt;a href=&quot;/community&quot;&gt;SLSA Working Group&lt;/a&gt; and the &lt;a href=&quot;/notes/tooling&quot;&gt;SLSA Tooling special interest group&lt;/a&gt;.&lt;/p&gt;</content><author><name>Asra Ali, Ian Lewis, Laurent Simon, Stephen Anastos</name></author><summary type="html">Earlier this year, Google Cloud Build (GCB) announced support for Level 3 assurance of Supply-chain Levels for Software Artifacts (SLSA) for container images. Users can now automatically generate verifiable provenance documents (build records) of builds that take place in Cloud Build. Provenance can be used to provide assurance that a trusted builder (in this case, GCB) produced the resulting image through some declared process with trusted source material. To make verification effortless, we are announcing support for verifying the provenance document in the open-source slsa-verifier CLI tool, which previously only had support for GitHub Actions. With the slsa-verifier, everyone — not just the container authors — can verify the SLSA provenance document.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Executive Order on Secure Supply Chain — in Plain English</title><link href="https://chtiangg.github.io/slsa/blog/2022/09/eo-in-plain-english" rel="alternate" type="text/html" title="Executive Order on Secure Supply Chain — in Plain English" /><published>2022-09-26T00:00:00+00:00</published><updated>2022-09-26T00:00:00+00:00</updated><id>https://chtiangg.github.io/slsa/blog/2022/09/eo-in-plain-english</id><content type="html" xml:base="https://chtiangg.github.io/slsa/blog/2022/09/eo-in-plain-english">&lt;p&gt;You may have heard about &lt;a href=&quot;https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/&quot;&gt;EO 14028&lt;/a&gt;, the “Executive Order on Improving the Nation’s Cybersecurity”, which mandates the establishment of minimum supply chain security standards for all software consumed by the US government. On September 14th the White House Office of Management and Budget (OMB) issued &lt;a href=&quot;https://www.whitehouse.gov/wp-content/uploads/2022/09/M-22-18.pdf&quot;&gt;a memorandum&lt;/a&gt; setting firm and aggressive timelines for implementation of guidelines stemming from the EO, and you might reasonably be wondering what it all means. If so, this post is for you. We’re going to try to lay it out in plain English and share steps to help you get ready to meet the timelines&lt;/p&gt;
&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;p&gt;First, a little history.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;May 2021&lt;/strong&gt;, President Biden’s White House published &lt;a href=&quot;https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/&quot;&gt;Executive Order (EO) 14028 on Improving the Nation’s Cybersecurity&lt;/a&gt;, recognizing “persistent and increasingly sophisticated malicious cyber campaigns that threaten the public sector, the private sector, and ultimately the American people’s security and privacy”. The Executive Order directed the US Secretary of Commerce acting through the Director of NIST to “issue guidance identifying practices that enhance the security of the software supply chain”.&lt;/p&gt;
&lt;p&gt;After a &lt;a href=&quot;https://www.ntia.gov/files/ntia/publications/frn-sbom-rfc-06022021.pdf&quot;&gt;request for comments&lt;/a&gt; in &lt;strong&gt;June 2021&lt;/strong&gt;, the US Department of Commerce &lt;a href=&quot;https://www.ntia.gov/blog/2021/ntia-releases-minimum-elements-software-bill-materials&quot;&gt;issued in July 2021&lt;/a&gt; a report &lt;a href=&quot;https://www.ntia.doc.gov/files/ntia/publications/sbom_minimum_elements_report.pdf&quot;&gt;Minimum Elements for an SBOM&lt;/a&gt;, as part of establishing new baseline security standards for development of software used by the US Federal Government. We published a &lt;a href=&quot;/slsa/blog/2022/05/slsa-sbom&quot;&gt;blog post on SLSA and SBOMs&lt;/a&gt; a little while ago.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;February 2022&lt;/strong&gt;, in accordance with with EO, the US National Institute of Standards and Technology (&lt;a href=&quot;nist.gov&quot;&gt;NIST&lt;/a&gt;) issued two documents with further standards, now collectively known as the “NIST Guidance”:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Secure Software Development Framework (SSDF), SP 800-218 [&lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-218.pdf&quot;&gt;link&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Software Supply Chain Security Guidance [&lt;a href=&quot;https://www.nist.gov/system/files/documents/2022/02/04/software-supply-chain-security-guidance-under-EO-14028-section-4e.pdf&quot;&gt;link&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We covered the SSDF briefly in a &lt;a href=&quot;/slsa/blog/2022/06/slsa-ssdf&quot;&gt;previous slsa.dev blog post&lt;/a&gt;, and noted how SLSA could form a ready on-ramp to successful SSDF conformance.&lt;/p&gt;
&lt;h2 id=&quot;whats-new&quot;&gt;What’s new&lt;/h2&gt;
&lt;p&gt;In &lt;strong&gt;September 2022&lt;/strong&gt; the White House Office of Management and Budget (OMB) issued &lt;a href=&quot;https://www.whitehouse.gov/wp-content/uploads/2022/09/M-22-18.pdf&quot;&gt;a memorandum&lt;/a&gt; requiring every Federal agency to comply with the NIST Guidance “when using third-party software on the agency’s information systems or otherwise affecting the agency’s information”.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;June 2023&lt;/strong&gt;, compliance with the NIST Guidance will be required for all “critical software” used by Federal agencies.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;September 2023&lt;/strong&gt;, compliance with the NIST Guidance will be required for all third-party software used by Federal agencies.&lt;/p&gt;
&lt;h2 id=&quot;what-it-means&quot;&gt;What it means&lt;/h2&gt;
&lt;p&gt;If your software is sold to, or used by, the US Federal government then your ears should be pricking up about now. Starting next year you will be expected, for each major version of each software product you supply, to provide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A self-attestation that the product was built in conformance with NIST’s Secure Software Development Framework (SSDF). NIST has published online a handy &lt;a href=&quot;https://csrc.nist.gov/csrc/media/Publications/sp/800-218/final/documents/NIST.SP.800-218.SSDF-table.xlsx&quot;&gt;matrix of SSDF requirements&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;On request, a Software Bill of Materials (SBOM) for the product. The NTIA report &lt;a href=&quot;https://www.ntia.doc.gov/files/ntia/publications/sbom_minimum_elements_report.pdf&quot;&gt;Minimum Elements of an SBOM&lt;/a&gt; is a useful starting point for understanding what’s required.&lt;/li&gt;
&lt;li&gt;On request, other artifacts substantiating SSDF conformance, e.g., output of vulnerability scanners, software provenance metadata, etc.&lt;/li&gt;
&lt;li&gt;On request, evidence of participation in a Vulnerability Disclosure Program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even if your software is not in scope today, you might nonetheless find your customers asking for the same things before long, as the new US Federal Government standards raise the bar across the industry.&lt;/p&gt;
&lt;h2 id=&quot;whats-in-scope&quot;&gt;What’s in scope&lt;/h2&gt;
&lt;p&gt;Notably, the OMB memo extends to software &lt;strong&gt;used&lt;/strong&gt; by agencies, not merely software &lt;strong&gt;procured&lt;/strong&gt; by agencies. That brings into scope products which haven’t previously had to work with government compliance standards, such as free or liberally licensed ones.&lt;/p&gt;
&lt;p&gt;The OMB dictates that agencies will themselves by &lt;strong&gt;December 2022&lt;/strong&gt; generate a software inventory listing which products will need to meet the new requirements next year; and of those which are considered “critical” and will need to comply by &lt;strong&gt;June 2023&lt;/strong&gt;, ahead of the &lt;strong&gt;September 2023&lt;/strong&gt; deadline for everything else. The agencies will use &lt;a href=&quot;https://www.nist.gov/itl/executive-order-improving-nations-cybersecurity/critical-software-definition-explanatory&quot;&gt;NIST’s definition&lt;/a&gt; to determine criticality.&lt;/p&gt;
&lt;h2 id=&quot;what-now&quot;&gt;What now?&lt;/h2&gt;
&lt;p&gt;First, don’t panic!&lt;/p&gt;
&lt;p&gt;Instead, you can get started right away with some immediate concrete steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the &lt;a href=&quot;https://www.whitehouse.gov/wp-content/uploads/2022/09/M-22-18.pdf&quot;&gt;OMB memorandum&lt;/a&gt; itself. This blog post provides a plain English summary but omits some details such as how exceptions are handled, how remediation plans work, how self-attestations are made in practice, and so on. It’s worthwhile reading the original text to get the full skinny.&lt;/li&gt;
&lt;li&gt;Familiarize yourself with the &lt;a href=&quot;https://csrc.nist.gov/csrc/media/Publications/sp/800-218/final/documents/NIST.SP.800-218.SSDF-table.xlsx&quot;&gt;practices and tasks&lt;/a&gt; of the &lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-218.pdf&quot;&gt;Secure Software Development Framework&lt;/a&gt; (SSDF), and begin to develop a sense of how your own software development processes map onto NIST’s set. Take note of any glaring gaps you see.&lt;/li&gt;
&lt;li&gt;Read up on SBOMs. A 2019-era NTIA whitepaper “&lt;a href=&quot;https://www.ntia.gov/files/ntia/publications/ntia_sbom_use_cases_roles_benefits-nov2019.pdf&quot;&gt;Roles and Benefits for SBOM Across the Supply Chain&lt;/a&gt;” includes a comprehensive catalog of potential benefits offered by SBOMs, and the companion document &lt;a href=&quot;https://www.ntia.doc.gov/files/ntia/publications/sbom_minimum_elements_report.pdf&quot;&gt;Minimum Elements of an SBOM&lt;/a&gt; lays out a pragmatic starting point.&lt;/li&gt;
&lt;li&gt;Review &lt;a href=&quot;https://www.nist.gov/itl/executive-order-improving-nations-cybersecurity/critical-software-definition-explanatory&quot;&gt;NIST’s definition&lt;/a&gt; of “critical software” to understand if your products fall into this category. If so, your conformance with the new standards is expected by June next year, rather than September.&lt;/li&gt;
&lt;li&gt;See how SLSA can help! Read the previous posts &lt;a href=&quot;/slsa/blog/2022/05/slsa-sbom&quot;&gt;SBOM + SLSA: Accelerating SBOM success with the help of SLSA&lt;/a&gt; and &lt;a href=&quot;/slsa/blog/2022/06/slsa-ssdf&quot;&gt;SLSA for Success: Using SLSA to help achieve NIST’s SSDF&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Isaac Hepworth</name></author><summary type="html">You may have heard about EO 14028, the “Executive Order on Improving the Nation’s Cybersecurity”, which mandates the establishment of minimum supply chain security standards for all software consumed by the US government. On September 14th the White House Office of Management and Budget (OMB) issued a memorandum setting firm and aggressive timelines for implementation of guidelines stemming from the EO, and you might reasonably be wondering what it all means. If so, this post is for you. We’re going to try to lay it out in plain English and share steps to help you get ready to meet the timelines</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" /><media:content medium="image" url="https://chtiangg.github.io/slsa/images/icons/android-chrome-192x192.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>