Hello all,
I’m starting the process of defining the Python Security Response Team (PSRT) membership and operations in such a way that allows for more, rather than fewer, core team members to participate in the vulnerability triage and remediation process.
Sponsor cc: @gpshead
Problem statement
The Python Security Response Team is described as “a highly trusted cabal of Python developers”. Historically, this team has been informally defined as members on a private mailing list. In practice this means that core team members interested in vulnerability triage or coordination (either personally or through their employer) have no documented pathway to join or contribute to the PSRT or knowledge about what the role requires.
The PSRT today uses email threads instead of a ticketing system. Being a mailing list means that there is never a clear “assignee” for who is pushing a report forward towards completion. Without this designation, it can be unclear who is the decision-maker for a particular report. If there are longer periods of inactivity on a thread, the report can sometimes run out of steam or be forgotten.
Collaboration between PSRT members and other core team members that are experts in the code with the reported vulnerability is similarly ad-hoc, either requiring the manual addition of an email address to an email thread or to a private GitHub repository and team. This friction means it’s tougher to involve non-PSRT members in determination and remediation efforts. This also results in lots of menial work managing individual accounts within GitHub repositories and teams to maintain “expiring” access.
Proposal
Responsibilities of PSRT members
Define the responsibilities of PSRT members, so that potentially interested contributors know what the role looks like ahead of time before joining the PSRT. Responsibilities include:
-
Being knowledgeable about typical vulnerability report handling processes.
-
Being assigned as a “coordinator” on vulnerability reports, and responsible for moving the report through the PSRT process to a “finished” state (either rejected or publishing an advisory) within the industry standard timeline of 90 days.
-
Coordinating the remediation of vulnerabilities you’re assigned to, by involving relevant core team members or triagers where necessary.
-
Authoring and publishing advisories to be shared on security-announce@python.org. These advisories are used for CVE records by the PSF CVE Numbering Authority.
-
Not sharing or acting on embargoed information publicly, such as applying unpublished mitigations ahead of the publication date.
-
PSRT members that are staff of the Python Software Foundation, as an “Open Source Steward” defined in Article 24 of the Cyber Resilience Act, have additional responsibilities such as reporting actively exploited vulnerabilities to ENISA/CSIRTs.
PSRT coordinators and remediation developers are credited publicly for their contributions in CVE records.
PSRT membership
Create an explicit process so that any core team members interested in vulnerability triage are able to join the PSRT for as long as they’re active as coordinators of vulnerabilities. Members can voluntarily leave the PSRT or will be rotated out after a period of inactivity.
Any core team member or triager may join the PSRT with approval from the Steering Council. Existing members of the PSRT that are not core team members or triagers will be recommended to be added as triagers through the typical process to maintain their role in the PSRT.
Once per year, PSRT admins will query the PSRT list and remove members who have been inactive, defined as not being an assigned coordinator or commenting on a vulnerability report in the past year. Upon PEP acceptance, the existing PSRT list will have inactive members removed.
Active Release Managers and Steering Council members may be members of the PSRT without needing to actively participate in vulnerability coordination, for the purposes of preparing for security releases and oversight.
PSRT shall maintain at least 2 of its members as “admins” of the mailing list.
Steering Council has final say on membership and admins of the PSRT.
Process for adding and removing PSRT members from relevant lists and permissions will be documented in the Python Developer Guide.
Adopting GitHub Security Advisories on projects
Adopt GitHub Security Advisories (GHSA) as the preferred reporting and ticket-tracking mechanism for vulnerability reports to specific projects (such as “CPython”, “pip”, etc). Reports sent to security@python.org intended for specific projects will be redirected to submit via GHSA (or submitted on behalf of the reporter if they don’t want to use GitHub).
Using a ticketing system like GHSA allows for:
-
Associating a report with other information, such as the assigned coordinator, CVE ID and CVSS severity. This information can be used to automatically “generate” a CVE record.
-
Automating aspects of vulnerability reports and remediation with a bot, similar to Bedevere, which can assist coordinators. Currently such a bot exists that assigns CVE IDs to accepted reports, but will be extended further to aid coordinators.
-
Managing access per-report for collaborators outside of the PSRT. This allows non-PSRT members to collaborate in a pull-request UI without tons of manual access management.
-
Tracking the status and timelines associated with each report so no report goes beyond the timeline expected for vulnerability report accidentally.
Projects that are covered by the PSRT that don’t already have GHSA enabled will have the feature enabled on the repositories and security policies updated to point to the GHSA submission form for the project.