Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 1 | # Chrome Security FAQ |
| 2 | |
| 3 | [TOC] |
| 4 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 5 | ## Process |
| 6 | |
| 7 | <a name="TOC-Which-bugs-are-valid-for-rewards-under-the-Chrome-Vulnerability-Rewards-program-"></a> |
| 8 | ### Which bugs are valid for rewards under the Chrome Vulnerability Rewards program? |
| 9 | |
| 10 | Please see [the VRP FAQ page](vrp-faq.md). |
| 11 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 12 | <a name="TOC-Why-are-security-bugs-hidden-in-the-Chromium-issue-tracker-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 13 | ### Why are security bugs hidden in the Chromium issue tracker? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 14 | |
| 15 | We must balance a commitment to openness with a commitment to avoiding |
| 16 | unnecessary risk for users of widely-used open source libraries. |
| 17 | |
| 18 | <a name="TOC-Can-you-please-un-hide-old-security-bugs-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 19 | ### Can you please un-hide old security bugs? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 20 | |
| 21 | Our goal is to open security bugs to the public once the bug is fixed and the |
| 22 | fix has been shipped to a majority of users. However, many vulnerabilities |
| 23 | affect products besides Chromium, and we don’t want to put users of those |
| 24 | products unnecessarily at risk by opening the bug before fixes for the other |
| 25 | affected products have shipped. |
| 26 | |
| 27 | Therefore, we make all security bugs public within approximately 14 weeks of the |
| 28 | fix landing in the Chromium repository. The exception to this is in the event of |
| 29 | the bug reporter or some other responsible party explicitly requesting anonymity |
| 30 | or protection against disclosing other particularly sensitive data included in |
| 31 | the vulnerability report (e.g. username and password pairs). |
| 32 | |
| 33 | <a name="TOC-Can-I-get-advance-notice-about-security-bugs-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 34 | ### Can I get advance notice about security bugs? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 35 | |
| 36 | Vendors of products based on Chromium, distributors of operating systems that |
| 37 | bundle Chromium, and individuals and organizations that significantly contribute |
| 38 | to fixing security bugs can be added to a list for earlier access to these bugs. |
| 39 | You can email us at [email protected] to request to join the list if you |
| 40 | meet the above criteria. In particular, vendors of anti-malware, IDS/IPS, |
| 41 | vulnerability risk assessment, and similar products or services do not meet this |
| 42 | bar. |
| 43 | |
| 44 | Please note that the safest version of Chrome/Chromium is always the latest |
| 45 | stable version — there is no good reason to wait to upgrade, so enterprise |
| 46 | deployments should always track the latest stable release. When you do this, |
| 47 | there is no need to further assess the risk of Chromium vulnerabilities: we |
| 48 | strive to fix vulnerabilities quickly and release often. |
| 49 | |
Alex Gough | ccfbbb5 | 2023-05-16 14:42:19 | [diff] [blame] | 50 | <a name="TOC-How-can-I-know-which-fixes-to-include-in-my-downstream-project-"></a> |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 51 | ### How can I know which fixes to include in my downstream project? |
| 52 | |
| 53 | Chrome is built with mitigations and hardening which aim to prevent or reduce |
| 54 | the impact of security issues. We classify bugs as security issues if they are |
| 55 | known to affect a version and configuration of Chrome that we ship to the |
| 56 | public. Some classes of bug might present as security issues if Chrome was |
| 57 | compiled with different flags, or linked against a different C++ standard |
| 58 | library, but do not with the toolchain and configuration that we use to build |
| 59 | Chrome. We discuss some of these cases elsewhere in this FAQ. |
| 60 | |
Amy Ressler | b35f8e5d | 2024-02-02 23:12:54 | [diff] [blame] | 61 | If we become aware of them, these issues may be triaged as `Type=Vulnerability, |
| 62 | Security_Impact-None` or as `Type=Bug` because they do not affect the production |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 63 | version of Chrome. They may or may not be immediately visible to the public in |
| 64 | the bug tracker, and may or may not be identified as security issues. If fixes |
| 65 | are landed, they may or may not be merged from HEAD to a release branch. Chrome |
| 66 | will only label, fix and merge security issues in Chrome, but attackers can |
| 67 | still analyze public issues, or commits in the Chromium project to identify bugs |
| 68 | that might be exploitable in other contexts. |
| 69 | |
| 70 | Chromium embedders and other downstream projects may build with different |
| 71 | compilers, compile options, target operating systems, standard library, or |
| 72 | additional software components. It is possible that some issues Chrome |
| 73 | classifies as functional issues will manifest as security issues in a product |
| 74 | embedding Chromium - it is the responsibility of any such project to understand |
| 75 | what code they are shipping, and how it is compiled. We recommend using Chrome's |
| 76 | [configuration](https://source.chromium.org/chromium/chromium/src/+/main:build/config/) |
| 77 | whenever possible. |
| 78 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 79 | <a name="TOC-Can-I-see-these-security-bugs-so-that-I-can-back-port-the-fixes-to-my-downstream-project-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 80 | ### Can I see these security bugs so that I can back-port the fixes to my downstream project? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 81 | |
| 82 | Many developers of other projects use V8, Chromium, and sub-components of |
| 83 | Chromium in their own projects. This is great! We are glad that Chromium and V8 |
| 84 | suit your needs. |
| 85 | |
| 86 | We want to open up fixed security bugs (as described in the previous answer), |
| 87 | and will generally give downstream developers access sooner. **However, please |
| 88 | be aware that backporting security patches from recent versions to old versions |
| 89 | cannot always work.** (There are several reasons for this: The patch won't apply |
| 90 | to old versions; the solution was to add or remove a feature or change an API; |
| 91 | the issue may seem minor until it's too late; and so on.) We believe the latest |
| 92 | stable versions of Chromium and V8 are the most stable and secure. We also |
| 93 | believe that tracking the latest stable upstream is usually less work for |
| 94 | greater benefit in the long run than backporting. We strongly recommend that you |
| 95 | track the latest stable branches, and we support only the latest stable branch. |
| 96 | |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 97 | <a name="TOC-Severity-Guidelines"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 98 | ### How does the Chrome team determine severity of security bugs? |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 99 | |
| 100 | See the [severity guidelines](severity-guidelines.md) for more information. |
Tom Sepez | e8fb3320 | 2018-11-01 19:31:32 | [diff] [blame] | 101 | Only security issues are considered under the security vulnerability rewards |
| 102 | program. Other types of bugs, which we call "functional bugs", are not. |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 103 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 104 | ## Threat Model |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 105 | |
Eric Lawrence | 15fdea25 | 2017-08-09 19:37:41 | [diff] [blame] | 106 | <a name="TOC-Timing-Attacks"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 107 | ### Are timing attacks considered security vulnerabilities? |
Eric Lawrence | 15fdea25 | 2017-08-09 19:37:41 | [diff] [blame] | 108 | |
| 109 | Some timing attacks are considered security vulnerabilities, and some are |
| 110 | considered privacy vulnerabilities. Timing attacks vary significantly in terms |
| 111 | of impact, reliability, and exploitability. |
| 112 | |
| 113 | Some timing attacks weaken mitigations like ASLR (e.g. |
| 114 | [Issue 665930](https://crbug.com/665930)). Others attempt to circumvent the same |
| 115 | origin policy, for instance, by using SVG filters to read pixels |
| 116 | cross-origin (e.g. [Issue 686253](https://crbug.com/686253) and |
| 117 | [Issue 615851](https://crbug.com/615851)). |
| 118 | |
| 119 | Many timing attacks rely upon the availability of high-resolution timing |
| 120 | information [Issue 508166](https://crbug.com/508166); such timing data often has |
| 121 | legitimate usefulness in non-attack scenarios making it unappealing to remove. |
| 122 | |
| 123 | Timing attacks against the browser's HTTP Cache (like |
| 124 | [Issue 74987](https://crbug.com/74987)) can potentially leak information about |
| 125 | which sites the user has previously loaded. The browser could attempt to protect |
| 126 | against such attacks (e.g. by bypassing the cache) at the cost of performance |
| 127 | and thus user-experience. To mitigate against such timing attacks, end-users can |
| 128 | delete browsing history and/or browse sensitive sites using Chrome's Incognito |
| 129 | or Guest browsing modes. |
| 130 | |
| 131 | Other timing attacks can be mitigated via clever design changes. For instance, |
| 132 | [Issue 544765](https://crbug.com/544765) describes an attack whereby an attacker |
| 133 | can probe for the presence of HSTS rules (set by prior site visits) by timing |
Eric Lawrence | 29ca272 | 2018-02-22 19:04:05 | [diff] [blame] | 134 | the load of resources with URLs "fixed-up" by HSTS. Prior to Chrome 64, HSTS |
| 135 | rules [were shared](https://crbug.com/774643) between regular browsing and |
| 136 | Incognito mode, making the attack more interesting. The attack was mitigated by |
| 137 | changing Content-Security-Policy such that secure URLs will match rules |
| 138 | demanding non-secure HTTP urls, a fix that has also proven useful to help to |
| 139 | unblock migrations to HTTPS. Similarly, [Issue 707071](https://crbug.com/707071) |
| 140 | describes a timing attack in which an attacker could determine what Android |
| 141 | applications are installed; the attack was mitigated by introducing randomness |
| 142 | in the execution time of the affected API. |
Eric Lawrence | 15fdea25 | 2017-08-09 19:37:41 | [diff] [blame] | 143 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 144 | <a name="TOC-What-if-a-Chrome-component-breaks-an-OS-security-boundary-"></a> |
| 145 | ### What if a Chrome component breaks an OS security boundary? |
| 146 | |
| 147 | If Chrome or any of its components (e.g. updater) can be abused to |
| 148 | perform a local privilege escalation, then it may be treated as a |
| 149 | valid security vulnerability. |
| 150 | |
| 151 | Running any Chrome component with higher privileges than intended is |
| 152 | not a security bug and we do not recommend running Chrome as an |
| 153 | Administrator on Windows, or as root on POSIX. |
| 154 | |
| 155 | <a name="TOC-Why-isn-t-passive-browser-fingerprinting-including-passive-cookies-in-Chrome-s-threat-model-"></a> |
| 156 | <a name="TOC-What-is-Chrome-s-threat-model-for-fingerprinting-"></a> |
| 157 | ### What is Chrome's threat model for fingerprinting? |
| 158 | |
| 159 | > **Update, August 2019:** Please note that this answer has changed. We have |
| 160 | > updated our threat model to include fingerprinting. |
| 161 | |
| 162 | Although [we do not consider fingerprinting issues to be *security |
| 163 | vulnerabilities*](#TOC-Are-privacy-issues-considered-security-bugs-), we do now |
| 164 | consider them to be privacy bugs that we will try to resolve. We distinguish two |
| 165 | forms of fingerprinting. |
| 166 | |
| 167 | * **Passive fingerprinting** refers to fingerprinting techniques that do not |
| 168 | require a JavaScript API call to achieve. This includes (but is not limited to) |
| 169 | mechanisms like [ETag |
| 170 | cookies](https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags) and [HSTS |
| 171 | cookies](https://security.stackexchange.com/questions/79518/what-are-hsts-super-cookies). |
| 172 | * **Active fingerprinting** refers to fingerprinting techniques that do require |
| 173 | a JavaScript API call to achieve. Examples include most of the techniques in |
| 174 | [EFF's Panopticlick proof of concept](https://panopticlick.eff.org). |
| 175 | |
| 176 | For passive fingerprinting, our ultimate goal is (to the extent possible) to |
| 177 | reduce the information content available to below the threshold for usefulness. |
| 178 | |
| 179 | For active fingerprinting, our ultimate goal is to establish a [privacy |
| 180 | budget](https://github.com/bslassey/privacy-budget) and to keep web origins |
| 181 | below the budget (such as by rejecting some API calls when the origin exceeds |
| 182 | its budget). To avoid breaking rich web applications that people want to use, |
| 183 | Chrome may increase an origin's budget when it detects that a person is using |
| 184 | the origin heavily. As with passive fingerprinting, our goal is to set the |
| 185 | default budget below the threshold of usefulness for fingerprinting. |
| 186 | |
| 187 | These are both long-term goals. As of this writing (August 2019) we do not |
| 188 | expect that Chrome will immediately achieve them. |
| 189 | |
| 190 | For background on fingerprinting and the difficulty of stopping it, see [Arvind |
| 191 | Narayanan's site](https://33bits.wordpress.com/about/) and [Peter Eckersley's |
| 192 | discussion of the information theory behind |
| 193 | Panopticlick](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy). |
| 194 | There is also [a pretty good analysis of in-browser fingerprinting |
| 195 | vectors](https://dev.chromium.org/Home/chromium-security/client-identification-mechanisms). |
| 196 | |
| 197 | <a name="TOC-I-found-a-phishing-or-malware-site-not-blocked-by-Safe-Browsing.-Is-this-a-security-vulnerability-"></a> |
| 198 | ### I found a phishing or malware site not blocked by Safe Browsing. Is this a security vulnerability? |
| 199 | |
| 200 | Malicious sites not yet blocked by Safe Browsing can be reported via |
| 201 | [https://www.google.com/safebrowsing/report_phish/](https://www.google.com/safebrowsing/report_phish/). |
| 202 | Safe Browsing is primarily a blocklist of known-unsafe sites; the feature warns |
| 203 | the user if they attempt to navigate to a site known to deliver phishing or |
| 204 | malware content. You can learn more about this feature in these references: |
| 205 | |
| 206 | * [https://developers.google.com/safe-browsing/](https://developers.google.com/safe-browsing/) |
| 207 | * [https://www.google.com/transparencyreport/safebrowsing/](https://www.google.com/transparencyreport/safebrowsing/) |
| 208 | |
| 209 | In general, it is not considered a security bug if a given malicious site is not |
| 210 | blocked by the Safe Browsing feature, unless the site is on the blocklist but is |
| 211 | allowed to load anyway. For instance, if a site found a way to navigate through |
| 212 | the blocking red warning page without user interaction, that would be a security |
| 213 | bug. A malicious site may exploit a security vulnerability (for instance, |
| 214 | spoofing the URL in the **Location Bar**). This would be tracked as a security |
| 215 | vulnerability in the relevant feature, not Safe Browsing itself. |
| 216 | |
| 217 | <a name="TOC-I-can-download-a-file-with-an-unsafe-extension-and-it-is-not-classified-as-dangerous-"></a> |
| 218 | ### I can download a file with an unsafe extension and it is not classified as dangerous - is this a security bug? |
| 219 | |
| 220 | Chrome tries to warn users before they open files that might modify their |
| 221 | system. What counts as a dangerous file will vary depending on the operating |
| 222 | system Chrome is running on, the default set of file handlers, Chrome settings, |
| 223 | Enterprise policy and verdicts on both the site and the file from [Safe |
| 224 | Browsing](https://code.google.com/apis/safebrowsing/). Because of this it will |
| 225 | often be okay for a user to download and run a file. However, if you can clearly |
| 226 | demonstrate how to bypass one of these protections then we’d like to hear about |
| 227 | it. You can see if a Safe Browsing check happened by opening |
| 228 | chrome://safe-browsing before starting the download. |
| 229 | |
Daniel Rubery | c7ac34423 | 2023-10-09 22:16:20 | [diff] [blame] | 230 | <a name="TOC-what-about-dangerous-file-types-not-listed-in-the-file-type-policy-"></a> |
| 231 | ### What about dangerous file types not listed in the file type policy? |
| 232 | |
| 233 | The [file type |
| 234 | policy](https://source.chromium.org/chromium/chromium/src/+/main:components/safe_browsing/content/resources/download_file_types.asciipb?q=download_file_types.asciipb%20-f:%2Fgen%2F&ss=chromium) |
| 235 | controls some details of which security checks to enable for a given file |
| 236 | extension. Most importantly, it controls whether we contact Safe Browsing about |
| 237 | a download, and whether we show a warning for all downloads of that file type. |
| 238 | Starting in M74, the default for unknown file types has been to contact Safe |
| 239 | Browsing. This prevents large-scale abuse from a previously unknown file type. |
| 240 | Starting in M105, showing a warning for all downloads of an extension became |
| 241 | reserved for exceptionally dangerous file types that can compromise a user |
| 242 | without any user interaction with the file (e.g. DLL hijacking). If you discover |
| 243 | a new file type that meets that condition, we’d like to hear about it. |
| 244 | |
Daseul Lee | d2b0253 | 2024-01-09 15:22:10 | [diff] [blame] | 245 | <a name="TOC-i-found-a-local-file-or-directory-that-may-be-security-sensitive-and-is-not-blocked-by-file-system-access-api-"></a> |
| 246 | ### I found a local file or directory that may be security-sensitive and is not blocked by File System Access API - is this a security bug? |
| 247 | |
| 248 | The File System Access API maintains a [blocklist](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc;l=266-346) |
| 249 | of directories and files that may be sensitive such as systems file, and if user |
| 250 | chooses a file or a directory matching the list on a site using File System |
| 251 | Access API, the access is blocked. |
| 252 | |
| 253 | The blocklist is designed to help mitigate accidental granting by users by |
| 254 | listing well-known, security-sensitive locations, as a defense in-depth |
| 255 | strategy. Therefore, the blocklist coverage is not deemed as a security bug, |
| 256 | especially as it requires user's explicit selection on a file or a directory |
| 257 | from the file picker. |
| 258 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 259 | <a name="TOC-I-can-download-a-file-with-an-unsafe-extension-but-a-different-extension-or-file-type-is-shown-to-the-user-"></a> |
| 260 | ### I can download a file with an unsafe extension but a different extension or file type is shown to the user - is this a security bug? |
| 261 | <a name="TOC-Extensions-for-downloaded-files-are-not-shown-in-a-file-dialog-"></a> |
| 262 | ### Extensions for downloaded files are not shown in a file dialog - is this a security bug? |
| 263 | <a name="TOC-The-wrong-description-for-a-file-type-is-added-by-Chrome-"></a> |
| 264 | ### The wrong description for a file type is added by Chrome - is this a security bug? |
| 265 | |
| 266 | Chrome tries to let users know what they will be saving and downloading before |
| 267 | they do so. Often operating systems will obscure a file’s type or extension and |
| 268 | there is little we can do about that. Chrome shows information to help users |
| 269 | make these decisions, both in Chrome-owned UI and in information that Chrome |
| 270 | passes to OS-owned UI. If this information can be manipulated from a web site to |
| 271 | mislead a user, then we’d like to hear about it. |
| 272 | [Example](https://crbug.com/1137247). |
| 273 | |
| 274 | <a name="TOC-I-can-download-a-file-and-OS-indicators-for-its-provenance-are-not-applied-"></a> |
| 275 | ### I can download a file and OS indicators for its provenance are not applied - is this a security bug? |
| 276 | |
| 277 | Chrome attempts to label files downloaded from the internet with metadata using |
| 278 | operating system APIs where these are available – for instance applying the Mark |
| 279 | of the Web on Windows. This is often not possible (for instance on non-NTFS file |
| 280 | systems on Windows, or for files inside downloaded archives) or disabled by |
| 281 | policy. If a web site can cause Chrome to download a file without Chrome then |
| 282 | adding this metadata as usual, we’d like to hear about it. |
| 283 | |
| 284 | <a name="TOC-I-can-cause-a-hard-or-soft-link-to-be-written-to-a-directory-bypassing-normal-OS-blocks-"></a> |
| 285 | ### I can cause a hard or soft link to be written to a directory bypassing normal OS blocks - is this a security bug? |
| 286 | |
| 287 | Chrome should not allow filesystem links to be created by initiating a download. |
| 288 | [Example](https://crbug.com/1140417). [Example](https://crbug.com/1137247#c12). |
| 289 | |
| 290 | <a name="TOC-I-can-hijack-a-user-gesture-and-trick-a-user-into-accepting-a-permission-or-downloading-a-file-"></a> |
| 291 | ### I can hijack a user gesture and trick a user into accepting a permission or downloading a file - is this a security bug? |
| 292 | |
| 293 | Chrome tries to design its prompts to select safe defaults. If a prompt can |
| 294 | accidentally be accepted without the user having an opportunity to make a |
| 295 | decision about the prompt then we’d like to know. Examples might include poor |
| 296 | defaults so that a user holding down an enter key might accept a dialog they |
| 297 | would want to dismiss. [Example](https://crbug.com/854455#c11). |
| 298 | |
| 299 | Note that a user navigating to a download will cause a file to be |
| 300 | [downloaded](https://crbug.com/1114592). |
| 301 | |
Arthur Sonzogni | b89b25f | 2024-02-13 16:11:22 | [diff] [blame] | 302 | <a name="TOC-security-properties-not-inherited-using-contextual-menu-"></a> |
| 303 | ### Sandbox/CSP/etc... security properties are not inherited when navigating using the middle-click/contextual-menu - is this a security bug? |
| 304 | |
| 305 | The security properties of the document providing the URL are not used/inherited |
| 306 | when the user deliberately opens a link in a popup using one of: |
| 307 | |
| 308 | - Ctrl + left-click (Open link in new tab) |
| 309 | - Shift + left-click (Open link in new window) |
| 310 | - Middle-click (Open a link in a new tab) |
| 311 | - Right-click > "Open link in ..." |
| 312 | |
| 313 | These methods of following a link have more or less the same implications as the |
| 314 | user copying the link's URL and pasting it into a newly-opened window. We treat |
| 315 | them as user-initiated top-level navigations, and as such will not apply or |
| 316 | inherit policy restrictions into the new context |
| 317 | |
| 318 | Example of security related properties: |
| 319 | |
| 320 | - Content-Security-Policy |
| 321 | - Cross-Origin-Embedder-Policy |
| 322 | - Cross-Origin-Opener-Policy |
| 323 | - Origin |
| 324 | - Referrer |
| 325 | - Sandbox |
| 326 | - etc... |
| 327 | |
| 328 | These browser's actions/shortcuts are specific to Chrome. They are different |
| 329 | from the behavior specified by the web-platform, such as using executing |
| 330 | `window.open()` or opening a link with the `target=_blank` attribute. |
| 331 | |
Adrian Taylor | fe24932e | 2024-05-15 15:59:56 | [diff] [blame] | 332 | <a name="TOC-What-is-the-threat-model-for-Chrome-for-Testing"</a> |
| 333 | ### What is the threat model for Chrome for Testing? |
| 334 | |
| 335 | [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing) is a |
| 336 | distribution of current and older versions of Chrome. It does not auto-update. |
| 337 | Therefore, it may lack recent fixes for security bugs. Security bugs can more |
| 338 | easily be exploited once their fixes are [published in the main Chromium source |
| 339 | code repository](updates.md) and so it is unsafe to use Chrome for Testing to |
| 340 | access any untrusted website. You should use Chrome for Testing only for |
| 341 | browser automation and testing purposes, consuming only trustworthy content. |
| 342 | `chrome-headless-shell` also lacks auto-updates and so, for the same reason, |
| 343 | should only be used to consume trusted content. |
| 344 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 345 | ## Areas outside Chrome's Threat Model |
| 346 | |
| 347 | <a name="TOC-Are-privacy-issues-considered-security-bugs-"></a> |
| 348 | ### Are privacy issues considered security bugs? |
| 349 | |
| 350 | No. The Chrome Privacy team treats privacy issues, such as leaking information |
| 351 | from Incognito, fingerprinting, and bugs related to deleting browsing data as |
| 352 | functional bugs. |
| 353 | |
| 354 | Privacy issues are not considered under the security vulnerability rewards |
| 355 | program; the [severity guidelines](severity-guidelines.md) outline the types of |
| 356 | bugs that are considered security vulnerabilities in more detail. |
| 357 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 358 | <a name="TOC-What-are-the-security-and-privacy-guarantees-of-Incognito-mode-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 359 | ### What are the security and privacy guarantees of Incognito mode? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 360 | |
| 361 | Bugs in Incognito mode are tracked as privacy bugs, not security bugs. |
| 362 | |
Chris Palmer | 9839ce4 | 2017-08-16 20:59:15 | [diff] [blame] | 363 | The [Help Center](https://support.google.com/chrome/?p=cpn_incognito) explains |
| 364 | what privacy protections Incognito mode attempts to enforce. In particular, |
| 365 | please note that Incognito is not a “do not track” mode, and it does not hide |
| 366 | aspects of your identity from web sites. Chrome does offer a way to send Do Not |
| 367 | Track request to servers; see chrome://settings/?search=do+not+track |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 368 | |
| 369 | When in Incognito mode, Chrome does not store any new history, cookies, or other |
| 370 | state in non-volatile storage. However, Incognito windows will be able to access |
| 371 | some previously-stored state, such as browsing history. |
| 372 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 373 | <a name="TOC-Are-XSS-filter-bypasses-considered-security-bugs-"></a> |
| 374 | ### Are XSS filter bypasses considered security bugs? |
| 375 | |
| 376 | No. Chromium once contained a reflected XSS filter called the [XSSAuditor](https://www.chromium.org/developers/design-documents/xss-auditor) |
| 377 | that was a best-effort second line of defense against reflected XSS flaws found |
| 378 | in web sites. The XSS Auditor was [removed in Chrome 78](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/TuYw-EZhO9g/blGViehIAwAJ). |
Tom Sepez | fd089b8f | 2023-08-09 17:31:44 | [diff] [blame] | 379 | Consequently, Chromium no longer takes any special action in response to an |
| 380 | X-XSS-Protection header. |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 381 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 382 | <a name="TOC-Are-denial-of-service-issues-considered-security-bugs-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 383 | ### Are denial of service issues considered security bugs? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 384 | |
Tom Sepez | e8fb3320 | 2018-11-01 19:31:32 | [diff] [blame] | 385 | No. Denial of Service (DoS) issues are treated as **abuse** or **stability** |
| 386 | issues rather than security vulnerabilities. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 387 | |
Lukasz Anforowicz | a2be8346 | 2024-02-15 20:49:12 | [diff] [blame] | 388 | * If you find a reproducible crash (e.g. a way to hit a `CHECK`), |
| 389 | we encourage you to [report it](https://issues.chromium.org/new). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 390 | * If you find a site that is abusing the user experience (e.g. preventing you |
| 391 | from leaving a site), we encourage you to [report |
Amy Ressler | b35f8e5d | 2024-02-02 23:12:54 | [diff] [blame] | 392 | it](https://issues.chromium.org/new). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 393 | |
| 394 | DoS issues are not considered under the security vulnerability rewards program; |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 395 | the [severity guidelines](severity-guidelines.md) outline the types of bugs that |
| 396 | are considered security vulnerabilities in more detail. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 397 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 398 | <a name="TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 399 | ### Why aren't physically-local attacks in Chrome's threat model? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 400 | |
| 401 | People sometimes report that they can compromise Chrome by installing a |
| 402 | malicious DLL in a place where Chrome will load it, by hooking APIs (e.g. [Issue |
| 403 | 130284](https://crbug.com/130284)), or by otherwise altering the configuration |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 404 | of the device. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 405 | |
| 406 | We consider these attacks outside Chrome's threat model, because there is no way |
| 407 | for Chrome (or any application) to defend against a malicious user who has |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 408 | managed to log into your device as you, or who can run software with the |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 409 | privileges of your operating system user account. Such an attacker can modify |
| 410 | executables and DLLs, change environment variables like `PATH`, change |
| 411 | configuration files, read any data your user account owns, email it to |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 412 | themselves, and so on. Such an attacker has total control over your device, |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 413 | and nothing Chrome can do would provide a serious guarantee of defense. This |
| 414 | problem is not special to Chrome — all applications must trust the |
| 415 | physically-local user. |
| 416 | |
| 417 | There are a few things you can do to mitigate risks from people who have |
| 418 | physical control over **your** computer, in certain circumstances. |
| 419 | |
| 420 | * To stop people from reading your data in cases of device theft or loss, use |
| 421 | full disk encryption (FDE). FDE is a standard feature of most operating |
| 422 | systems, including Windows Vista and later, Mac OS X Lion and later, and |
| 423 | some distributions of Linux. (Some older versions of Mac OS X had partial |
| 424 | disk encryption: they could encrypt the user’s home folder, which contains |
| 425 | the bulk of a user’s sensitive data.) Some FDE systems allow you to use |
| 426 | multiple sources of key material, such as the combination of both a |
| 427 | password and a key file on a USB token. When available, you should use |
| 428 | multiple sources of key material to achieve the strongest defense. Chrome |
| 429 | OS encrypts users’ home directories. |
| 430 | * If you share your computer with other people, take advantage of your |
| 431 | operating system’s ability to manage multiple login accounts, and use a |
| 432 | distinct account for each person. For guests, Chrome OS has a built-in |
| 433 | Guest account for this purpose. |
| 434 | * Take advantage of your operating system’s screen lock feature. |
| 435 | * You can reduce the amount of information (including credentials like |
| 436 | cookies and passwords) that Chrome will store locally by using Chrome's |
| 437 | Content Settings (chrome://settings/content) and turning off the form |
| 438 | auto-fill and password storage features |
| 439 | ([chrome://settings/search#password](chrome://settings/search#password)). |
| 440 | |
| 441 | There is almost nothing you can do to mitigate risks when using a **public** |
| 442 | computer. |
| 443 | |
| 444 | * Assume everything you do on a public computer will become, well, public. |
| 445 | You have no control over the operating system or other software on the |
| 446 | machine, and there is no reason to trust the integrity of it. |
Eric Lawrence | 29ca272 | 2018-02-22 19:04:05 | [diff] [blame] | 447 | * If you must use such a computer, use Incognito mode and close all Incognito |
| 448 | windows when you are done browsing to limit the amount of data you leave |
| 449 | behind. Note that Incognito mode **provides no protection** if the system has |
| 450 | already been compromised as described above. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 451 | |
| 452 | <a name="TOC-Why-aren-t-compromised-infected-machines-in-Chrome-s-threat-model-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 453 | ### Why aren't compromised/infected machines in Chrome's threat model? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 454 | |
Tom Sepez | 279d9f4 | 2020-11-30 21:58:58 | [diff] [blame] | 455 | Although the attacker may now be remote, the consequences are essentially the |
| 456 | same as with physically-local attacks. The attacker's code, when it runs as |
| 457 | your user account on your machine, can do anything you can do. (See also |
| 458 | [Microsoft's Ten Immutable Laws Of |
Eric Lawrence | 5e1a9c71 | 2018-09-12 20:55:19 | [diff] [blame] | 459 | Security](https://web.archive.org/web/20160311224620/https://technet.microsoft.com/en-us/library/hh278941.aspx).) |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 460 | |
Tom Sepez | 279d9f4 | 2020-11-30 21:58:58 | [diff] [blame] | 461 | Other cases covered by this section include leaving a debugger port open to |
| 462 | the world, remote shells, and so forth. |
| 463 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 464 | <a name="TOC-Does-entering-JavaScript:-URLs-in-the-URL-bar-or-running-script-in-the-developer-tools-mean-there-s-an-XSS-vulnerability-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 465 | ### Does entering JavaScript: URLs in the URL bar or running script in the developer tools mean there's an XSS vulnerability? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 466 | |
Eric Lawrence | 29ca272 | 2018-02-22 19:04:05 | [diff] [blame] | 467 | [No](https://crbug.com/81697). Chrome does not attempt to prevent the user from |
| 468 | knowingly running script against loaded documents, either by entering script in |
| 469 | the Developer Tools console or by typing a JavaScript: URI into the URL bar. |
| 470 | Chrome and other browsers do undertake some efforts to prevent *paste* of script |
| 471 | URLs in the URL bar (to limit |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 472 | [social-engineering](https://blogs.msdn.microsoft.com/ieinternals/2011/05/19/socially-engineered-xss-attacks/)) |
| 473 | but users are otherwise free to invoke script against pages using either the URL |
| 474 | bar or the DevTools console. |
| 475 | |
Tom Sepez | 5b70048 | 2020-04-06 20:07:21 | [diff] [blame] | 476 | <a name="TOC-Does-executing-JavaScript-from-a-bookmark-mean-there-s-an-XSS-vulnerability-"></a> |
Eric Lawrence | 2de6aaa | 2023-04-13 17:06:55 | [diff] [blame] | 477 | ### Does executing JavaScript from a bookmark or the Home button mean there's an XSS vulnerability? |
Tom Sepez | 5b70048 | 2020-04-06 20:07:21 | [diff] [blame] | 478 | |
| 479 | No. Chromium allows users to create bookmarks to JavaScript URLs that will run |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 480 | on the currently-loaded page when the user clicks the bookmark; these are called |
| 481 | [bookmarklets](https://en.wikipedia.org/wiki/Bookmarklet). |
| 482 | |
Eric Lawrence | 2de6aaa | 2023-04-13 17:06:55 | [diff] [blame] | 483 | Similarly, the Home button may be configured to invoke a JavaScript URL when clicked. |
| 484 | |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 485 | <a name="TOC-Does-executing-JavaScript-in-a-PDF-file-mean-there-s-an-XSS-vulnerability-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 486 | ### Does executing JavaScript in a PDF file mean there's an XSS vulnerability? |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 487 | |
| 488 | No. PDF files have the ability to run JavaScript, usually to facilitate field |
| 489 | validation during form fill-out. Note that the set of bindings provided to |
Tom Sepez | 72119c3c | 2022-12-13 18:48:56 | [diff] [blame] | 490 | the PDF are more limited than those provided by the DOM to HTML documents, nor |
| 491 | do PDFs get any ambient authority based upon the domain from which they are |
| 492 | served (e.g. no document.cookie). |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 493 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 494 | <a name="TOC-Are-PDF-files-static-content-in-Chromium-"></a> |
| 495 | ### Are PDF files static content in Chromium? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 496 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 497 | No. PDF files have some powerful capabilities including invoking printing or |
| 498 | posting form data. To mitigate abuse of these capabiliies, such as beaconing |
| 499 | upon document open, we require interaction with the document (a "user gesture") |
| 500 | before allowing their use. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 501 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 502 | <a name="TOC-What-about-URL-spoofs-using-Internationalized-Domain-Names-IDN-"></a> |
| 503 | ### What about URL spoofs using Internationalized Domain Names (IDN)? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 504 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 505 | We try to balance the needs of our international userbase while protecting users |
| 506 | against confusable homograph attacks. Despite this, there are a list of known |
| 507 | IDN display issues we are still working on. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 508 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 509 | * Please see [this document](https://docs.google.com/document/d/1_xJz3J9kkAPwk3pma6K3X12SyPTyyaJDSCxTfF8Y5sU) |
| 510 | for a list of known issues and how we handle them. |
| 511 | * [This document](https://chromium.googlesource.com/chromium/src/+/main/docs/idn.md) |
| 512 | describes Chrome's IDN policy in detail. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 513 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 514 | <a name="TOC-Chrome-silently-syncs-extensions-across-devices.-Is-this-a-security-vulnerability-"></a> |
| 515 | ### Chrome silently syncs extensions across devices. Is this a security vulnerability? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 516 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 517 | This topic has been moved to the [Extensions Security FAQ](https://chromium.googlesource.com/chromium/src/+/main/extensions/docs/security_faq.md). |
Chris Palmer | 8d95482a | 2019-08-28 22:48:45 | [diff] [blame] | 518 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 519 | <a name="TOC-Why-arent-null-pointer-dereferences-considered-security-bugs-"></a> |
| 520 | ### Why aren't null pointer dereferences considered security bugs? |
Chris Palmer | 8d95482a | 2019-08-28 22:48:45 | [diff] [blame] | 521 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 522 | Null pointer dereferences with consistent, small, fixed offsets are not considered |
| 523 | security bugs. A read or write to the NULL page results in a non-exploitable crash. |
Daniel Cheng | 78780d2 | 2024-01-06 06:47:43 | [diff] [blame] | 524 | If the offset is larger than 32KB, or if there's uncertainty about whether the |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 525 | offset is controllable, it is considered a security bug. |
Chris Palmer | 8d95482a | 2019-08-28 22:48:45 | [diff] [blame] | 526 | |
Daniel Cheng | 78780d2 | 2024-01-06 06:47:43 | [diff] [blame] | 527 | All supported Chrome platforms do not allow mapping memory in at least the first |
| 528 | 32KB of address space: |
| 529 | |
| 530 | - Windows: Windows 8 and later disable mapping the first 64k of address space; |
| 531 | see page 33 of [Exploit Mitigation Improvements in Windows |
| 532 | 8][windows-null-page-mapping] [[archived]][windows-null-page-mapping-archived]. |
| 533 | - Mac and iOS: by default, the linker reserves the first 4GB of address space |
| 534 | with the `__PAGEZERO` segment for 64-bit binaries. |
| 535 | - Linux: the default `mmap_min_addr` value for supported distributions is at |
| 536 | least 64KB. |
| 537 | - Android: [CTS][android-mmap_min_addr] enforces that `mmap_min_addr` is set to |
| 538 | exactly 32KB. |
| 539 | - ChromeOS: the [ChromeOS kernels][chromeos-mmap_min_addr] set the default |
| 540 | `mmap_min_addr` value to at least 32KB. |
| 541 | - Fuchsia: the [userspace base address][fuchsia-min-base-address] begins at 2MB; |
| 542 | this is configured per-platform but set to the same value on all platforms. |
| 543 | |
| 544 | [windows-null-page-mapping]: https://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Exploit_Mitigation_Slides.pdf |
| 545 | [windows-null-page-mapping-archived]: https://web.archive.org/web/20230608131033/https://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Exploit_Mitigation_Slides.pdf |
| 546 | [android-mmap_min_addr]: https://android.googlesource.com/platform/cts/+/496152a250d10e629d31ac90b2e828ad77b8d70a/tests/tests/security/src/android/security/cts/KernelSettingsTest.java#43 |
| 547 | [chromeos-mmap_min_addr]: https://source.chromium.org/search?q=%22CONFIG_DEFAULT_MMAP_MIN_ADDR%3D%22%20path:chromeos%2F&ss=chromiumos%2Fchromiumos%2Fcodesearch:src%2Fthird_party%2Fkernel%2F |
| 548 | [fuchsia-min-base-address]: https://cs.opensource.google/fuchsia/fuchsia/+/main:zircon/kernel/arch/arm64/include/arch/kernel_aspace.h;l=20;drc=eeceea01eee2615de74b1339bcf6e6c2c6f72769 |
| 549 | |
Alex Gough | 2d9974c | 2023-04-11 20:47:57 | [diff] [blame] | 550 | <a name="TOC-Indexing-a-container-out-of-bounds-hits-a-libcpp-verbose-abort--is-this-a-security-bug-"></a> |
| 551 | ### Indexing a container out of bounds hits a __libcpp_verbose_abort, is this a security bug? |
| 552 | |
| 553 | `std::vector` and other containers are now protected by libc++ hardening on all |
| 554 | platforms [crbug.com/1335422](https://crbug.com/1335422). Indexing these |
| 555 | containers out of bounds is now a safe crash - if a proof-of-concept reliably |
| 556 | causes a crash in production builds we consider these to be functional rather than |
| 557 | security issues. |
| 558 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 559 | <a name="TOC-Are-stack-overflows-considered-security-bugs-"></a> |
| 560 | ### Are stack overflows considered security bugs? |
| 561 | |
| 562 | No. Guard pages mean that stack overflows are considered unexploitable, and |
| 563 | are regarded as [denial of service bugs](#TOC-Are-denial-of-service-issues-considered-security-bugs-). |
| 564 | The only exception is if an attacker can jump over the guard pages allocated by |
| 565 | the operating system and avoid accessing them, e.g.: |
| 566 | |
| 567 | * A frame with a very large stack allocation. |
| 568 | * C variable length array with an attacker-controlled size. |
| 569 | * A call to `alloca()` with an attacker-controlled size. |
| 570 | |
danakj | c8fb8260 | 2024-07-09 16:36:09 | [diff] [blame^] | 571 | <a name="TOC-Are-tint-ICE-considered-security-bugs-"></a> |
| 572 | ### Are tint shader compiler Internal Compiler Errors considered security bugs? |
| 573 | |
| 574 | No. When tint fails and throws an ICE (Internal Compiler Error), it will |
| 575 | terminate the process in an intentional manner and produce no shader output. |
| 576 | Thus there is not security bug that follows from it. |
| 577 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 578 | <a name="TOC-Are-enterprise-admins-considered-privileged-"></a> |
| 579 | ### Are enterprise admins considered privileged? |
| 580 | |
| 581 | Chrome [can't guard against local |
| 582 | attacks](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-). |
| 583 | Enterprise administrators often have full control over the device. Does Chrome |
| 584 | assume that enterprise administrators are as privileged and powerful as other |
| 585 | local users? It depends: |
| 586 | |
| 587 | * On a fully managed machine, for example a [domain-joined Windows |
| 588 | machine](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/join-a-computer-to-a-domain), |
| 589 | a device managed via a Mobile Device Management product, or a device with |
| 590 | Chrome managed via machine-level [Chrome Browser Cloud |
| 591 | Management](https://support.google.com/chrome/?p=cloud_management), |
| 592 | the administrator effectively has privileges to view and mutate any state on |
| 593 | the device. Chrome [policy implementations](../enterprise/add_new_policy.md) |
| 594 | should still guide enterprise admins to the most user-respectful defaults |
| 595 | and policy description text should clearly describe the nature of the |
| 596 | capabilities and the user impact of them being granted. |
| 597 | * On an unmanaged machine, Chrome profiles [can be managed via cloud |
| 598 | policy](https://support.google.com/chrome/?p=manage_profiles) |
| 599 | if users sign into Chrome using a managed account. These policies are called |
| 600 | *user policies*. In this scenario, the Chrome enterprise administrator should |
| 601 | have privileges only to *view and mutate state within the profile that they |
| 602 | administer*. Any access outside that profile requires end-user consent. |
| 603 | |
| 604 | Chrome administrators can force-install Chrome extensions without permissions |
| 605 | prompts, so the same restrictions must apply to the Chrome extension APIs. |
| 606 | |
| 607 | Chrome has a long history of policy support with many hundreds of policies. We |
| 608 | recognize that there may exist policies or policy combinations that can provide |
| 609 | capabilities outside of the guidance provided here. In cases of clear violation |
| 610 | of user expectations, we will attempt to remedy these policies and we will apply |
| 611 | the guidance laid out in this document to any newly added policies. |
| 612 | |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 613 | See the [Web Platform Security |
Chris Thompson | 1f8b0006 | 2023-05-31 00:38:49 | [diff] [blame] | 614 | guidelines](https://chromium.googlesource.com/chromium/src/+/main/docs/security/web-platform-security-guidelines.md#enterprise-policies) |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 615 | for more information on how enterprise policies should interact with Web |
| 616 | Platform APIs. |
| 617 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 618 | <a name="TOC-Can-I-use-EMET-to-help-protect-Chrome-against-attack-on-Microsoft-Windows-"></a> |
| 619 | ### Can I use EMET to help protect Chrome against attack on Microsoft Windows? |
| 620 | |
| 621 | There are [known compatibility |
| 622 | problems](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/chromium-and-emet) |
| 623 | between Microsoft's EMET anti-exploit toolkit and some versions of Chrome. These |
| 624 | can prevent Chrome from running in some configurations. Moreover, the Chrome |
| 625 | security team does not recommend the use of EMET with Chrome because its most |
| 626 | important security benefits are redundant with or superseded by built-in attack |
| 627 | mitigations within the browser. For users, the very marginal security benefit is |
| 628 | not usually a good trade-off for the compatibility issues and performance |
| 629 | degradation the toolkit can cause. |
| 630 | |
Arthur Sonzogni | cbc5d69 | 2024-05-08 10:37:20 | [diff] [blame] | 631 | <a name="TOC-dangling-pointers"></a> |
| 632 | ### Dangling pointers |
| 633 | |
| 634 | Chromium can be instrumented to detect [dangling |
| 635 | pointers](https://chromium.googlesource.com/chromium/src/+/main/docs/dangling_ptr.md): |
| 636 | |
| 637 | Notable build flags are: |
| 638 | - `enable_dangling_raw_ptr_checks=true` |
| 639 | - `use_asan_unowned_ptr=true` |
| 640 | |
| 641 | Notable runtime flags are: |
| 642 | - `--enable-features=PartitionAllocDanglingPtr` |
| 643 | |
| 644 | It is important to note that detecting a dangling pointer alone does not |
| 645 | necessarily indicate a security vulnerability. A dangling pointer becomes a |
| 646 | security vulnerability only when it is dereferenced and used after it becomes |
| 647 | dangling. |
| 648 | |
| 649 | In general, dangling pointer issues should be assigned to feature teams as |
| 650 | ordinary bugs and be fixed by them. However, they can be considered only if |
| 651 | there is a demonstrable way to show a memory corruption. e.g. with a POC causing |
| 652 | crash with ASAN **without the flags above**. |
| 653 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 654 | ## Certificates & Connection Indicators |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 655 | |
| 656 | <a name="TOC-Where-are-the-security-indicators-located-in-the-browser-window-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 657 | ### Where are the security indicators located in the browser window? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 658 | |
| 659 | The topmost portion of the browser window, consisting of the **Omnibox** (or |
| 660 | **Location Bar**), navigation icons, menu icon, and other indicator icons, is |
| 661 | sometimes called the browser **chrome** (not to be confused with the Chrome |
| 662 | Browser itself). Actual security indicators can only appear in this section of |
| 663 | the window. There can be no trustworthy security indicators elsewhere. |
| 664 | |
| 665 | Furthermore, Chrome can only guarantee that it is correctly representing URLs |
| 666 | and their origins at the end of all navigation. Quirks of URL parsing, HTTP |
| 667 | redirection, and so on are not security concerns unless Chrome is |
| 668 | misrepresenting a URL or origin after navigation has completed. |
| 669 | |
| 670 | Browsers present a dilemma to the user since the output is a combination of |
| 671 | information coming from both trustworthy sources (the browser itself) and |
| 672 | untrustworthy sources (the web page), and the untrustworthy sources are allowed |
| 673 | virtually unlimited control over graphical presentation. The only restriction on |
| 674 | the page's presentation is that it is confined to the large rectangular area |
| 675 | directly underneath the chrome, called the **viewport**. Things like hover text |
| 676 | and URL preview(s), shown in the viewport, are entirely under the control of the |
| 677 | web page itself. They have no guaranteed meaning, and function only as the page |
| 678 | desires. This can be even more confusing when pages load content that looks like |
| 679 | chrome. For example, many pages load images of locks, which look similar to the |
| 680 | meaningful HTTPS lock in the Omnibox, but in fact do not convey any meaningful |
| 681 | information about the transport security of that page. |
| 682 | |
| 683 | When the browser needs to show trustworthy information, such as the bubble |
| 684 | resulting from a click on the lock icon, it does so by making the bubble overlap |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 685 | chrome. This visual detail can't be imitated by the page itself since the page |
| 686 | is confined to the viewport. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 687 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 688 | <a name="TOC-Why-does-Chrome-show-a-lock-even-if-my-HTTPS-connection-is-being-proxied-"></a> |
| 689 | ### Why does Chrome show a lock, even if my HTTPS connection is being proxied? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 690 | |
| 691 | Some types of software intercept HTTPS connections. Examples include anti-virus |
| 692 | software, corporate network monitoring tools, and school censorship software. In |
| 693 | order for the interception to work, you need to install a private trust anchor |
| 694 | (root certificate) onto your computer. This may have happened when you installed |
| 695 | your anti-virus software, or when your company's network administrator set up |
| 696 | your computer. If that has occurred, your HTTPS connections can be viewed or |
| 697 | modified by the software. |
| 698 | |
| 699 | Since you have allowed the trust anchor to be installed onto your computer, |
| 700 | Chrome assumes that you have consented to HTTPS interception. Anyone who can add |
| 701 | a trust anchor to your computer can make other changes to your computer, too, |
| 702 | including changing Chrome. (See also [Why aren't physically-local attacks in |
Avi Drissman | 36d4e2e | 2017-07-31 20:54:39 | [diff] [blame] | 703 | Chrome's threat model?](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-).) |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 704 | |
| 705 | <a name="TOC-Why-can-t-I-select-Proceed-Anyway-on-some-HTTPS-error-screens-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 706 | ### Why can’t I select Proceed Anyway on some HTTPS error screens? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 707 | |
| 708 | A key guarantee of HTTPS is that Chrome can be relatively certain that it is |
| 709 | connecting to the true web server and not an impostor. Some sites request an |
| 710 | even higher degree of protection for their users (i.e. you): they assert to |
| 711 | Chrome (via Strict Transport Security — |
Xiaoyin Liu | b7985e5 | 2017-09-21 18:07:46 | [diff] [blame] | 712 | [HSTS](https://tools.ietf.org/html/rfc6797) — or by other means) that any |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 713 | server authentication error should be fatal, and that Chrome must close the |
| 714 | connection. If you encounter such a fatal error, it is likely that your network |
| 715 | is under attack, or that there is a network misconfiguration that is |
| 716 | indistinguishable from an attack. |
| 717 | |
| 718 | The best thing you can do in this situation is to raise the issue to your |
| 719 | network provider (or corporate IT department). |
| 720 | |
| 721 | Chrome shows non-recoverable HTTPS errors only in cases where the true server |
| 722 | has previously asked for this treatment, and when it can be relatively certain |
| 723 | that the current server is not the true server. |
| 724 | |
| 725 | <a name="TOC-How-does-key-pinning-interact-with-local-proxies-and-filters-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 726 | ### How does key pinning interact with local proxies and filters? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 727 | |
| 728 | To enable certificate chain validation, Chrome has access to two stores of trust |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 729 | anchors (i.e., certificates that are empowered as issuers). One trust anchor |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 730 | store is for authenticating public internet servers, and depending on the |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 731 | version of Chrome being used and the platform it is running on, the |
| 732 | [Chrome Root Store](https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store/faq.md#what-is-the-chrome-root-store) |
| 733 | might be in use. The private store contains certificates installed by the user |
| 734 | or the administrator of the client machine. Private intranet servers should |
| 735 | authenticate themselves with certificates issued by a private trust anchor. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 736 | |
| 737 | Chrome’s key pinning feature is a strong form of web site authentication that |
| 738 | requires a web server’s certificate chain not only to be valid and to chain to a |
| 739 | known-good trust anchor, but also that at least one of the public keys in the |
| 740 | certificate chain is known to be valid for the particular site the user is |
| 741 | visiting. This is a good defense against the risk that any trust anchor can |
| 742 | authenticate any web site, even if not intended by the site owner: if an |
| 743 | otherwise-valid chain does not include a known pinned key (“pin”), Chrome will |
| 744 | reject it because it was not issued in accordance with the site operator’s |
| 745 | expectations. |
| 746 | |
| 747 | Chrome does not perform pin validation when the certificate chain chains up to a |
| 748 | private trust anchor. A key result of this policy is that private trust anchors |
| 749 | can be used to proxy (or |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 750 | [MITM](https://en.wikipedia.org/wiki/Man-in-the-middle_attack)) connections, |
| 751 | even to pinned sites. “Data loss prevention” appliances, firewalls, content |
| 752 | filters, and malware can use this feature to defeat the protections of key |
| 753 | pinning. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 754 | |
| 755 | We deem this acceptable because the proxy or MITM can only be effective if the |
| 756 | client machine has already been configured to trust the proxy’s issuing |
| 757 | certificate — that is, the client is already under the control of the person who |
| 758 | controls the proxy (e.g. the enterprise’s IT administrator). If the client does |
| 759 | not trust the private trust anchor, the proxy’s attempt to mediate the |
| 760 | connection will fail as it should. |
| 761 | |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 762 | <a name="TOC-When-is-key-pinning-enabled-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 763 | ### When is key pinning enabled? |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 764 | |
| 765 | Key pinning is enabled for Chrome-branded, non-mobile builds when the local |
| 766 | clock is within ten weeks of the embedded build timestamp. Key pinning is a |
| 767 | useful security measure but it tightly couples client and server configurations |
| 768 | and completely breaks when those configurations are out of sync. In order to |
| 769 | manage that risk we need to ensure that we can promptly update pinning clients |
Chris Palmer | 59877ec | 2019-11-22 01:28:09 | [diff] [blame] | 770 | in an emergency and ensure that non-emergency changes can be deployed in a |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 771 | reasonable timeframe. |
| 772 | |
| 773 | Each of the conditions listed above helps ensure those properties: |
| 774 | Chrome-branded builds are those that Google provides and they all have an |
| 775 | auto-update mechanism that can be used in an emergency. However, auto-update on |
| 776 | mobile devices is significantly less effective thus they are excluded. Even in |
| 777 | cases where auto-update is generally effective, there are still non-trivial |
| 778 | populations of stragglers for various reasons. The ten-week timeout prevents |
| 779 | those stragglers from causing problems for regular, non-emergency changes and |
| 780 | allows stuck users to still, for example, conduct searches and access Chrome's |
| 781 | homepage to hopefully get unstuck. |
| 782 | |
| 783 | In order to determine whether key pinning is active, try loading |
Francois Marier | e1b8e70 | 2023-07-07 05:25:08 | [diff] [blame] | 784 | [https://pinning-test.badssl.com/](https://pinning-test.badssl.com/). If key |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 785 | pinning is active the load will _fail_ with a pinning error. |
| 786 | |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 787 | <a name="TOC-How-does-certificate-transparency-interact-with-local-proxies-and-filters-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 788 | ### How does Certificate Transparency interact with local proxies and filters? |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 789 | |
Chris Palmer | 413f3c0 | 2017-08-23 17:47:54 | [diff] [blame] | 790 | Just as [pinning only applies to publicly-trusted trust |
| 791 | anchors](#TOC-How-does-key-pinning-interact-with-local-proxies-and-filters-), |
| 792 | Chrome only evaluates Certificate Transparency (CT) for publicly-trusted trust |
| 793 | anchors. Thus private trust anchors, such as for enterprise middle-boxes and AV |
| 794 | proxies, do not need to be publicly logged in a CT log. |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 795 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 796 | <a name="TOC-Why-are-some-web-platform-features-only-available-in-HTTPS-page-loads-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 797 | ### Why are some web platform features only available in HTTPS page-loads? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 798 | |
| 799 | The full answer is here: we [Prefer Secure Origins For Powerful New |
| 800 | Features](https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features). |
| 801 | In short, many web platform features give web origins access to sensitive new |
| 802 | sources of information, or significant power over a user's experience with their |
Eric Roman | ed127b67 | 2018-01-23 19:36:38 | [diff] [blame] | 803 | computer/phone/watch/etc., or over their experience with it. We would therefore |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 804 | like to have some basis to believe the origin meets a minimum bar for security, |
| 805 | that the sensitive information is transported over the Internet in an |
Eric Roman | ed127b67 | 2018-01-23 19:36:38 | [diff] [blame] | 806 | authenticated and confidential way, and that users can make meaningful choices |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 807 | to trust or not trust a web origin. |
| 808 | |
| 809 | Note that the reason we require secure origins for WebCrypto is slightly |
| 810 | different: An application that uses WebCrypto is almost certainly using it to |
| 811 | provide some kind of security guarantee (e.g. encrypted instant messages or |
| 812 | email). However, unless the JavaScript was itself transported to the client |
| 813 | securely, it cannot actually provide any guarantee. (After all, a MITM attacker |
| 814 | could have modified the code, if it was not transported securely.) |
| 815 | |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 816 | See the [Web Platform Security |
Chris Thompson | 1f8b0006 | 2023-05-31 00:38:49 | [diff] [blame] | 817 | guidelines](https://chromium.googlesource.com/chromium/src/+/main/docs/security/web-platform-security-guidelines.md#encryption) |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 818 | for more information on security guidelines applicable to web platform APIs. |
| 819 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 820 | <a name="TOC-Which-origins-are-secure-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 821 | ### Which origins are "secure"? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 822 | |
| 823 | Secure origins are those that match at least one of the following (scheme, host, |
| 824 | port) patterns: |
| 825 | |
| 826 | * (https, *, *) |
| 827 | * (wss, *, *) |
| 828 | * (*, localhost, *) |
| 829 | * (*, 127/8, *) |
| 830 | * (*, ::1/128, *) |
| 831 | * (file, *, —) |
| 832 | * (chrome-extension, *, —) |
| 833 | |
| 834 | That is, secure origins are those that load resources either from the local |
| 835 | machine (necessarily trusted) or over the network from a |
| 836 | cryptographically-authenticated server. See [Prefer Secure Origins For Powerful |
| 837 | New |
| 838 | Features](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/prefer-secure-origins-for-powerful-new-features) |
| 839 | for more details. |
| 840 | |
| 841 | <a name="TOC-What-s-the-story-with-certificate-revocation-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 842 | ### What's the story with certificate revocation? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 843 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 844 | Chrome's primary mechanism for checking certificate revocation status is |
Joe DeBlasio | 0c648071 | 2024-07-04 00:11:51 | [diff] [blame] | 845 | [CRLSets](https://dev.chromium.org/Home/chromium-security/crlsets). |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 846 | Additionally, by default, [stapled Online Certificate Status Protocol (OCSP) |
| 847 | responses](https://en.wikipedia.org/wiki/OCSP_stapling) are honored. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 848 | |
Joe DeBlasio | 0c648071 | 2024-07-04 00:11:51 | [diff] [blame] | 849 | As of 2024, Chrome enforces most security-relevant certificate revocations that |
| 850 | are visible via Certificate Revocation Lists (CRLs) published to the |
| 851 | [CCADB](https://www.ccadb.org/) via CRLSets. There is some inherent delay in |
| 852 | getting revocation information to Chrome clients, but most revocations should |
| 853 | reach most users within a few days of appearing on a CA's CRL. |
| 854 | |
| 855 | Chrome clients do not, by default, perform "online" certificate revocation |
| 856 | status checks using CRLs directly or via OCSP URLs included in certificates. |
| 857 | This is because online checks offer limited security value unless a client, like |
danakj | c8fb8260 | 2024-07-09 16:36:09 | [diff] [blame^] | 858 | Chrome, refuses to connect to a website if it cannot get a valid response, |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 859 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 860 | Unfortunately, there are many widely-prevalent causes for why a client |
| 861 | might be unable to get a valid certificate revocation status response to |
| 862 | include: |
| 863 | * timeouts (e.g., an OCSP responder is online but does not respond within an |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 864 | acceptable time limit), |
| 865 | * availability issues (e.g., the OCSP responder is offline), |
| 866 | * invalid responses (e.g., a "stale" or malformed status response), and |
| 867 | * local network attacks misrouting traffic or blocking responses. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 868 | |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 869 | Additional concern with OCSP checks are related to privacy. OCSP |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 870 | requests reveal details of individuals' browsing history to the operator of the |
| 871 | OCSP responder (i.e., a third party). These details can be exposed accidentally |
| 872 | (e.g., via data breach of logs) or intentionally (e.g., via subpoena). Chrome |
| 873 | used to perform revocation checks for Extended Validation certificates, but that |
| 874 | behavior was disabled in 2022 for [privacy reasons](https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/S6A14e_X-T0/m/T4WxWgajAAAJ). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 875 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 876 | The following enterprise policies can be used to change the default revocation |
| 877 | checking behavior in Chrome, though these may be removed in the future: |
| 878 | * [enable soft-fail OCSP](https://chromeenterprise.google/policies/#EnableOnlineRevocationChecks) |
| 879 | * [hard-fail for local trust anchors](https://chromeenterprise.google/policies/#RequireOnlineRevocationChecksForLocalAnchors). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 880 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 881 | ## Passwords & Local Data |
| 882 | |
| 883 | <a name="TOC-What-about-unmasking-of-passwords-with-the-developer-tools-"></a> |
| 884 | ### What about unmasking of passwords with the developer tools? |
| 885 | |
| 886 | One of the most frequent reports we receive is password disclosure using the |
| 887 | Inspect Element feature (see [Issue 126398](https://crbug.com/126398) for an |
| 888 | example). People reason that "If I can see the password, it must be a bug." |
| 889 | However, this is just one of the [physically-local attacks described in the |
| 890 | previous |
| 891 | section](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-), |
| 892 | and all of those points apply here as well. |
| 893 | |
| 894 | The reason the password is masked is only to prevent disclosure via |
| 895 | "shoulder-surfing" (i.e. the passive viewing of your screen by nearby persons), |
| 896 | not because it is a secret unknown to the browser. The browser knows the |
| 897 | password at many layers, including JavaScript, developer tools, process memory, |
| 898 | and so on. When you are physically local to the computer, and only when you are |
| 899 | physically local to the computer, there are, and always will be, tools for |
| 900 | extracting the password from any of these places. |
| 901 | |
| 902 | <a name="TOC-Is-Chrome-s-support-for-userinfo-in-HTTP-URLs-e.g.-http:-user:password-example.com-considered-a-vulnerability-"></a> |
| 903 | ### Is Chrome's support for userinfo in HTTP URLs (e.g. http://user:[email protected]) considered a vulnerability? |
| 904 | |
| 905 | [Not at this time](https://crbug.com/626951). Chrome supports HTTP and HTTPS |
| 906 | URIs with username and password information embedded within them for |
| 907 | compatibility with sites that require this feature. Notably, Chrome will |
| 908 | suppress display of the username and password information after navigation in |
| 909 | the URL box to limit the effectiveness of spoofing attacks that may try to |
| 910 | mislead the user. For instance, navigating to |
| 911 | `http://[email protected]` will show an address of |
| 912 | `http://evil.example.com` after the page loads. |
| 913 | |
Tom Sepez | 83fd1f61 | 2022-07-18 21:21:27 | [diff] [blame] | 914 | Note: We often receive reports calling this an "open redirect". However, it has |
| 915 | nothing to do with redirection; rather the format of URLs is complex and the |
| 916 | userinfo may be misread as a host. |
| 917 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 918 | <a name="TOC-Why-does-the-Password-Manager-ignore-autocomplete-off-for-password-fields-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 919 | ### Why does the Password Manager ignore `autocomplete='off'` for password fields? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 920 | |
| 921 | Ignoring `autocomplete='off'` for password fields allows the password manager to |
| 922 | give more power to users to manage their credentials on websites. It is the |
| 923 | security team's view that this is very important for user security by allowing |
| 924 | users to have unique and more complex passwords for websites. As it was |
| 925 | originally implemented, autocomplete='off' for password fields took control away |
| 926 | from the user and gave control to the web site developer, which was also a |
| 927 | violation of the [priority of |
Adam Barth | 3a3bfef | 2021-10-06 02:36:44 | [diff] [blame] | 928 | constituencies](https://www.schemehostport.com/2011/10/priority-of-constituencies.html). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 929 | For a longer discussion on this, see the [mailing list |
| 930 | announcement](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/zhhj7hCip5c). |
| 931 | |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 932 | <a name="TOC-Signout-of-Chrome"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 933 | ### Signing out of Chrome does not delete previously-synced data? |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 934 | |
| 935 | If you have signed into Chrome and subsequently sign out of Chrome, previously |
| 936 | saved passwords and other data are not deleted from your device unless you |
| 937 | select that option when signing out of Chrome. |
| 938 | |
| 939 | If you change your Google password, synced data will no longer be updated in |
| 940 | Chrome instances until you provide the new password to Chrome on each device |
| 941 | configured to sync. However, previously synced data [remains available](https://crbug.com/792967) |
| 942 | on each previously-syncing device unless manually removed. |
| 943 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 944 | <a name="TOC-Why-doesn-t-the-Password-Manager-save-my-Google-password-if-I-am-using-Chrome-Sync-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 945 | ### Why doesn't the Password Manager save my Google password if I am using Chrome Sync? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 946 | |
| 947 | In its default mode, Chrome Sync uses your Google password to protect all the |
| 948 | other passwords in the Chrome Password Manager. |
| 949 | |
| 950 | In general, it is a bad idea to store the credential that protects an asset in |
| 951 | the same place as the asset itself. An attacker who could temporarily compromise |
| 952 | the Chrome Password Manager could, by stealing your Google password, obtain |
| 953 | continuing access to all your passwords. Imagine you store your valuables in a |
| 954 | safe, and you accidentally forget to close the safe. If a thief comes along, |
| 955 | they might steal all of your valuables. That’s bad, but imagine if you had also |
| 956 | left the combination to the safe inside as well. Now the bad guy has access to |
| 957 | all of your valuables and all of your future valuables, too. The password |
| 958 | manager is similar, except you probably would not even know if a bad guy |
| 959 | accessed it. |
| 960 | |
| 961 | To prevent this type of attack, Chrome Password Manager does not save the Google |
| 962 | password for the account you sync with Chrome. If you have multiple Google |
| 963 | accounts, the Chrome Password Manager will save the passwords for accounts other |
| 964 | than the one you are syncing with. |
| 965 | |
| 966 | <a name="TOC-Does-the-Password-Manager-store-my-passwords-encrypted-on-disk-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 967 | ### Does the Password Manager store my passwords encrypted on disk? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 968 | |
| 969 | Chrome generally tries to use the operating system's user storage mechanism |
| 970 | wherever possible and stores them encrypted on disk, but it is platform |
| 971 | specific: |
| 972 | |
| 973 | * On Windows, Chrome uses the [Data Protection API |
| 974 | (DPAPI)](https://msdn.microsoft.com/en-us/library/ms995355.aspx) to bind |
| 975 | your passwords to your user account and store them on disk encrypted with |
| 976 | a key only accessible to processes running as the same logged on user. |
Viktor Semeniuk | 3720fc4 | 2024-04-03 09:33:52 | [diff] [blame] | 977 | * On macOS and iOS, Chrome previously stored credentials directly in the user's |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 978 | Keychain, but for technical reasons, it has switched to storing the |
| 979 | credentials in "Login Data" in the Chrome users profile directory, but |
| 980 | encrypted on disk with a key that is then stored in the user's Keychain. |
Viktor Semeniuk | 3720fc4 | 2024-04-03 09:33:52 | [diff] [blame] | 981 | See [Issue 466638](https://crbug.com/466638) and [Issue 520437](https://crbug.com/520437) for further explanation. |
Christos Froussios | 2a02cc5 | 2019-07-30 07:04:46 | [diff] [blame] | 982 | * On Linux, Chrome previously stored credentials directly in the user's |
Tom Anderson | 761687a | 2023-06-14 17:27:39 | [diff] [blame] | 983 | Gnome Secret Service or KWallet, but for technical reasons, it has switched to |
Christos Froussios | 2a02cc5 | 2019-07-30 07:04:46 | [diff] [blame] | 984 | storing the credentials in "Login Data" in the Chrome user's profile directory, |
| 985 | but encrypted on disk with a key that is then stored in the user's Gnome |
Tom Anderson | 761687a | 2023-06-14 17:27:39 | [diff] [blame] | 986 | Secret Service or KWallet. If there is no available Secret Service or KWallet, |
| 987 | the data is not encrypted when stored. |
Viktor Semeniuk | 3720fc4 | 2024-04-03 09:33:52 | [diff] [blame] | 988 | * On Android, Chrome doesn't store in the profile anymore, instead it uses Google |
| 989 | Play Services to access passwords stored on a device. |
| 990 | * On ChromeOS passwords are only obfuscated since all profile data is encrypted |
| 991 | by the OS. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 992 | |
Adrian Taylor | ae854525 | 2021-05-27 17:16:51 | [diff] [blame] | 993 | <a name="TOC-If-theres-a-way-to-see-stored-passwords-without-entering-a-password--is-this-a-security-bug-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 994 | ### If there's a way to see stored passwords without entering a password, is this a security bug? |
Adrian Taylor | ae854525 | 2021-05-27 17:16:51 | [diff] [blame] | 995 | |
| 996 | No. If an attacker has control of your login on your device, they can get to |
| 997 | your passwords by inspecting Chrome disk files or memory. (See |
| 998 | [why aren't physically-local attacks in Chrome's threat |
| 999 | model](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-)). |
| 1000 | |
| 1001 | On some platforms we ask for a password before revealing stored passwords, |
| 1002 | but this is not considered a robust defense. It’s historically to stop |
| 1003 | users inadvertently revealing their passwords on screen, for example if |
| 1004 | they’re screen sharing. We don’t do this on all platforms because we consider |
| 1005 | such risks greater on some than on others. |
| 1006 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 1007 | ## Other |
Alex Gough | 8dc4f56 | 2022-04-18 22:14:05 | [diff] [blame] | 1008 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 1009 | <a name="TOC-What-is-the-security-story-for-Service-Workers-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 1010 | ### What is the security story for Service Workers? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 1011 | |
| 1012 | See our dedicated [Service Worker Security |
Eric Lawrence [MSFT] | f8057955 | 2021-04-22 18:39:26 | [diff] [blame] | 1013 | FAQ](https://chromium.googlesource.com/chromium/src/+/main/docs/security/service-worker-security-faq.md). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 1014 | |
Devlin Cronin | 7304fec | 2021-06-02 22:51:26 | [diff] [blame] | 1015 | <a name="TOC-What-is-the-security-story-for-Extensions-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 1016 | ### What is the security story for Extensions? |
Devlin Cronin | 7304fec | 2021-06-02 22:51:26 | [diff] [blame] | 1017 | |
| 1018 | See our dedicated [Extensions Security FAQ](https://chromium.googlesource.com/chromium/src/+/main/extensions/docs/security_faq.md). |
Adrian Taylor | d57a4c6 | 2022-11-10 10:27:50 | [diff] [blame] | 1019 | |
Adrian Taylor | 1bbbf14 | 2023-08-29 17:41:17 | [diff] [blame] | 1020 | <a name="TOC-What-is-the-security-model-for-Chrome-Custom-Tabs-"></a> |
| 1021 | ### What's the security model for Chrome Custom Tabs? |
| 1022 | |
| 1023 | See our [Chrome Custom Tabs security FAQ](custom-tabs-faq.md). |
| 1024 | |
Adrian Taylor | 98e9c79 | 2024-04-29 18:59:23 | [diff] [blame] | 1025 | <a name="TOC-How-is-security-different-in-Chrome-for-iOS--"></a> |
| 1026 | ### How is security different in Chrome for iOS? |
| 1027 | |
| 1028 | Chrome for iOS does not use Chrome's standard rendering engine. Due to Apple's |
| 1029 | iOS platform restrictions, it instead uses Apple's WebKit engine and a more |
| 1030 | restricted process isolation model. This means its security properties are |
| 1031 | different from Chrome on all other platforms. |
| 1032 | |
| 1033 | The differences in security are far too extensive to list exhaustively, but some |
| 1034 | notable points are: |
| 1035 | |
| 1036 | * Chromium's [site |
| 1037 | isolation](https://www.chromium.org/Home/chromium-security/site-isolation/) |
| 1038 | isn't used; WebKit has its own alternative implementation with different costs |
| 1039 | and benefits. |
| 1040 | * WebKit has [historically been slower at shipping security |
| 1041 | fixes](https://googleprojectzero.blogspot.com/2022/02/a-walk-through-project-zero-metrics.html). |
| 1042 | * Chrome's network stack, [root |
| 1043 | store](https://www.chromium.org/Home/chromium-security/root-ca-policy/) and |
| 1044 | associated technology are not used, so |
| 1045 | the platform will make different decisions about what web servers to trust. |
| 1046 | * Sandboxing APIs are not available for native code. |
| 1047 | |
| 1048 | Given that the fundamentals of the browser are so different, and given these |
| 1049 | limitations, Chrome for iOS has historically not consistently implemented some |
| 1050 | of Chrome's [standard security guidelines](rules.md). This includes the |
| 1051 | important [Rule of Two](rule-of-2.md). Future Chrome for iOS features should |
| 1052 | meet all guidelines except in cases where the lack of platform APIs make it |
| 1053 | unrealistic. (The use of WebAssembly-based sandboxing is currently considered |
| 1054 | unrealistic though this could change in future.) |
| 1055 | |
| 1056 | If the Rule of Two cannot be followed, features for Chrome for iOS should |
| 1057 | nevertheless follow it as closely as possible, and adopt additional mitigations |
| 1058 | where they cannot: |
| 1059 | |
| 1060 | * First consider adding a validation layer between unsafe code and web contents, |
| 1061 | or adopting memory-safe parsers at the boundary between the renderer and the |
| 1062 | browser process. Consider changing the design of the feature so the riskiest |
| 1063 | parsing can happen in javascript injected in the renderer process. |
| 1064 | * Any unsafe unsandboxed code that is exposed to web contents or other |
| 1065 | untrustworthy data sources must be extensively tested and fuzzed. |
| 1066 | |
| 1067 | The Chrome team is enthusiastic about the future possibility of making a version |
| 1068 | of Chrome for iOS that meets our usual security standards if richer platform |
| 1069 | facilities become widely available: this will require revisiting existing |
| 1070 | features to see if adjustment is required. |
| 1071 | |
Adrian Taylor | 82a534b | 2023-05-09 19:21:20 | [diff] [blame] | 1072 | <a name="TOC-Are-all-Chrome-updates-important--"></a> |
| 1073 | ### Are all Chrome updates important? |
| 1074 | |
| 1075 | Yes - see [our updates FAQ](updates.md). |
| 1076 | |
| 1077 | <a name="TOC-What-older-Chrome-versions-are-supported--"></a> |
| 1078 | ### What older Chrome versions are supported? |
| 1079 | |
| 1080 | We always recommend being on the most recent Chrome stable version - see |
| 1081 | [our updates FAQ](updates.md). |
| 1082 | |
Adrian Taylor | d57a4c6 | 2022-11-10 10:27:50 | [diff] [blame] | 1083 | <a name="TOC-Im-making-a-Chromium-based-browser-how-should-I-secure-it-"></a> |
| 1084 | ### I'm making a Chromium-based browser. How should I secure it? |
| 1085 | |
| 1086 | If you want to make a browser based on Chromium, you should stay up to date |
| 1087 | with Chromium's security fixes. There are adversaries who weaponize fixed |
| 1088 | Chromium bugs ("n-day vulnerabilities") to target browsers which haven’t yet |
| 1089 | absorbed those fixes. |
| 1090 | |
| 1091 | Decide whether your approach is to stay constantly up to date with Chromium |
| 1092 | releases, or to backport security fixes onto some older version, upgrading |
| 1093 | Chromium versions less frequently. |
| 1094 | |
| 1095 | Backporting security fixes sounds easier than forward-porting features, but in |
| 1096 | our experience, this is false. Chromium releases 400+ security bug fixes per |
| 1097 | year ([example |
| 1098 | query](https://bugs.chromium.org/p/chromium/issues/list?q=type%3DBug-Security%20has%3Arelease%20closed%3Etoday-730%20closed%3Ctoday-365%20allpublic&can=1)). |
| 1099 | Some downstream browsers take risks by backporting only Medium+ severity fixes, |
| 1100 | but that's still over 300 ([example |
| 1101 | query](https://bugs.chromium.org/p/chromium/issues/list?q=type%3DBug-Security%20has%3Arelease%20closed%3Etoday-730%20closed%3Ctoday-365%20allpublic%20Security_Severity%3DMedium%2CHigh%2CCritical&can=1)). |
| 1102 | Most are trivial cherry-picks; but others require rework and require versatile |
| 1103 | engineers who can make good decisions about any part of a large codebase. |
| 1104 | |
| 1105 | Our recommendation is to stay up-to-date with Chrome's released versions. You |
| 1106 | should aim to release a version of your browser within just a few days of each |
| 1107 | Chrome [stable |
| 1108 | release](https://chromereleases.googleblog.com/search/label/Stable%20updates). |
| 1109 | If your browser is sufficiently widely-used, you can [apply for advance notice |
| 1110 | of fixed vulnerabilities](https://www.chromium.org/Home/chromium-security/) to |
| 1111 | make this a little easier. |
| 1112 | |
| 1113 | Finally, if you choose the backporting approach, please explain the security |
| 1114 | properties to your users. Some fraction of security improvements cannot be |
| 1115 | backported. This can happen for several reasons, for example: because they |
| 1116 | depend upon architectural changes (e.g. breaking API changes); because the |
| 1117 | security improvement is a significant new feature; or because the security |
| 1118 | improvement is the removal of a broken feature. |