| Notes on "how to assign an id and push it out to the world" |
| |
| Prep work |
| ======== |
| |
| Things you need to have installed to get this all working: |
| |
| Binaries needed on your path to run automatically: |
| jo - https://github.com/jpmens/jo |
| cvelib - https://github.com/RedHatProductSecurity/cvelib.git |
| |
| Binaries that are nice to have: |
| just - https://github.com/casey/just.git |
| patatt - part of 'b4', needed to sign emails with the git send-email hook |
| |
| Source repos that are required: |
| Full linux-stable tree for git lookups. |
| git@gitolite.kernel.org:/pub/scm/linux/kernel/git/stable/linux |
| |
| linux-stable_commit_tree, scripts used to figure out what commit was released in what directory. |
| https://git.sr.ht/~gregkh/linux-stable_commit_tree |
| |
| Keep these two repos up to date, they are updated with each new kernel release (stable and -rc) |
| |
| Export the following environment variables with full paths to both repos. |
| |
| export CVEKERNELTREE="${HOME}/<path_to_kernel>" |
| |
| If it helps, add them to your terminal rc file (~/.bashrc|~/.zshrc) et al. |
| |
| Right now, the tools in scripts/ have hard-coded locations for the above 2 |
| source repos. Edit them to point to where you place them in your directory |
| tree, and maybe let's figure out how to specify them somehow on the command |
| line or environment variables... |
| |
| Set the environment variable CVE_USER="your email address used for CVE" |
| |
| You can set CVE_API_KEY environment variable as well, or you can type it in |
| each time you access the CVE.org site, your call. |
| |
| To test the ability to access the CVE database, run: |
| cve -o Linux org |
| |
| the output should look something like: |
| kernel.org — Linux |
| ├─ Roles: CNA |
| ├─ Created: Wed Feb 14 06:36:05 2024 +0000 |
| └─ Modified: Tue Feb 27 18:42:56 2024 +0000 |
| |
| If this doesn't work, poke Greg to work through what went wrong. |
| |
| Install the git send-email hook that will sign the emails when sent out, and |
| set a "pretty" Message-Id: value. |
| cp git_hooks/sendemail-validate .git/hooks/ |
| |
| Verify the hook works it should fail with the following error: |
| $ .git/hooks/sendemail-validate |
| WARNING: Folder does not exist, failed opening mbox folder /var/spool/mail/gregkh. |
| Can't call method "message" on an undefined value at .git/hooks/sendemail-validate line 8. |
| |
| If you get warnings about missing Perl modules, go find them on your distro, or |
| don't worry about it and delete the hook, your call. |
| |
| |
| Assigning an id |
| =============== |
| |
| Start with a git id, let's use 5f449e245e5b ("riscv: mm: Fixup compat mode boot |
| failure") as an example for all of this. |
| |
| In the main vulns.git repo, run 'just' to see the available options: |
| $ just |
| Available recipes: |
| cve_batch_create FILENAME # Create a bunch of CVEs that are contained, one per line, in FILENAME |
| cve_create GIT_ID *CVE_ID # Create a CVE for a specific Linux kernel git commit id |
| cve_publish_json # Publish all modified .json files with the CVE server |
| cve_publish_mbox # Publish all modified .mbox messages with git-send-email |
| cve_reject CVE_ID # Reject a published/reserved CVE |
| cve_search GIT_ID # Search for a specific git id in the list of published CVE ids |
| cve_update *GIT_ID # Update all, or just one, CVE entries with the latest version information |
| cvelistV5_check FILENAME # Check the cvelistV5 database for any existing CVE entries |
| list_ids # Query the CVE server for the list of all ids assigned to us |
| summary # List a summary of the ids at this point in time |
| update_cvelistV5 # update cvelistV5 and commit the difference |
| |
| |
| You can run the cve_* scripts directly from scripts/ or you can use 'just' to |
| run them instead, your call. |
| |
| To create a cve id, do: |
| just cve_create 5f449e245e5b |
| or |
| scripts/cve_create 5f449e245e5b |
| |
| the output should look something like: |
| CVE-2023-52475 is now allocated for commit 5f449e245e5b ("riscv: mm: Fixup compat mode boot failure") |
| (it should be in color) |
| |
| Great, it's created, but what happened? Look at git: |
| $ git status -s |
| D cve/reserved/2023/CVE-2023-52475 |
| ?? cve/published/2023/CVE-2023-52475 |
| ?? cve/published/2023/CVE-2023-52475.json |
| ?? cve/published/2023/CVE-2023-52475.mbox |
| ?? cve/published/2023/CVE-2023-52475.sha1 |
| |
| The CVE id was moved from the reserved directory into the published directory, |
| if all went well. |
| |
| Look at the .mbox file, and verify that it looks sane, the "Affected and fixed |
| versions" looks correct, and that the version and git ids are correct. You can |
| manually check the links at the bottom of the email as well to verify this. |
| Also verify that the email address at the top of the email is correctly set to |
| yours. |
| |
| If that looks good, look at the .json file and be thankful that we don't have |
| to type this by hand all the time, hopefully it also looks correct. |
| |
| Submit the cve id to cve.org: |
| just cve_publish_json |
| or |
| scripts/cve_publish_json |
| |
| The script will iterate through the uncommitted or modified json files and |
| submit them to cve.org. The response should be "success", if not, work through |
| it with Greg. |
| |
| Send the email for the new cve id: |
| just cve_publish_mbox |
| or |
| scripts/cve_publish_mbox |
| |
| The script will iterate through the uncommited mbox files and run 'git |
| send-email' on them to send them to the linux-cve-announce mailing list. |
| |
| If the git hook is installed, patatt will ask to sign the messages with your |
| gpg key before sending them out. |
| |
| Now that the json file is submitted, and the .mbox file is sent out, that's it, |
| so just commit the changes to the git repo: |
| git add cve/ |
| git commit -a |
| and provide a changelog message and push the repo to the server. |