Skip to content

Commit 2325e57

Browse files
sethmlarsonhugovkwillingc
authored
PEP 811: Defining Python Security Response Team membership and responsibilities (#4669)
Co-authored-by: Hugo van Kemenade <[email protected]> Co-authored-by: Carol Willing <[email protected]>
1 parent 4fcdf85 commit 2325e57

File tree

2 files changed

+293
-0
lines changed

2 files changed

+293
-0
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,7 @@ peps/pep-0807.rst @dstufft
686686
# ...
687687
peps/pep-0809.rst @zooba
688688
peps/pep-0810.rst @pablogsal @DinoV @Yhg1s
689+
peps/pep-0811.rst @sethmlarson @gpshead
689690
# ...
690691
peps/pep-2026.rst @hugovk
691692
# ...

peps/pep-0811.rst

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
PEP: 811
2+
Title: Defining Python Security Response Team membership and responsibilities
3+
Author: Seth Michael Larson <[email protected]>
4+
Sponsor: Gregory P. Smith <[email protected]>
5+
Discussions-To: Pending
6+
Status: Draft
7+
Type: Process
8+
Topic: Governance
9+
Created: 22-Oct-2025
10+
Post-History:
11+
`06-Oct-2025 <https://discuss.python.org/t/104199>`__,
12+
13+
Abstract
14+
========
15+
16+
This PEP proposes formalizing the membership and responsibilities policies of
17+
the Python Security Response Team (PSRT). The PSRT is a "highly trusted cabal of
18+
Python developers" which handles security vulnerability disclosures to the
19+
``[email protected]`` mailing list.
20+
21+
The PSRT receives access to known vulnerabilities affecting CPython and pip before
22+
they're disclosed to the public. This information is sensitive and if leaked
23+
could harm Python users through zero-day attacks, where an attacker has access
24+
to exploitable vulnerabilities before defenders are notified of fixes and given
25+
a chance to upgrade.
26+
27+
However, the PSRT often needs help from core developers in particular subject
28+
areas to remediate vulnerabilities. This PEP proposes defined membership and
29+
obligations for the PSRT, including a new "Coordinator" role, and proposes
30+
adopting `GitHub Security Advisories <https://docs.github.com/en/code-security/security-advisories>`_
31+
(GHSAs) as the canonical reporting, tracking, and collaboration method between
32+
the PSRT, reporters, and core developers for vulnerabilities.
33+
34+
Motivation
35+
==========
36+
37+
Limit access to pre-disclosure vulnerability reports
38+
----------------------------------------------------
39+
40+
Vulnerability report information prior to disclosure is sensitive,
41+
Python users can be substantially harmed if vulnerabilities are exploited.
42+
For this reason it's critical to limit access to information to only people
43+
involved in the remediation of the vulnerability at hand.
44+
45+
The historical approach to collaboration on patch development was to manually
46+
add GitHub users to a private ``python/psrt`` repository
47+
which is a mirror of the ``python/cpython`` repository.
48+
This approach didn't allow filtering particular collaborators for specific
49+
vulnerabilities, meaning all collaborators had access to all reports and patches.
50+
51+
This manual process discouraged bringing on core developers outside
52+
the PSRT to collaborate, which can make patch development more difficult.
53+
This limitation also meant vulnerability reporters weren't able to collaborate on patches,
54+
either.
55+
56+
Onboarding new contributors to the PSRT
57+
---------------------------------------
58+
59+
Unlike most open-source contributions, the work of the PSRT doesn't happen
60+
in the open. Instead, most work occurs privately by a trusted group to limit
61+
access to undisclosed
62+
vulnerability reports. Given the sensitive nature of this work, it appears opaque from the outside, and
63+
it's difficult to get started as a newcomer and to understand the
64+
expectations of the group.
65+
66+
In practice this has meant that relatively few new members join the PSRT,
67+
which over time could negatively impact the group's ability to triage reports
68+
and develop remediations with the core team.
69+
70+
Lack of defined ownership for vulnerability reports
71+
---------------------------------------------------
72+
73+
Currently PSRT reports don't have a clear "owner" of who is ensuring the
74+
incident or report continues moving towards a resolved state. This is especially
75+
an issue in the context of a mailing list, where it's difficult to know whether
76+
an issue is being responded to by someone else already or whether your
77+
determination on a report is the same as others within the PSRT.
78+
79+
Ideally, similar to issues, pull requests, and PEPs, one defined person
80+
would be responsible for moving the mitigation task forward to completion.
81+
This allows that person to
82+
contribute and make decisions on the task without fear of "stepping on toes".
83+
84+
Aligning with vulnerability disclosure timelines
85+
------------------------------------------------
86+
87+
Vulnerability reporting best practices `recommend a 90 day
88+
timeline`_ between the initial disclosure and when a report is made public
89+
to balance the needs of users, the project, and the reporter.
90+
Many vulnerability reporting organizations already use this timeline
91+
and will disclose vulnerabilities publicly even if the project doesn't
92+
create their own mitigation.
93+
94+
To avoid reports getting stuck, forgotten, or published publicly without a
95+
remediation this PEP recommends aligning to the 90 days between initial
96+
disclosure and publishing an advisory.
97+
98+
.. _recommend a 90 day timeline: https://github.com/ossf/oss-vulnerability-guide/blob/main/maintainer-guide.md
99+
100+
Rationale
101+
=========
102+
103+
Steering Council and activity determine membership
104+
--------------------------------------------------
105+
106+
The PSRT has no mechanism for deciding who to admit to or remove from the PSRT.
107+
Combined with the security-sensitive nature of the work it can be difficult to
108+
decide who should be admitted, but there must be a system responsible for
109+
evaluating PSRT membership.
110+
111+
This PEP proposes limiting PSRT membership only to active coordinators
112+
of security vulnerabilities that are core developers or triagers,
113+
members involved in oversight (Steering Council),
114+
and members who need information about security releases (Release Managers).
115+
116+
Activity is recommended as the metric for membership to avoid adding additional
117+
risk without any additional benefit to projects by having reports being
118+
triaged and coordinated.
119+
120+
Using GitHub Security Advisories (GHSA)
121+
---------------------------------------
122+
123+
This PEP proposes adopting GitHub Security Advisories as the
124+
system to accept vulnerability reports due to its tight integration
125+
with services already in use by relevant projects.
126+
127+
CPython and pip already use GitHub for source control, issues, pull requests,
128+
continuous integration (CI), and as a part of the release process.
129+
GHSA supports the following features which are desirable for a
130+
vulnerability reporting and management platform:
131+
132+
* Managing GitHub teams and accounts as "collaborators" per-report
133+
rather than per-project or globally.
134+
* Managing non-PSRT collaborators per-report using GitHub accounts.
135+
* "Pull request"-like user interface for developing remediations.
136+
* Tracking reporter, coordinator, credits, submission time, CVE ID, and severity
137+
for each report within the UI.
138+
* Programmatic API for integrating with other services (like CVE) and bots.
139+
140+
However, features that are missing from GHSA are:
141+
142+
* Ability to privately run vulnerability remediation branches on CI.
143+
* Multiple API endpoints are missing for the GHSA, such as retrieving and
144+
creating comments on a GHSA report.
145+
146+
These missing features have been reported to GitHub and none are blocking
147+
the adoption of GHSA. Some work will need to be done to work around the
148+
lack of a complete API for the GHSA feature.
149+
150+
Specification
151+
=============
152+
153+
PSRT Membership Policy
154+
----------------------
155+
156+
The Python Steering Council may add or remove members and admins of the PSRT.
157+
New PSRT members must be core team members, triagers, or PSF staff,
158+
and must be `proposed to and accepted`_ by the Steering Council.
159+
160+
Once the Steering Council votes on a membership change to the PSRT then
161+
PSRT admins will enact the change.
162+
A list of PSRT members will be published publicly and kept up-to-date by PSRT
163+
admins.
164+
165+
Once per year the Steering Council will receive a report of inactive members of
166+
the PSRT with the recommendation to remove the inactive users from the PSRT.
167+
"Inactive" is defined here as a member who hasn't coordinated or commented on a
168+
vulnerability report in the past year since the last report was generated.
169+
170+
Members of the PSRT who are a Release Manager or Steering Council
171+
member may remain in the PSRT regardless of inactivity in vulnerability reports.
172+
173+
This PEP proposes removing all members from the PSRT who haven't been active
174+
in the past year and without an exemption for minimum activity (Steering Council,
175+
Release Managers) prior to publication of this PEP. At the time of writing, this
176+
would reduce the PSRT membership size to ~15 members from ~30.
177+
178+
This PEP also proposes not removing members of the PSRT who are active but
179+
not yet core team members or triagers, allowing them to be "legacied" in
180+
to the new PSRT Membership Policy.
181+
182+
.. _proposed to and accepted: https://github.com/python/steering-council/
183+
184+
PSRT Admins
185+
~~~~~~~~~~~
186+
187+
At least two PSRT members shall serve as admins, determined by the Steering
188+
Council. This PEP proposes maintaining the existing set of PSRT admins:
189+
190+
* Ned Deily <[email protected]>
191+
* Ee Durbin <[email protected]>
192+
* Seth Larson <[email protected]>
193+
* Barry Warsaw <[email protected]>
194+
195+
Admins have the additional responsibilities of managing membership and
196+
triaging reports to the PSRT mailing list (``[email protected]``).
197+
198+
Responsibilities of PSRT members
199+
--------------------------------
200+
201+
The responsibilities of PSRT members will be documented publicly in the
202+
`Python Developer's Guide`_, so prospective members know what to expect before
203+
applying to join the PSRT. These responsibilities include:
204+
205+
* Being knowledgeable about typical software vulnerability report handling
206+
processes, such as CVE IDs, patches, coordinated disclosure, embargoes, etc.
207+
* Not sharing or acting on embargoed information about the reported vulnerability.
208+
Examples of disallowed behavior include sharing information with colleagues
209+
or publicly deploying unpublished mitigations or patches ahead of the advisory
210+
publication date.
211+
* Acting as a "Coordinator" of vulnerability reports that are submitted
212+
to projects. A coordinator's responsibility is to move a report through the PSRT
213+
process to a "finished" state, either rejected or as a published advisory and
214+
mitigation, within the industry standard timeline of 90 days.
215+
* As a Coordinator, involving relevant core team members or triagers where
216+
necessary to make a determination whether a report is a vulnerability and
217+
developing a patch. Coordinators are **encouraged** to involve members of
218+
the core team to make the best decision for each report rather than working
219+
in isolation.
220+
* As a Coordinator, calculating the severity using CVSS and authoring advisories
221+
to be shared on `[email protected]`_. These advisories are used
222+
for CVE records by the PSF CVE Numbering Authority.
223+
* Coordinators that can no longer move a report forwards for any reason must
224+
delegate their Coordinator role to someone else in the PSRT.
225+
* PSRT members that are admins will have additional responsibilities.
226+
227+
.. _[email protected]: https://mail.python.org/archives/list/[email protected]/
228+
.. _Python Developer's Guide: https://devguide.python.org/developer-workflow/psrt/
229+
230+
Responsibilities of PSRT Admins
231+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
232+
233+
PSRT members who are designated as admins by the Steering Council have the
234+
following additional responsibilities:
235+
236+
* Managing the GitHub team, mailing list, Discord channel, and other
237+
PSRT venues to ensure they are synchronized with the canonical list of
238+
PSRT members determined by the Steering Council.
239+
* On a yearly basis, providing the Steering Council with a report including
240+
a list of inactive PSRT members.
241+
242+
GitHub Security Advisories and GitHub Team
243+
------------------------------------------
244+
245+
This PEP proposes standardizing on the GitHub team ``python/psrt`` as the
246+
canonical list of PSRT members and aligning the mailing list and Discord to match
247+
instead of maintaining each separately. Process documentation will be created to
248+
ensure changes to membership are consistent across these three channels as
249+
members are added and removed.
250+
251+
This PEP proposes adopting GitHub Security Advisories as the system where
252+
vulnerability reports per project are handled. GHSA will be enabled for
253+
relevant repositories and linked to directly from the top-level PSRT
254+
page on python.org and project security policies.
255+
256+
Along with responsibilities the PSRT process for handling vulnerability
257+
reports using GHSA, such as how to assign a Coordinator and calculating
258+
severity, will be added to the `Python Developer's Guide`_.
259+
260+
Adopting GHSAs will coincide with disabling the ``python/psrt`` private
261+
repository (which shares a slug with the GitHub team) and syncing machinery,
262+
as this will no longer be needed for patch development.
263+
264+
Continue using [email protected] mailing list
265+
-----------------------------------------------
266+
267+
The ``[email protected]`` mailing list covers more than CPython and pip,
268+
like security reports for the ``python.org`` or related websites
269+
and as a general hotline for Python ecosystem-related security issues.
270+
Maintaining the mailing list can also be used as a "fall-back" in case
271+
the vulnerability reporting platform changes in the future.
272+
273+
For this reason, the mailing list and PSRT GPG key will continue to function
274+
and be monitored, but reporters will be directed to individual project GitHub
275+
Security Advisory forms for submitting vulnerability reports.
276+
277+
Rejected Ideas
278+
==============
279+
280+
Should inactive members be more aggressively pruned?
281+
----------------------------------------------------
282+
283+
The PSRT only triages a double-digit number of reports every year, meaning there
284+
aren't an abundance of opportunities to "prove" activity on the scale of months.
285+
For this reason along with aligning with existing yearly schedules for the
286+
Steering Council, a yearly pruning was recommended.
287+
288+
Copyright
289+
=========
290+
291+
This document is placed in the public domain or under the
292+
CC0-1.0-Universal license, whichever is more permissive.

0 commit comments

Comments
 (0)