Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add blog post on a SigstoreCon talk: Understanding the Identity of a CI Platform #71

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

richardfan1126
Copy link

Summary

This PR adds a blog post on my SigstoreCon talk: Understanding the Identity of a CI Platform

Release Note

Documentation

@richardfan1126 richardfan1126 requested review from a team as code owners December 15, 2024 14:18
@richardfan1126 richardfan1126 force-pushed the understanding-the-identity-of-a-ci-platform branch from 990ce43 to 77ce84f Compare December 15, 2024 14:19
@richardfan1126 richardfan1126 force-pushed the understanding-the-identity-of-a-ci-platform branch from 77ce84f to 1f9b0cb Compare December 18, 2024 02:43
@haydentherapper
Copy link
Contributor

cc @sigstore/core-team please review


When verifying a sigstore keyless signature, solely relying on the Subject Alternative Name (SAN) is sometimes unreliable, especially when the signature is generated by a CI platform. This post talks about a [security research] where [GitHub reusable workflow](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) can be misused to generate signatures bearing SANs of another entity.

Verifying additional [Fulcio certificate extensions](https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md) (e.g., Source Repository URI) is a way to ensure the real source of a CI-generated signature, but supports from different sigstore clients are not unified. sigstore users, both software maintainers and users, need to pay attention to using Fulcio certificates to verify software sources.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you point out where we have inconsistencies across Sigstore clients? I'd like to fix the bugs here too :)

Copy link
Author

@richardfan1126 richardfan1126 Jan 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for reviewing my post.

The inconsistencies I observed are basically 2 things:

  1. The support of OID extension verification
    As the table at the end shows, not all clients support verifying the signature against OID extension. Some are partially supported only for GitHub signature.
    This is not a problem because there are different timelines on each client dev teams and we shouldn't expect all client support everything on the first day.
    However, I raise this situation on the post so users won't start implementing their software using one client, and then find out it doesn't support this feature.

  2. (This is a little bit technical, so I didn't mention in the post) The verification logic among 3 clients with full support (sigstore-java, sigstore-python (API), sigstore-go) are different

    1. First, sigstore-java only provides low-level APIs for user to verify extension, it's the user's responsibility to know what the extension number, and data format the value are.
    2. For sigstore-python and sigstore-go, they provide the enums (Ref.1, Ref. 2) for user to specify their extension match requirements. But when interpreting those extensions, they have different logics on some fields
      1. IssuerV2: sigstore-python separate Issuer and IssuerV2 and exposes both fields for user to specify the matching requirement (as OIDCIssuer and OIDCIssuerV2 class). (Ref)
        But sigstore-go merge them into a single object Issuer. Also, the parsing logic on whether Issuer or IssuerV2 is being used for matching is non-deterministic (Ref. 1, Ref.2). So as a user, I'm not sure which field is being matched against.
      2. OtherName SAN: sigstore-python extract this field and add it to the SAN list for the matching logic, but sigstore-go seems only allowing one SAN to be verified (Ref)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants