Security Releases general information
Security vulnerabilities in GitLab and its dependencies are to be addressed with the highest priority.
Security releases are naturally very similar to patch releases, but on a much shorter timeline. The goal is to make a security release available as soon as possible, while ensuring that the security issue is properly addressed and that the fix does not introduce regressions.
At GitLab, we have two types of security releases:
- critical: immediate patch and mitigation is required for a single issue
- non-critical: monthly release of planned issue
Also see the GitLab Maintenance Policy for the information on determining supported releases and assigning versions.
Guides by role
Terminology
Security vulnerability issue - A confidential issue in a GitLab Canonical project (
gitlab-org/some-project
), detailing a security vulnerability and steps to reproduce.Usually created via HackerOne.
Example: gitlab-org/gitlab#193100.
Security release tracking issue - A confidential issue in
gitlab-org/gitlab
which is the high-level overview of an entire security release (critical or otherwise).Created via issue template.
Example: gitlab-org/gitlab#209019.
Security implementation issue - An issue in a GitLab Security project (
gitlab-org/security/some-project
), outlining the versions affected, detailing the steps a developer needs to take to remediate the vulnerability, and associating backports.Created via issue template.
Example: gitlab-org/security/gitlab#80.
Security merge request (MR) - A merge request in a GitLab Security project (
gitlab-org/security/some-project
), resolving a vulnerability in a specific branch.Created via merge request template.
Example: gitlab-org/security/gitlab!314.
Release task issue - Used by release managers as a checklist of steps to complete the release.
Created via ChatOps (
/chatops run release prepare --security
).Example: gitlab-org/release/tasks#1272.
Issue association
graph RL
classDef canonical fill:#74bd3d
classDef security fill:#ff7272
secVuln(Security vulnerability Issue)
secRelease(Security release Issue)
secFix(Security implementation issue)
task{{Release task issue}}
class secVuln canonical
class secRelease canonical
class secFix security
secFix -->|references| secVuln
secFix ---|related| secRelease
task -.->|references| secRelease
Merge request association
graph RL
classDef canonical fill:#74bd3d
classDef security fill:#ff7272
secFix(Security implementation issue)
secMR1(["Security MR 1 (default-branch)"])
secMR2(["Security MR 2 (backport)"])
secMR3(["Security MR 3 (backport)"])
secMR4(["Security MR 4 (backport)"])
class secFix security
class secMR1,secMR2,secMR3,secMR4 security
secMR1 & secMR2 & secMR3 & secMR4 -.->|references| secFix
Merging
graph TD
classDef security fill:#ff7272
coMerge{{"/chatops run release merge --security"}}
coMergeDefaultBranch{{"/chatops run release merge --security --default-branch"}}
secMR1(["Security MR 1 (default-branch)"])
secMR2(["Security MR 2 (backport)"])
secMR3(["Security MR 3 (backport)"])
secMR4(["Security MR 4 (backport)"])
autodeploy(auto-deploy)
defaultbranch(default-branch)
stable129(12-9-stable-ee)
stable128(12-8-stable-ee)
stable127(12-7-stable-ee)
coMerge --> secMR2
coMerge --> secMR3
coMerge --> secMR4
secMR2 --> |merge| stable129
secMR3 --> |merge| stable128
secMR4 --> |merge| stable127
coMergeDefaultBranch --> secMR1
secMR1 --> |merge| defaultbranch
defaultbranch -.-> |cherry-pick| autodeploy
class secMR1,secMR2,secMR3,secMR4 security
class stable129,stable128,stable127 security
class defaultbranch,autodeploy security
Non-critical Security Releases
Around the 28th of the month, we release patch versions of GitLab containing non-critical security fixes. This date has been chosen as it gives enough time to release a non-security patch release after standard release on the 22nd of the month.
Security Release deadlines
Just as with patch releases, deadlines for non-critical security releases are at the discretion of release managers, the 28th of the month is used as default due date.
Final deadline will depend on a variety of factors:
- GitLab.com availability.
- Workload on Release Managers.
- Stability of auto-deployments.
In the run-up to the due date, release managers will start processing the security implementation issues associated with the Security Release Tracking issue.
To guarantee the security fix is included on the Security Release, all merge requests associated should be ready to be processed 48h before the due date established in the Security Release Tracking Issue.
Fixes not ready by that date may not be considered for the security release and they’ll have to go into the next one.
Security issues that are linked to the Security Release Tracking issue less than 24 hours before the due date will be automatically unlinked by the Release Tools Bot. For example, if the due date of the Security Release Tracking issue is 28th August, security issues added after 27th August 00:00 UTC will be automatically unlinked. If you have an urgent security issue that cannot wait for the next security release, you can ping the Release Managers for an exception.
Critical Security Releases
Depending on the severity and impact of the vulnerability, an immediate patch release consisting of just the security fix may be warranted.
The critical release process is a superset of a non-critical release, and for completeness the process is written here:
- The vulnerability has been reported and discussed between a Security Engineer and a Developer. When the timeline of a possible fix is established, the Security Engineer informs a Release Manager of a need for the critical security release.
- A release manager proposes a timeline for the critical security release based on the other release tasks, and informs a security engineer and a Quality Engineer in the designated release issue.
- Depending on the nature of the issue, a security engineer may decide that a temporary mitigation strategy is required. If a patch is required, the security engineer works with the developer and infrastructure engineer following the post-deployment patch process. In other cases, the security engineer will work with infrastructure engineers on remediation.
- The security engineer creates a security operations issue
using the template
user_impact_investigation
for the security operations team to track further investigations and other post-remediation activities, such as determining and notifying affected users. - A security engineer works on a blog post to pre-announce the critical security release. They also work with the marketing team to inform the customers of an upcoming release. They also follow the JiHu Support Security Release Process. The security engineer also prepares the second blog post which will be published at release time.
- The developer follows the Developer process to create the artifacts necessary for a release.
- A release manager prepares the release with all backports, and deploys to staging (if applicable). If there are any non security releases pending, such as a release candidate, release managers may decide to release those first.
- If any post-deployment patches were applied, an on-call Security engineer should verify that the applied patches are still working; unless the newly deployed version removes the need for these patches.
- A quality engineer prepares environments and executes QA tasks together with the security engineer to verify that all released versions have successfully resolved the vulnerability.
- When all environments contain the fix, any temporary mitigation strategy is reverted.
- Following deployment, a release manager coordinates with a security engineer on the exact timing of a release.
- A release manager will promote the packages at the designated time, and merge the release blog post.
- A security engineer works with the marketing team to send notification emails to any affected users.
- A release manager closes all release issues.
- A security engineer keeps the issues where the vulnerabilities were reported open for the next 30 days.
- A security engineer prepares a blog post that explains the vulnerability in detail and releases it approximately 30 days after the original release.
- Once the final blog post is released, a security engineer removes the confidentiality from the issues and closes them.
Each involved role should follow their own guide, and create separate issues linking to the main release issue.