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

content: draft: Harden 'safe-expunging-process' #1203

Merged
merged 15 commits into from
Oct 25, 2024
Merged
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 18 additions & 17 deletions docs/spec/draft/source-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,36 +46,37 @@ Consumers can examine the various source provenance attestations to determine if

## Safe Expunging Process

Administrators have the ability to expunge (remove) content from a repository and its change history without leaving a record of the removed content.
This includes changing files, history, or changing references in git and is used to accommodate legal or privacy compliance requirements.
SCSs MAY allow the organization to expunge (remove) content from a repository and its change history without leaving a public record of the removed content.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
This includes changing files, history, or changing references in git and is used to accommodate legal/privacy compliance requirements.

Removing a revision from a repository is similar to deleting a package version from a registry: it's almost impossible to estimate the amount of downstream supply chain impact.
In version control systems like git, removal of a revision changes the object id of all subsequent revisions that were built on top of it.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
Although there is no "safe" way to do it, it sometimes necessary and there are steps you can take to mitigate the damage.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved

When used as an attack, this is called “repo hijacking” (or “repo-jacking”) and is one of the primary threats source provenance attestations protect against.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
As such great care must be taken by SCSs when implementing these changes for legitimate purposes.

SCSs SHOULD require multi-party approval for any changes made under this process.

The Safe Expunging Process MUST be documented and describe how requests and actions are tracked and SHOULD log the fact that content was removed.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved

On the git VCS, force pushes allow you to remove data from a branch.
If a branch has been identified as consumable branch, force pushes to that branch must follow the safe expunging process.

TODO: Determine how organizations can provide transparency around this process.
At a minimum the organization would need to declare why data was removed from the branch.

The goal of this sections is to document that this process is allowed.
Different organizations and tech stacks may have different approaches to the problem.

Scenarios that need to be addressed:
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
Safe Expunging Scenarios:
TomHennen marked this conversation as resolved.
Show resolved Hide resolved

### Legal Takedowns
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
TomHennen marked this conversation as resolved.
Show resolved Hide resolved

A DMCA takedown request will be addressed by following an agreed-upon process.
That process should be documented itself and followed.
It may be the case that the specific set of commits targeted by the takedown can be expunged in ways that do not impact revisions.

### Commit metadata rewrites
The only currently acceptable scenario to expunge data is in response to some legal or compliance request.

A team may decide that all reachable commits in the history of a revision need to follow a new metadata convention.
In git VCS, compliance with this new policy will require history to be rewritten (commit metadata is included in the computation of the revision id).
Policies in this category include things like commit signatures, author / committer formatting restrictions, closed-issue-linkage, etc.
The takedown request MUST be addressed by following an agreed-upon process.
TomHennen marked this conversation as resolved.
Show resolved Hide resolved

### Repository renames
It may be the case that the specific set of commits targeted by the takedown can be expunged in ways that do not impact revisions.

When a repo is transferred to a new organization ("donated"), or if a repo must be renamed or otherwise have its url changed within the same org, attestations for previous revisions of this repo will no longer be matched because the combination of the repository id and the revision id will have changed.
This process and the resulting logs MAY be private to both prevent calling attention to potentially sensitive data (e.g. PII) or to comply with local laws
TomHennen marked this conversation as resolved.
Show resolved Hide resolved
and regulations which may require the change to be kept private to the extent possible.

## Levels

Expand Down