@@ -53,6 +53,19 @@ The short version of the steps involved is:
5353
5454There are a lot of details, so please read on.
5555
56+ .. _checklist-generator:
57+
58+ .. admonition:: Use the checklists app
59+
60+ To generate a checklist compiling the tasks described below as relevant to
61+ the specific release(s) you are issuing, use the checklists app in the
62+ `project admin <https://www.djangoproject.com/admin/checklists/>`_. This
63+ populates a lot of boilerplate you will need for announcements, CVE
64+ publication, and hashes for commit messages. By using this app for preparing
65+ security issue metadata, your peer releasers can check your entries and
66+ consult them again in the future.
67+ (`Example <https://www.djangoproject.com/checklists/release/5.2.4/>`_)
68+
5669Prerequisites
5770=============
5871
@@ -150,9 +163,23 @@ any time leading up to the actual release.
15016310 (or more) days before a security release
151164-------------------------------------------
152165
153- #. Request the `CVE IDs <https://cveform.mitre.org/>`_ for the security
154- issue(s) being released. One CVE ID per issue, requested with
155- ``Vendor: djangoproject`` and ``Product: django``.
166+ #. Reserve one `CVE ID <https://www.cve.org/About/Overview/>`_ per security
167+ issue as follows. (Or, if you lack CNA credentials, email
168+ ``cna@djangoproject.com`` with a request.)
169+
170+ * Enable virtual environment with :pypi:`cvelib` installed.
171+
172+ * Export user information:
173+
174+ .. code-block:: shell
175+
176+ $ export CVE_USER=<user-email>@djangoproject.com CVE_ORG=DSF
177+
178+ * Reserve:
179+
180+ .. code-block:: shell
181+
182+ $ cve --interactive reserve <quantity>
156183
157184#. Generate the relevant (private) patch(es) using ``git format-patch``, one
158185 for the ``main`` branch and one for each stable branch being patched.
@@ -162,9 +189,9 @@ A week before a security release
162189
163190#. Send out pre-notification exactly **one week** before the security release.
164191 The template for that email and a list of the recipients are in the private
165- ``django-security`` GitHub wiki. BCC the pre-notification recipients and be
192+ ``django-security`` GitHub wiki. BCC the pre-notification recipients, and be
166193 sure to include the relevant CVE IDs. Attach all the relevant patches
167- (targeting ``main`` and the stable branches) and sign the email text with
194+ (targeting ``main`` and the stable branches), and sign the email text with
168195 the key you'll use for the release, with a command like:
169196
170197 .. code-block:: shell
@@ -185,6 +212,17 @@ A week before a security release
185212 For details of severity levels, see:
186213 https://docs.djangoproject.com/en/dev/internals/security/#how-django-discloses-security-issues
187214
215+ #. Prepare issue metadata:
216+ * Severity
217+ * Short description
218+ * Reporter
219+ * Remediator
220+ * Reported at
221+ * Confirmed at (usually date CVE reserved)
222+ * CWE Problem Type
223+ * CAPEC Impact Type
224+ * CVSS (4.0) Score & Vector
225+
188226A few days before any release
189227-----------------------------
190228
@@ -644,12 +682,18 @@ Now you're ready to actually put the release out there. To do this:
644682#. Post the release announcement to the |django-announce| mailing list and the
645683 Django Forum. This should include a link to the announcement blog post.
646684
685+ #. If this is a security release, publish the CVE metadata. (The
686+ :ref:`checklist app<checklist-generator>` generates JSON for this.):
687+
688+ .. code-block:: shell
689+
690+ $ cve publish <cve-number> --cve-json-file <path-to-file>
691+
647692#. If this is a security release, send a separate email to
648- ``oss-security@lists.openwall.com``. Provide a descriptive subject, for
649- example, "Django" plus the issue title from the release notes (including CVE
650- ID). The message body should include the vulnerability details, for example,
651- the announcement blog post text. Include a link to the announcement blog
652- post.
693+ ``oss-security@lists.openwall.com``. Provide "Django" plus the CVE IDs in
694+ the subject line. The message body should include the vulnerability details,
695+ for example, the announcement blog post text. Include a link to the
696+ announcement blog post.
653697
654698Post-release
655699============
@@ -708,8 +752,8 @@ You're almost done! All that's left to do now is:
708752
709753 .. code-block:: shell
710754
711- git checkout stable/A.B.x
712- git checkout -b update-translations-catalog-A.B.x
755+ $ git checkout stable/A.B.x
756+ $ git checkout -b update-translations-catalog-A.B.x
713757
714758 #. Ensure that the release's dedicated virtual environment is enabled and
715759 run the following:
0 commit comments