keycloak / keycloak/keycloak-github-bot

Auto-assign severity label when a CVE is requested to secalert

Open
#71 3 comments 0 reactions 0 assignees View on GitHub
kind/feature status/triage
Dominant language
Java
Stars
9
Forks
11
Avg merge
2d 16h
Merged PRs (30d)
2

Description

### Description

When the team requests a CVE to secalert (via a comment containing the secalert email template), the bot should parse the CVSS score from the comment and automatically assign the corresponding `severity/*` label to the issue. This closes the gap where issues get a CVE requested but the severity label is never applied.

### Value Proposition

The team consistently includes a CVSS score in secalert request emails. Secalert almost always adopts the team's score. Despite this, severity labels are frequently forgotten, leaving triaged issues without proper severity classification. Automating this removes a manual step that is easy to forget and ensures every CVE request results in a correctly labeled issue.

### Goals

- Detect when a comment contains a secalert email template (look for the `* **CVSS:**` field or a CVSS:3.1 vector string)
- Parse the CVSS score and severity from the vector string or the parenthetical (e.g., `4.3 Medium`, `9.1 Critical`)
- Map the severity to the corresponding label:
- Critical (9.0-10.0) → `severity/critical`
- High (7.0-8.9) → `severity/high`
- Medium (4.0-6.9) → `severity/medium`
- Low (0.1-3.9) → `severity/low`
- Apply the label automatically to the issue
- If a `severity/*` label is already present, do not override it (the existing label was set intentionally)
- Automatically apply the label status/embargoed

### Non-Goals

- Validating the CVSS vector or recalculating the score — trust the score as written
- Assigning severity based on non-secalert comments
- Removing or changing existing severity labels

### Discussion

_No response_

### Notes

- The secalert email template always contains a line like: `* **CVSS:** CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N (4.3 Medium)`
- A regex matching `CVSS:3\.1/[A-Z/:]+\s*\((\d+\.\d+)\s+(Critical|High|Medium|Low)\)` should reliably extract both score and severity
- The bot should also handle plain-text variants without bold formatting (e.g., `* CVSS:` without `**`) since the template is sometimes pasted as plain text
- Consider also applying the `kind/cve` label if not already present, since requesting a CVE to secalert implies CVE classification

### Discussion

_No response_

### Motivation

_No response_

### Details

_No response_

Contributor guide

No contributing guide indexed for this repository

Research direction

No files or tests are named in the issue. Start by locating the comment-handling entry point for secalert requests and existing issue-label application; done means matching the stated CVSS forms, preserving existing severity labels, and applying the requested labels only for secalert comments.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
tooling
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
62/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.