Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 1 | # Severity Guidelines for Security Issues |
| 2 | |
| 3 | [TOC] |
| 4 | |
| 5 | Vendors shipping products based on Chromium might wish to rate the severity of |
| 6 | security issues in the products they release. This document contains guidelines |
| 7 | for how to rate these issues. Check out our |
| 8 | [security release management page](https://www.chromium.org/Home/chromium-security/security-release-management) |
| 9 | for guidance on how to release fixes based on severity. |
| 10 | |
Amy Ressler | 4e00f88 | 2022-02-24 18:03:41 | [diff] [blame] | 11 | Any significant mitigating factors will generally reduce an issue's severity by one or |
| 12 | more levels: |
| 13 | * Not web accessible, reliant solely on direct UI interaction to trigger. |
| 14 | * Unusual or unlikely user interaction will normally reduce severity by one |
| 15 | level. This means interaction which may sometimes occur, but would not be |
| 16 | typical of an average user engaging with Chrome or a particular feature in |
| 17 | Chrome, nor could a user be easily convinced to perform by a persuasive web page. |
| 18 | * Requiring profile destruction or browser shutdown will normally reduce |
| 19 | severity by one level. |
Adrian Taylor | 850e6c0 | 2023-05-15 09:56:25 | [diff] [blame] | 20 | * [MiraclePtr protection](#TOC-MiraclePtr) |
Amy Ressler | 4e00f88 | 2022-02-24 18:03:41 | [diff] [blame] | 21 | |
| 22 | Bugs that require implausible interaction, interactions a user would not |
| 23 | realistically be convinced to perform, will generally be downgraded to a |
| 24 | functional bug and not considered a security bug. |
Adrian Taylor | 44dbdc8 | 2020-01-07 01:49:19 | [diff] [blame] | 25 | |
| 26 | Conversely, we do not consider it a mitigating factor if a vulnerability applies |
| 27 | only to a particular group of users. For instance, a Critical vulnerability is |
| 28 | still considered Critical even if it applies only to Linux or to those users |
| 29 | running with accessibility features enabled. |
| 30 | |
| 31 | Also note that most crashes do not indicate vulnerabilities. Chromium is designed |
| 32 | to crash in a controlled manner (e.g., with a ```__debugBreak```) when memory is |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 33 | exhausted or in other exceptional circumstances. |
| 34 | |
| 35 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 36 | ## Critical severity (S0) {#TOC-Critical-severity} |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 37 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 38 | Critical severity (S0) issues allow an attacker to read or write arbitrary |
| 39 | resources (including but not limited to the file system, registry, network, |
| 40 | etc.) on the underlying platform, with the user's full privileges. |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 41 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 42 | They are normally assigned Priority **P0** and assigned to the current stable |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 43 | milestone (or earliest milestone affected). For critical severity bugs, |
| 44 | [SheriffBot](https://www.chromium.org/issue-tracking/autotriage) will |
| 45 | automatically assign the milestone. |
| 46 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 47 | **For critical severity (S0) vulnerabilities, we aim to deploy the patch to all |
Chris Palmer | 91bab48 | 2019-07-17 00:05:36 | [diff] [blame] | 48 | Chrome users in under 30 days.** |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 49 | |
| 50 | Critical vulnerability details may be made public in 60 days, |
| 51 | in accordance with Google's general [vulnerability disclosure recommendations](https://security.googleblog.com/2010/07/rebooting-responsible-disclosure-focus.html), |
| 52 | or [faster (7 days)](https://security.googleblog.com/2013/05/disclosure-timeline-for-vulnerabilities.html) |
| 53 | if there is evidence of active exploitation. |
| 54 | |
| 55 | Example bugs: |
| 56 | |
Daniel Cheng | 62a44a8 | 2019-09-09 22:15:36 | [diff] [blame] | 57 | * Memory corruption in the browser process ([319125](https://crbug.com/319125#c10)). |
Adrian Taylor | 9dd42e296 | 2024-06-05 17:53:06 | [diff] [blame] | 58 | * Memory corruption in an unsandboxed GPU process when it is reachable directly from web |
Chris Bookholt | 5f45d02b | 2023-11-27 17:10:36 | [diff] [blame] | 59 | content without compromising the renderer. |
Adrian Taylor | 9dd42e296 | 2024-06-05 17:53:06 | [diff] [blame] | 60 | ([1420130](https://crbug.com/1420130), [1427865](https://crbug.com/1427865)). |
Alex Gough | dbb74e4 | 2024-07-31 23:31:46 | [diff] [blame] | 61 | ([on some platforms we consider the GPU process 'sandboxed'](../../docs/security/process-sandboxes-by-platform.md)). |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 62 | * Exploit chains made up of multiple bugs that can lead to code execution |
Chris Palmer | 5c33077 | 2019-05-24 23:32:43 | [diff] [blame] | 63 | outside of the sandbox ([416449](https://crbug.com/416449)). |
| 64 | * A bug that enables web content to read local files |
| 65 | ([962500](https://crbug.com/962500)). |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 66 | |
| 67 | Note that the individual bugs that make up the chain will have lower severity |
| 68 | ratings. |
| 69 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 70 | ## High severity (S1) {#TOC-High-severity} |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 71 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 72 | High severity (S1) vulnerabilities allow an attacker to execute code in the context |
Lukasz Anforowicz | cb7b514 | 2019-07-19 23:40:16 | [diff] [blame] | 73 | of, or otherwise impersonate other origins or read cross-origin data. |
| 74 | Bugs which would normally be |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 75 | critical severity with unusual mitigating factors may be rated as high severity. |
| 76 | For example, renderer sandbox escapes fall into this category as their impact is |
| 77 | that of a critical severity bug, but they require the precondition of a |
Adrian Taylor | 6f37ff3 | 2020-05-01 00:40:14 | [diff] [blame] | 78 | compromised renderer. (Bugs which involve using [MojoJS](../../mojo/public/js/README.md) |
| 79 | to trigger an exploitable browser process crash usually fall into this category). |
Amy Ressler | 4e00f88 | 2022-02-24 18:03:41 | [diff] [blame] | 80 | Another example are bugs that result in memory corruption in the browser |
| 81 | process, which would normally be critical severity, but require browser shutdown |
| 82 | or profile destruction, which would lower these issues to high severity. A |
| 83 | bug with the precondition of browser shutdown or profile destruction should be |
| 84 | considered to have a maximum severity of high and could potentially be |
| 85 | reduced by other mitigating factors. |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 86 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 87 | They are normally assigned Priority **P1** and assigned to the current stable |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 88 | milestone (or earliest milestone affected). For high severity bugs, |
| 89 | [SheriffBot](https://www.chromium.org/issue-tracking/autotriage) will |
| 90 | automatically assign the milestone. |
| 91 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 92 | **For high severity (S1) vulnerabilities, we aim to deploy the patch to all |
| 93 | Chrome users in under 60 days.** |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 94 | |
| 95 | Example bugs: |
| 96 | |
| 97 | * A bug that allows full circumvention of the same origin policy. Universal XSS |
| 98 | bugs fall into this category, as they allow script execution in the context of |
| 99 | an arbitrary origin ([534923](https://crbug.com/534923)). |
| 100 | * A bug that allows arbitrary code execution within the confines of the sandbox, |
Chris Bookholt | 5f45d02b | 2023-11-27 17:10:36 | [diff] [blame] | 101 | such as memory corruption in the renderer process |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 102 | ([570427](https://crbug.com/570427), [468936](https://crbug.com/468936)). |
| 103 | * Complete control over the apparent origin in the omnibox |
| 104 | ([76666](https://crbug.com/76666)). |
Adrian Taylor | 9dd42e296 | 2024-06-05 17:53:06 | [diff] [blame] | 105 | * Memory corruption in the browser or another high privileged process (e.g. a |
Alex Gough | dbb74e4 | 2024-07-31 23:31:46 | [diff] [blame] | 106 | GPU or network process on a [platform where they're not sandboxed](../../docs/security/process-sandboxes-by-platform.md)), |
Adrian Taylor | 9dd42e296 | 2024-06-05 17:53:06 | [diff] [blame] | 107 | that can only be triggered from a compromised renderer, |
Chris Bookholt | 5f45d02b | 2023-11-27 17:10:36 | [diff] [blame] | 108 | leading to a sandbox escape ([1393177](https://crbug.com/1393177), |
| 109 | [1421268](crbug.com/1421268)). |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 110 | * Kernel memory corruption that could be used as a sandbox escape from a |
| 111 | compromised renderer ([377392](https://crbug.com/377392)). |
Adrian Taylor | 9dd42e296 | 2024-06-05 17:53:06 | [diff] [blame] | 112 | * Memory corruption in the browser or another high privileged process (e.g. |
Alex Gough | dbb74e4 | 2024-07-31 23:31:46 | [diff] [blame] | 113 | GPU or network process on a [platform where they're not sandboxed](../../docs/security/process-sandboxes-by-platform.md)) |
| 114 | that requires specific user interaction, such as granting a permission ([455735](https://crbug.com/455735)). |
Lukasz Anforowicz | 33b1435 | 2019-09-20 21:57:58 | [diff] [blame] | 115 | * Site Isolation bypasses: |
| 116 | - Cross-site execution contexts unexpectedly sharing a renderer process |
| 117 | ([863069](https://crbug.com/863069), [886976](https://crbug.com/886976)). |
| 118 | - Cross-site data disclosure |
| 119 | ([917668](https://crbug.com/917668), [927849](https://crbug.com/927849)). |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 120 | |
| 121 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 122 | ## Medium severity (S2) {#TOC-Medium-severity} |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 123 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 124 | Medium severity (S2) bugs allow attackers to read or modify limited amounts of |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 125 | information, or are not harmful on their own but potentially harmful when |
| 126 | combined with other bugs. This includes information leaks that could be useful |
| 127 | in potential memory corruption exploits, or exposure of sensitive user |
Chris Palmer | 91bab48 | 2019-07-17 00:05:36 | [diff] [blame] | 128 | information that an attacker can exfiltrate. Bugs that would normally be rated |
| 129 | at a higher severity level with unusual mitigating factors may be rated as |
| 130 | medium severity. |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 131 | |
Liza Burakova | f192e99 | 2025-04-08 20:15:26 | [diff] [blame] | 132 | Certain vulnerabilities in [sandboxed GPU shader compilers](#TOC-Sandboxed-shader-compilers) |
| 133 | should be marked as medium severity. |
| 134 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 135 | They are normally assigned Priority **P1** and assigned to the current stable |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 136 | milestone (or earliest milestone affected). If the fix seems too complicated to |
| 137 | merge to the current stable milestone, they may be assigned to the next stable |
| 138 | milestone. |
| 139 | |
| 140 | Example bugs: |
| 141 | |
| 142 | * An out-of-bounds read in a renderer process |
| 143 | ([281480](https://crbug.com/281480)). |
| 144 | * An uninitialized memory read in the browser process where the values are |
| 145 | passed to a compromised renderer via IPC ([469151](https://crbug.com/469151)). |
| 146 | * Memory corruption that requires a specific extension to be installed |
| 147 | ([313743](https://crbug.com/313743)). |
Amy Ressler | 4e00f88 | 2022-02-24 18:03:41 | [diff] [blame] | 148 | * Memory corruption in the browser process, triggered by a browser shutdown that |
| 149 | is not reliably triggered and/or is difficult to trigger ([1230513](https://crbug.com/1230513)). |
| 150 | * Memory corruption in the browser process, requiring a non-standard flag and |
| 151 | user interaction ([1255332](https://crbug.com/1255332)). |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 152 | * An HSTS bypass ([461481](https://crbug.com/461481)). |
| 153 | * A bypass of the same origin policy for pages that meet several preconditions |
| 154 | ([419383](https://crbug.com/419383)). |
| 155 | * A bug that allows web content to tamper with trusted browser UI |
| 156 | ([550047](https://crbug.com/550047)). |
| 157 | * A bug that reduces the effectiveness of the sandbox |
| 158 | ([338538](https://crbug.com/338538)). |
| 159 | * A bug that allows arbitrary pages to bypass security interstitials |
| 160 | ([540949](https://crbug.com/540949)). |
| 161 | * A bug that allows an attacker to reliably read or infer browsing history |
| 162 | ([381808](https://crbug.com/381808)). |
| 163 | * An address bar spoof where only certain URLs can be displayed, or with other |
| 164 | mitigating factors ([265221](https://crbug.com/265221)). |
| 165 | * Memory corruption in a renderer process that requires specific user |
| 166 | interaction, such as dragging an object ([303772](https://crbug.com/303772)). |
| 167 | |
| 168 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 169 | ## Low severity (S3) {#TOC-Low-severity} |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 170 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 171 | Low severity (S3) vulnerabilities are usually bugs that would normally be a |
| 172 | higher severity, but which have extreme mitigating factors or highly limited |
| 173 | scope. |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 174 | |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 175 | They are normally assigned Priority **P2**. Milestones can be assigned to low |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 176 | severity bugs on a case-by-case basis, but they are not normally merged to |
| 177 | stable or beta branches. |
| 178 | |
| 179 | Example bugs: |
| 180 | |
| 181 | * Bypass requirement for a user gesture ([256057](https://crbug.com/256057)). |
| 182 | * Partial CSP bypass ([534570](https://crbug.com/534570)). |
| 183 | * A limited extension permission bypass ([169632](https://crbug.com/169632)). |
| 184 | * An uncontrolled single-byte out-of-bounds read |
| 185 | ([128163](https://crbug.com/128163)). |
| 186 | |
Amy Ressler | 15e63681 | 2023-11-28 21:21:55 | [diff] [blame] | 187 | ## Priority for in the wild vulnerabilities {#TOC-itw-pri} |
| 188 | |
| 189 | If there is evidence of a weaponized exploit or active exploitation in the wild, |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 190 | the vulnerability is considered a P0 priority - regardless of the severity |
| 191 | rating -with a SLO of 7 days or faster. Our goal is to release a fix in a |
| 192 | Stable channel update of Chrome as soon as possible. |
Adrian Taylor | b3f7312 | 2020-04-30 00:56:14 | [diff] [blame] | 193 | |
Adrian Taylor | 364e9fd | 2020-11-04 22:41:11 | [diff] [blame] | 194 | ## Can't impact Chrome users by default {#TOC-No-impact} |
| 195 | |
| 196 | If the bug can't impact Chrome users by default, this is denoted instead by |
Amy Ressler | aa1ed33b | 2024-02-02 17:51:36 | [diff] [blame] | 197 | the **Security-Impact_None** hotlist (hotlistID: 5433277). See |
Adrian Taylor | 364e9fd | 2020-11-04 22:41:11 | [diff] [blame] | 198 | [the security labels document](security-labels.md#TOC-Security_Impact-None) |
| 199 | for more information. The bug should still have a severity set according |
| 200 | to these guidelines. |
| 201 | |
| 202 | |
Adrian Taylor | b3f7312 | 2020-04-30 00:56:14 | [diff] [blame] | 203 | ## Not a security bug {#TOC-Not-a-security-bug} |
| 204 | |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 205 | The [security FAQ](faq.md) covers many of the cases that we do not consider to |
Adrian Taylor | b3f7312 | 2020-04-30 00:56:14 | [diff] [blame] | 206 | be security bugs, such as [denial of service](faq.md#TOC-Are-denial-of-service-issues-considered-security-bugs-) |
| 207 | and, in particular, null pointer dereferences with consistent fixed offsets. |
Adrian Taylor | b1691a8 | 2022-08-23 18:54:37 | [diff] [blame] | 208 | |
| 209 | |
Adrian Taylor | 850e6c0 | 2023-05-15 09:56:25 | [diff] [blame] | 210 | ## "MiraclePtr" protection against use-after-free {#TOC-MiraclePtr} |
Adrian Taylor | b1691a8 | 2022-08-23 18:54:37 | [diff] [blame] | 211 | |
| 212 | ["MiraclePtr"](../../base/memory/raw_ptr.md) is a technology designed to |
| 213 | deterministically prevent exploitation of use-after-free bugs. Address |
| 214 | sanitizer is aware of MiraclePtr and will report on whether a given |
| 215 | use-after-free bug is protected or not: |
| 216 | |
| 217 | ``` |
| 218 | MiraclePtr Status: NOT PROTECTED |
| 219 | No raw_ptr<T> access to this region was detected prior to the crash. |
| 220 | ``` |
| 221 | |
| 222 | or |
| 223 | |
| 224 | ``` |
| 225 | MiraclePtr Status: PROTECTED |
| 226 | The crash occurred while a raw_ptr<T> object containing a dangling pointer was being dereferenced. |
| 227 | MiraclePtr should make this crash non-exploitable in regular builds. |
| 228 | ``` |
| 229 | |
Amy Ressler | 8bdc2b8 | 2024-07-29 16:45:08 | [diff] [blame] | 230 | MiraclePtr is now active on all Chrome platforms in non-renderer processes as |
| 231 | of 118 and on Fuchsia as of 128. Severity assessments are made with |
| 232 | consideration of all active release channels (Dev, Beta, Stable, and Extended Stable); |
Amy Ressler | 304b2dd3 | 2023-10-26 17:30:40 | [diff] [blame] | 233 | BRP is now enabled in all active release channels. |
Adrian Taylor | 850e6c0 | 2023-05-15 09:56:25 | [diff] [blame] | 234 | |
Amy Ressler | 8bdc2b8 | 2024-07-29 16:45:08 | [diff] [blame] | 235 | As of 128, if a bug is marked `MiraclePtr Status:PROTECTED`, it is not |
| 236 | considered a security issue. It should be converted to type:Bug and assigned to |
| 237 | the appropriate engineering team as functional issue. |
Liza Burakova | f192e99 | 2025-04-08 20:15:26 | [diff] [blame] | 238 | |
| 239 | ## Sandboxed GPU Shader Compilers {#TOC-Sandboxed-shader-compilers} |
| 240 | |
| 241 | If a GPU shader compiler is in a separate process outside the GPU process and sandboxed, the |
| 242 | overall attack surface of a vulnerability in that specific compiler may be much lower than an |
| 243 | in-GPU-process shader compiler. Unlike the renderer process, which can make hundreds of different |
| 244 | IPCs to the browser process, a well sandboxed shader compiler process can make a very limited number |
| 245 | of IPCs back to the GPU process. Furthermore, code execution in a sandboxed GPU shader compiler |
| 246 | is now limited to writing arbitrary shaders, which is a much lower threat surface than code execution |
| 247 | in the GPU process as a whole. |
| 248 | |
| 249 | Currently, only the Metal shader compiler is in its own sandboxed process, so vulnerabilities that would |
| 250 | otherwise be high severity should be considered medium severity if they are specific to that compiler. |
| 251 | |
| 252 | Vulnerabilities specific to the Metal shader compiler will typically call into the `MTLCompiler` in |
| 253 | the stack trace, and a PoC will only be reproducible on MacOS devices. An example of a stack trace |
| 254 | specific to the metal shader compiler can be found at ([40074630](https://crbug.com/40074630)). |