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 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 332 | ## Areas outside Chrome's Threat Model |
| 333 | |
| 334 | <a name="TOC-Are-privacy-issues-considered-security-bugs-"></a> |
| 335 | ### Are privacy issues considered security bugs? |
| 336 | |
| 337 | No. The Chrome Privacy team treats privacy issues, such as leaking information |
| 338 | from Incognito, fingerprinting, and bugs related to deleting browsing data as |
| 339 | functional bugs. |
| 340 | |
| 341 | Privacy issues are not considered under the security vulnerability rewards |
| 342 | program; the [severity guidelines](severity-guidelines.md) outline the types of |
| 343 | bugs that are considered security vulnerabilities in more detail. |
| 344 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 345 | <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] | 346 | ### What are the security and privacy guarantees of Incognito mode? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 347 | |
| 348 | Bugs in Incognito mode are tracked as privacy bugs, not security bugs. |
| 349 | |
Chris Palmer | 9839ce4 | 2017-08-16 20:59:15 | [diff] [blame] | 350 | The [Help Center](https://support.google.com/chrome/?p=cpn_incognito) explains |
| 351 | what privacy protections Incognito mode attempts to enforce. In particular, |
| 352 | please note that Incognito is not a “do not track” mode, and it does not hide |
| 353 | aspects of your identity from web sites. Chrome does offer a way to send Do Not |
| 354 | Track request to servers; see chrome://settings/?search=do+not+track |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 355 | |
| 356 | When in Incognito mode, Chrome does not store any new history, cookies, or other |
| 357 | state in non-volatile storage. However, Incognito windows will be able to access |
| 358 | some previously-stored state, such as browsing history. |
| 359 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 360 | <a name="TOC-Are-XSS-filter-bypasses-considered-security-bugs-"></a> |
| 361 | ### Are XSS filter bypasses considered security bugs? |
| 362 | |
| 363 | No. Chromium once contained a reflected XSS filter called the [XSSAuditor](https://www.chromium.org/developers/design-documents/xss-auditor) |
| 364 | that was a best-effort second line of defense against reflected XSS flaws found |
| 365 | 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] | 366 | Consequently, Chromium no longer takes any special action in response to an |
| 367 | X-XSS-Protection header. |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 368 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 369 | <a name="TOC-Are-denial-of-service-issues-considered-security-bugs-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 370 | ### Are denial of service issues considered security bugs? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 371 | |
Tom Sepez | e8fb3320 | 2018-11-01 19:31:32 | [diff] [blame] | 372 | No. Denial of Service (DoS) issues are treated as **abuse** or **stability** |
| 373 | issues rather than security vulnerabilities. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 374 | |
Lukasz Anforowicz | a2be8346 | 2024-02-15 20:49:12 | [diff] [blame] | 375 | * If you find a reproducible crash (e.g. a way to hit a `CHECK`), |
| 376 | we encourage you to [report it](https://issues.chromium.org/new). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 377 | * If you find a site that is abusing the user experience (e.g. preventing you |
| 378 | from leaving a site), we encourage you to [report |
Amy Ressler | b35f8e5d | 2024-02-02 23:12:54 | [diff] [blame] | 379 | it](https://issues.chromium.org/new). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 380 | |
| 381 | DoS issues are not considered under the security vulnerability rewards program; |
Varun Khaneja | df1bc00e | 2017-08-10 05:22:40 | [diff] [blame] | 382 | the [severity guidelines](severity-guidelines.md) outline the types of bugs that |
| 383 | are considered security vulnerabilities in more detail. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 384 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 385 | <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] | 386 | ### Why aren't physically-local attacks in Chrome's threat model? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 387 | |
| 388 | People sometimes report that they can compromise Chrome by installing a |
| 389 | malicious DLL in a place where Chrome will load it, by hooking APIs (e.g. [Issue |
| 390 | 130284](https://crbug.com/130284)), or by otherwise altering the configuration |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 391 | of the device. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 392 | |
| 393 | We consider these attacks outside Chrome's threat model, because there is no way |
| 394 | for Chrome (or any application) to defend against a malicious user who has |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 395 | 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] | 396 | privileges of your operating system user account. Such an attacker can modify |
| 397 | executables and DLLs, change environment variables like `PATH`, change |
| 398 | configuration files, read any data your user account owns, email it to |
Tom Sepez | f6b2e78 | 2020-04-06 23:08:55 | [diff] [blame] | 399 | themselves, and so on. Such an attacker has total control over your device, |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 400 | and nothing Chrome can do would provide a serious guarantee of defense. This |
| 401 | problem is not special to Chrome — all applications must trust the |
| 402 | physically-local user. |
| 403 | |
| 404 | There are a few things you can do to mitigate risks from people who have |
| 405 | physical control over **your** computer, in certain circumstances. |
| 406 | |
| 407 | * To stop people from reading your data in cases of device theft or loss, use |
| 408 | full disk encryption (FDE). FDE is a standard feature of most operating |
| 409 | systems, including Windows Vista and later, Mac OS X Lion and later, and |
| 410 | some distributions of Linux. (Some older versions of Mac OS X had partial |
| 411 | disk encryption: they could encrypt the user’s home folder, which contains |
| 412 | the bulk of a user’s sensitive data.) Some FDE systems allow you to use |
| 413 | multiple sources of key material, such as the combination of both a |
| 414 | password and a key file on a USB token. When available, you should use |
| 415 | multiple sources of key material to achieve the strongest defense. Chrome |
| 416 | OS encrypts users’ home directories. |
| 417 | * If you share your computer with other people, take advantage of your |
| 418 | operating system’s ability to manage multiple login accounts, and use a |
| 419 | distinct account for each person. For guests, Chrome OS has a built-in |
| 420 | Guest account for this purpose. |
| 421 | * Take advantage of your operating system’s screen lock feature. |
| 422 | * You can reduce the amount of information (including credentials like |
| 423 | cookies and passwords) that Chrome will store locally by using Chrome's |
| 424 | Content Settings (chrome://settings/content) and turning off the form |
| 425 | auto-fill and password storage features |
| 426 | ([chrome://settings/search#password](chrome://settings/search#password)). |
| 427 | |
| 428 | There is almost nothing you can do to mitigate risks when using a **public** |
| 429 | computer. |
| 430 | |
| 431 | * Assume everything you do on a public computer will become, well, public. |
| 432 | You have no control over the operating system or other software on the |
| 433 | machine, and there is no reason to trust the integrity of it. |
Eric Lawrence | 29ca272 | 2018-02-22 19:04:05 | [diff] [blame] | 434 | * If you must use such a computer, use Incognito mode and close all Incognito |
| 435 | windows when you are done browsing to limit the amount of data you leave |
| 436 | behind. Note that Incognito mode **provides no protection** if the system has |
| 437 | already been compromised as described above. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 438 | |
| 439 | <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] | 440 | ### Why aren't compromised/infected machines in Chrome's threat model? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 441 | |
Tom Sepez | 279d9f4 | 2020-11-30 21:58:58 | [diff] [blame] | 442 | Although the attacker may now be remote, the consequences are essentially the |
| 443 | same as with physically-local attacks. The attacker's code, when it runs as |
| 444 | your user account on your machine, can do anything you can do. (See also |
| 445 | [Microsoft's Ten Immutable Laws Of |
Eric Lawrence | 5e1a9c71 | 2018-09-12 20:55:19 | [diff] [blame] | 446 | 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] | 447 | |
Tom Sepez | 279d9f4 | 2020-11-30 21:58:58 | [diff] [blame] | 448 | Other cases covered by this section include leaving a debugger port open to |
| 449 | the world, remote shells, and so forth. |
| 450 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 451 | <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] | 452 | ### 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] | 453 | |
Eric Lawrence | 29ca272 | 2018-02-22 19:04:05 | [diff] [blame] | 454 | [No](https://crbug.com/81697). Chrome does not attempt to prevent the user from |
| 455 | knowingly running script against loaded documents, either by entering script in |
| 456 | the Developer Tools console or by typing a JavaScript: URI into the URL bar. |
| 457 | Chrome and other browsers do undertake some efforts to prevent *paste* of script |
| 458 | URLs in the URL bar (to limit |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 459 | [social-engineering](https://blogs.msdn.microsoft.com/ieinternals/2011/05/19/socially-engineered-xss-attacks/)) |
| 460 | but users are otherwise free to invoke script against pages using either the URL |
| 461 | bar or the DevTools console. |
| 462 | |
Tom Sepez | 5b70048 | 2020-04-06 20:07:21 | [diff] [blame] | 463 | <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] | 464 | ### 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] | 465 | |
| 466 | No. Chromium allows users to create bookmarks to JavaScript URLs that will run |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 467 | on the currently-loaded page when the user clicks the bookmark; these are called |
| 468 | [bookmarklets](https://en.wikipedia.org/wiki/Bookmarklet). |
| 469 | |
Eric Lawrence | 2de6aaa | 2023-04-13 17:06:55 | [diff] [blame] | 470 | Similarly, the Home button may be configured to invoke a JavaScript URL when clicked. |
| 471 | |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 472 | <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] | 473 | ### Does executing JavaScript in a PDF file mean there's an XSS vulnerability? |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 474 | |
| 475 | No. PDF files have the ability to run JavaScript, usually to facilitate field |
| 476 | validation during form fill-out. Note that the set of bindings provided to |
Tom Sepez | 72119c3c | 2022-12-13 18:48:56 | [diff] [blame] | 477 | the PDF are more limited than those provided by the DOM to HTML documents, nor |
| 478 | do PDFs get any ambient authority based upon the domain from which they are |
| 479 | served (e.g. no document.cookie). |
Tom Sepez | feca2de | 2020-04-01 22:58:29 | [diff] [blame] | 480 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 481 | <a name="TOC-Are-PDF-files-static-content-in-Chromium-"></a> |
| 482 | ### Are PDF files static content in Chromium? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 483 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 484 | No. PDF files have some powerful capabilities including invoking printing or |
| 485 | posting form data. To mitigate abuse of these capabiliies, such as beaconing |
| 486 | upon document open, we require interaction with the document (a "user gesture") |
| 487 | before allowing their use. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 488 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 489 | <a name="TOC-What-about-URL-spoofs-using-Internationalized-Domain-Names-IDN-"></a> |
| 490 | ### What about URL spoofs using Internationalized Domain Names (IDN)? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 491 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 492 | We try to balance the needs of our international userbase while protecting users |
| 493 | against confusable homograph attacks. Despite this, there are a list of known |
| 494 | IDN display issues we are still working on. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 495 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 496 | * Please see [this document](https://docs.google.com/document/d/1_xJz3J9kkAPwk3pma6K3X12SyPTyyaJDSCxTfF8Y5sU) |
| 497 | for a list of known issues and how we handle them. |
| 498 | * [This document](https://chromium.googlesource.com/chromium/src/+/main/docs/idn.md) |
| 499 | describes Chrome's IDN policy in detail. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 500 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 501 | <a name="TOC-Chrome-silently-syncs-extensions-across-devices.-Is-this-a-security-vulnerability-"></a> |
| 502 | ### Chrome silently syncs extensions across devices. Is this a security vulnerability? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 503 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 504 | 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] | 505 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 506 | <a name="TOC-Why-arent-null-pointer-dereferences-considered-security-bugs-"></a> |
| 507 | ### Why aren't null pointer dereferences considered security bugs? |
Chris Palmer | 8d95482a | 2019-08-28 22:48:45 | [diff] [blame] | 508 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 509 | Null pointer dereferences with consistent, small, fixed offsets are not considered |
| 510 | 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] | 511 | 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] | 512 | offset is controllable, it is considered a security bug. |
Chris Palmer | 8d95482a | 2019-08-28 22:48:45 | [diff] [blame] | 513 | |
Daniel Cheng | 78780d2 | 2024-01-06 06:47:43 | [diff] [blame] | 514 | All supported Chrome platforms do not allow mapping memory in at least the first |
| 515 | 32KB of address space: |
| 516 | |
| 517 | - Windows: Windows 8 and later disable mapping the first 64k of address space; |
| 518 | see page 33 of [Exploit Mitigation Improvements in Windows |
| 519 | 8][windows-null-page-mapping] [[archived]][windows-null-page-mapping-archived]. |
| 520 | - Mac and iOS: by default, the linker reserves the first 4GB of address space |
| 521 | with the `__PAGEZERO` segment for 64-bit binaries. |
| 522 | - Linux: the default `mmap_min_addr` value for supported distributions is at |
| 523 | least 64KB. |
| 524 | - Android: [CTS][android-mmap_min_addr] enforces that `mmap_min_addr` is set to |
| 525 | exactly 32KB. |
| 526 | - ChromeOS: the [ChromeOS kernels][chromeos-mmap_min_addr] set the default |
| 527 | `mmap_min_addr` value to at least 32KB. |
| 528 | - Fuchsia: the [userspace base address][fuchsia-min-base-address] begins at 2MB; |
| 529 | this is configured per-platform but set to the same value on all platforms. |
| 530 | |
| 531 | [windows-null-page-mapping]: https://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Exploit_Mitigation_Slides.pdf |
| 532 | [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 |
| 533 | [android-mmap_min_addr]: https://android.googlesource.com/platform/cts/+/496152a250d10e629d31ac90b2e828ad77b8d70a/tests/tests/security/src/android/security/cts/KernelSettingsTest.java#43 |
| 534 | [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 |
| 535 | [fuchsia-min-base-address]: https://cs.opensource.google/fuchsia/fuchsia/+/main:zircon/kernel/arch/arm64/include/arch/kernel_aspace.h;l=20;drc=eeceea01eee2615de74b1339bcf6e6c2c6f72769 |
| 536 | |
Alex Gough | 2d9974c | 2023-04-11 20:47:57 | [diff] [blame] | 537 | <a name="TOC-Indexing-a-container-out-of-bounds-hits-a-libcpp-verbose-abort--is-this-a-security-bug-"></a> |
| 538 | ### Indexing a container out of bounds hits a __libcpp_verbose_abort, is this a security bug? |
| 539 | |
| 540 | `std::vector` and other containers are now protected by libc++ hardening on all |
| 541 | platforms [crbug.com/1335422](https://crbug.com/1335422). Indexing these |
| 542 | containers out of bounds is now a safe crash - if a proof-of-concept reliably |
| 543 | causes a crash in production builds we consider these to be functional rather than |
| 544 | security issues. |
| 545 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 546 | <a name="TOC-Are-stack-overflows-considered-security-bugs-"></a> |
| 547 | ### Are stack overflows considered security bugs? |
| 548 | |
| 549 | No. Guard pages mean that stack overflows are considered unexploitable, and |
| 550 | are regarded as [denial of service bugs](#TOC-Are-denial-of-service-issues-considered-security-bugs-). |
| 551 | The only exception is if an attacker can jump over the guard pages allocated by |
| 552 | the operating system and avoid accessing them, e.g.: |
| 553 | |
| 554 | * A frame with a very large stack allocation. |
| 555 | * C variable length array with an attacker-controlled size. |
| 556 | * A call to `alloca()` with an attacker-controlled size. |
| 557 | |
| 558 | <a name="TOC-Are-enterprise-admins-considered-privileged-"></a> |
| 559 | ### Are enterprise admins considered privileged? |
| 560 | |
| 561 | Chrome [can't guard against local |
| 562 | attacks](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-). |
| 563 | Enterprise administrators often have full control over the device. Does Chrome |
| 564 | assume that enterprise administrators are as privileged and powerful as other |
| 565 | local users? It depends: |
| 566 | |
| 567 | * On a fully managed machine, for example a [domain-joined Windows |
| 568 | machine](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/join-a-computer-to-a-domain), |
| 569 | a device managed via a Mobile Device Management product, or a device with |
| 570 | Chrome managed via machine-level [Chrome Browser Cloud |
| 571 | Management](https://support.google.com/chrome/?p=cloud_management), |
| 572 | the administrator effectively has privileges to view and mutate any state on |
| 573 | the device. Chrome [policy implementations](../enterprise/add_new_policy.md) |
| 574 | should still guide enterprise admins to the most user-respectful defaults |
| 575 | and policy description text should clearly describe the nature of the |
| 576 | capabilities and the user impact of them being granted. |
| 577 | * On an unmanaged machine, Chrome profiles [can be managed via cloud |
| 578 | policy](https://support.google.com/chrome/?p=manage_profiles) |
| 579 | if users sign into Chrome using a managed account. These policies are called |
| 580 | *user policies*. In this scenario, the Chrome enterprise administrator should |
| 581 | have privileges only to *view and mutate state within the profile that they |
| 582 | administer*. Any access outside that profile requires end-user consent. |
| 583 | |
| 584 | Chrome administrators can force-install Chrome extensions without permissions |
| 585 | prompts, so the same restrictions must apply to the Chrome extension APIs. |
| 586 | |
| 587 | Chrome has a long history of policy support with many hundreds of policies. We |
| 588 | recognize that there may exist policies or policy combinations that can provide |
| 589 | capabilities outside of the guidance provided here. In cases of clear violation |
| 590 | of user expectations, we will attempt to remedy these policies and we will apply |
| 591 | the guidance laid out in this document to any newly added policies. |
| 592 | |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 593 | See the [Web Platform Security |
Chris Thompson | 1f8b0006 | 2023-05-31 00:38:49 | [diff] [blame] | 594 | 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] | 595 | for more information on how enterprise policies should interact with Web |
| 596 | Platform APIs. |
| 597 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 598 | <a name="TOC-Can-I-use-EMET-to-help-protect-Chrome-against-attack-on-Microsoft-Windows-"></a> |
| 599 | ### Can I use EMET to help protect Chrome against attack on Microsoft Windows? |
| 600 | |
| 601 | There are [known compatibility |
| 602 | problems](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/chromium-and-emet) |
| 603 | between Microsoft's EMET anti-exploit toolkit and some versions of Chrome. These |
| 604 | can prevent Chrome from running in some configurations. Moreover, the Chrome |
| 605 | security team does not recommend the use of EMET with Chrome because its most |
| 606 | important security benefits are redundant with or superseded by built-in attack |
| 607 | mitigations within the browser. For users, the very marginal security benefit is |
| 608 | not usually a good trade-off for the compatibility issues and performance |
| 609 | degradation the toolkit can cause. |
| 610 | |
| 611 | ## Certificates & Connection Indicators |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 612 | |
| 613 | <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] | 614 | ### Where are the security indicators located in the browser window? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 615 | |
| 616 | The topmost portion of the browser window, consisting of the **Omnibox** (or |
| 617 | **Location Bar**), navigation icons, menu icon, and other indicator icons, is |
| 618 | sometimes called the browser **chrome** (not to be confused with the Chrome |
| 619 | Browser itself). Actual security indicators can only appear in this section of |
| 620 | the window. There can be no trustworthy security indicators elsewhere. |
| 621 | |
| 622 | Furthermore, Chrome can only guarantee that it is correctly representing URLs |
| 623 | and their origins at the end of all navigation. Quirks of URL parsing, HTTP |
| 624 | redirection, and so on are not security concerns unless Chrome is |
| 625 | misrepresenting a URL or origin after navigation has completed. |
| 626 | |
| 627 | Browsers present a dilemma to the user since the output is a combination of |
| 628 | information coming from both trustworthy sources (the browser itself) and |
| 629 | untrustworthy sources (the web page), and the untrustworthy sources are allowed |
| 630 | virtually unlimited control over graphical presentation. The only restriction on |
| 631 | the page's presentation is that it is confined to the large rectangular area |
| 632 | directly underneath the chrome, called the **viewport**. Things like hover text |
| 633 | and URL preview(s), shown in the viewport, are entirely under the control of the |
| 634 | web page itself. They have no guaranteed meaning, and function only as the page |
| 635 | desires. This can be even more confusing when pages load content that looks like |
| 636 | chrome. For example, many pages load images of locks, which look similar to the |
| 637 | meaningful HTTPS lock in the Omnibox, but in fact do not convey any meaningful |
| 638 | information about the transport security of that page. |
| 639 | |
| 640 | When the browser needs to show trustworthy information, such as the bubble |
| 641 | 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] | 642 | chrome. This visual detail can't be imitated by the page itself since the page |
| 643 | is confined to the viewport. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 644 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 645 | <a name="TOC-Why-does-Chrome-show-a-lock-even-if-my-HTTPS-connection-is-being-proxied-"></a> |
| 646 | ### 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] | 647 | |
| 648 | Some types of software intercept HTTPS connections. Examples include anti-virus |
| 649 | software, corporate network monitoring tools, and school censorship software. In |
| 650 | order for the interception to work, you need to install a private trust anchor |
| 651 | (root certificate) onto your computer. This may have happened when you installed |
| 652 | your anti-virus software, or when your company's network administrator set up |
| 653 | your computer. If that has occurred, your HTTPS connections can be viewed or |
| 654 | modified by the software. |
| 655 | |
| 656 | Since you have allowed the trust anchor to be installed onto your computer, |
| 657 | Chrome assumes that you have consented to HTTPS interception. Anyone who can add |
| 658 | a trust anchor to your computer can make other changes to your computer, too, |
| 659 | including changing Chrome. (See also [Why aren't physically-local attacks in |
Avi Drissman | 36d4e2e | 2017-07-31 20:54:39 | [diff] [blame] | 660 | 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] | 661 | |
| 662 | <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] | 663 | ### Why can’t I select Proceed Anyway on some HTTPS error screens? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 664 | |
| 665 | A key guarantee of HTTPS is that Chrome can be relatively certain that it is |
| 666 | connecting to the true web server and not an impostor. Some sites request an |
| 667 | even higher degree of protection for their users (i.e. you): they assert to |
| 668 | Chrome (via Strict Transport Security — |
Xiaoyin Liu | b7985e5 | 2017-09-21 18:07:46 | [diff] [blame] | 669 | [HSTS](https://tools.ietf.org/html/rfc6797) — or by other means) that any |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 670 | server authentication error should be fatal, and that Chrome must close the |
| 671 | connection. If you encounter such a fatal error, it is likely that your network |
| 672 | is under attack, or that there is a network misconfiguration that is |
| 673 | indistinguishable from an attack. |
| 674 | |
| 675 | The best thing you can do in this situation is to raise the issue to your |
| 676 | network provider (or corporate IT department). |
| 677 | |
| 678 | Chrome shows non-recoverable HTTPS errors only in cases where the true server |
| 679 | has previously asked for this treatment, and when it can be relatively certain |
| 680 | that the current server is not the true server. |
| 681 | |
| 682 | <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] | 683 | ### How does key pinning interact with local proxies and filters? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 684 | |
| 685 | To enable certificate chain validation, Chrome has access to two stores of trust |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 686 | anchors (i.e., certificates that are empowered as issuers). One trust anchor |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 687 | store is for authenticating public internet servers, and depending on the |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 688 | version of Chrome being used and the platform it is running on, the |
| 689 | [Chrome Root Store](https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store/faq.md#what-is-the-chrome-root-store) |
| 690 | might be in use. The private store contains certificates installed by the user |
| 691 | or the administrator of the client machine. Private intranet servers should |
| 692 | authenticate themselves with certificates issued by a private trust anchor. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 693 | |
| 694 | Chrome’s key pinning feature is a strong form of web site authentication that |
| 695 | requires a web server’s certificate chain not only to be valid and to chain to a |
| 696 | known-good trust anchor, but also that at least one of the public keys in the |
| 697 | certificate chain is known to be valid for the particular site the user is |
| 698 | visiting. This is a good defense against the risk that any trust anchor can |
| 699 | authenticate any web site, even if not intended by the site owner: if an |
| 700 | otherwise-valid chain does not include a known pinned key (“pin”), Chrome will |
| 701 | reject it because it was not issued in accordance with the site operator’s |
| 702 | expectations. |
| 703 | |
| 704 | Chrome does not perform pin validation when the certificate chain chains up to a |
| 705 | private trust anchor. A key result of this policy is that private trust anchors |
| 706 | can be used to proxy (or |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 707 | [MITM](https://en.wikipedia.org/wiki/Man-in-the-middle_attack)) connections, |
| 708 | even to pinned sites. “Data loss prevention” appliances, firewalls, content |
| 709 | filters, and malware can use this feature to defeat the protections of key |
| 710 | pinning. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 711 | |
| 712 | We deem this acceptable because the proxy or MITM can only be effective if the |
| 713 | client machine has already been configured to trust the proxy’s issuing |
| 714 | certificate — that is, the client is already under the control of the person who |
| 715 | controls the proxy (e.g. the enterprise’s IT administrator). If the client does |
| 716 | not trust the private trust anchor, the proxy’s attempt to mediate the |
| 717 | connection will fail as it should. |
| 718 | |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 719 | <a name="TOC-When-is-key-pinning-enabled-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 720 | ### When is key pinning enabled? |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 721 | |
| 722 | Key pinning is enabled for Chrome-branded, non-mobile builds when the local |
| 723 | clock is within ten weeks of the embedded build timestamp. Key pinning is a |
| 724 | useful security measure but it tightly couples client and server configurations |
| 725 | and completely breaks when those configurations are out of sync. In order to |
| 726 | 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] | 727 | 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] | 728 | reasonable timeframe. |
| 729 | |
| 730 | Each of the conditions listed above helps ensure those properties: |
| 731 | Chrome-branded builds are those that Google provides and they all have an |
| 732 | auto-update mechanism that can be used in an emergency. However, auto-update on |
| 733 | mobile devices is significantly less effective thus they are excluded. Even in |
| 734 | cases where auto-update is generally effective, there are still non-trivial |
| 735 | populations of stragglers for various reasons. The ten-week timeout prevents |
| 736 | those stragglers from causing problems for regular, non-emergency changes and |
| 737 | allows stuck users to still, for example, conduct searches and access Chrome's |
| 738 | homepage to hopefully get unstuck. |
| 739 | |
| 740 | In order to determine whether key pinning is active, try loading |
Francois Marier | e1b8e70 | 2023-07-07 05:25:08 | [diff] [blame] | 741 | [https://pinning-test.badssl.com/](https://pinning-test.badssl.com/). If key |
Adam Langley | c078ba8 | 2018-12-17 17:25:46 | [diff] [blame] | 742 | pinning is active the load will _fail_ with a pinning error. |
| 743 | |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 744 | <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] | 745 | ### How does Certificate Transparency interact with local proxies and filters? |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 746 | |
Chris Palmer | 413f3c0 | 2017-08-23 17:47:54 | [diff] [blame] | 747 | Just as [pinning only applies to publicly-trusted trust |
| 748 | anchors](#TOC-How-does-key-pinning-interact-with-local-proxies-and-filters-), |
| 749 | Chrome only evaluates Certificate Transparency (CT) for publicly-trusted trust |
| 750 | anchors. Thus private trust anchors, such as for enterprise middle-boxes and AV |
| 751 | proxies, do not need to be publicly logged in a CT log. |
Chris Palmer | 38d751d00 | 2017-08-23 17:37:35 | [diff] [blame] | 752 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 753 | <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] | 754 | ### Why are some web platform features only available in HTTPS page-loads? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 755 | |
| 756 | The full answer is here: we [Prefer Secure Origins For Powerful New |
| 757 | Features](https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features). |
| 758 | In short, many web platform features give web origins access to sensitive new |
| 759 | sources of information, or significant power over a user's experience with their |
Eric Roman | ed127b67 | 2018-01-23 19:36:38 | [diff] [blame] | 760 | computer/phone/watch/etc., or over their experience with it. We would therefore |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 761 | like to have some basis to believe the origin meets a minimum bar for security, |
| 762 | that the sensitive information is transported over the Internet in an |
Eric Roman | ed127b67 | 2018-01-23 19:36:38 | [diff] [blame] | 763 | authenticated and confidential way, and that users can make meaningful choices |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 764 | to trust or not trust a web origin. |
| 765 | |
| 766 | Note that the reason we require secure origins for WebCrypto is slightly |
| 767 | different: An application that uses WebCrypto is almost certainly using it to |
| 768 | provide some kind of security guarantee (e.g. encrypted instant messages or |
| 769 | email). However, unless the JavaScript was itself transported to the client |
| 770 | securely, it cannot actually provide any guarantee. (After all, a MITM attacker |
| 771 | could have modified the code, if it was not transported securely.) |
| 772 | |
Camille | 0f2a39f | 2022-11-04 10:45:04 | [diff] [blame] | 773 | See the [Web Platform Security |
Chris Thompson | 1f8b0006 | 2023-05-31 00:38:49 | [diff] [blame] | 774 | 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] | 775 | for more information on security guidelines applicable to web platform APIs. |
| 776 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 777 | <a name="TOC-Which-origins-are-secure-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 778 | ### Which origins are "secure"? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 779 | |
| 780 | Secure origins are those that match at least one of the following (scheme, host, |
| 781 | port) patterns: |
| 782 | |
| 783 | * (https, *, *) |
| 784 | * (wss, *, *) |
| 785 | * (*, localhost, *) |
| 786 | * (*, 127/8, *) |
| 787 | * (*, ::1/128, *) |
| 788 | * (file, *, —) |
| 789 | * (chrome-extension, *, —) |
| 790 | |
| 791 | That is, secure origins are those that load resources either from the local |
| 792 | machine (necessarily trusted) or over the network from a |
| 793 | cryptographically-authenticated server. See [Prefer Secure Origins For Powerful |
| 794 | New |
| 795 | Features](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/prefer-secure-origins-for-powerful-new-features) |
| 796 | for more details. |
| 797 | |
| 798 | <a name="TOC-What-s-the-story-with-certificate-revocation-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 799 | ### What's the story with certificate revocation? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 800 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 801 | Chrome's primary mechanism for checking certificate revocation status is |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 802 | [CRLsets](https://dev.chromium.org/Home/chromium-security/crlsets). |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 803 | Additionally, by default, [stapled Online Certificate Status Protocol (OCSP) |
| 804 | responses](https://en.wikipedia.org/wiki/OCSP_stapling) are honored. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 805 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 806 | "Online" certificate revocation status checks using Certificate Revocation |
| 807 | List (CRL) or OCSP URLs included in certificates are disabled by default. This |
| 808 | is because unless a client, like Chrome, refuses to connect to a website if it |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 809 | cannot get a valid response, online checks offer limited security value. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 810 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 811 | Unfortunately, there are many widely-prevalent causes for why a client |
| 812 | might be unable to get a valid certificate revocation status response to |
| 813 | include: |
| 814 | * 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] | 815 | acceptable time limit), |
| 816 | * availability issues (e.g., the OCSP responder is offline), |
| 817 | * invalid responses (e.g., a "stale" or malformed status response), and |
| 818 | * local network attacks misrouting traffic or blocking responses. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 819 | |
Alex Gough | c9ab81fd | 2023-05-15 19:03:14 | [diff] [blame] | 820 | Additional concern with OCSP checks are related to privacy. OCSP |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 821 | requests reveal details of individuals' browsing history to the operator of the |
| 822 | OCSP responder (i.e., a third party). These details can be exposed accidentally |
| 823 | (e.g., via data breach of logs) or intentionally (e.g., via subpoena). Chrome |
| 824 | used to perform revocation checks for Extended Validation certificates, but that |
| 825 | 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] | 826 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 827 | For more discussion on challenges with certificate revocation status checking, |
| 828 | explained by Adam Langley, see [https://www.imperialviolet.org/2014/04/29/revocationagain.html](https://www.imperialviolet.org/2014/04/29/revocationagain.html) |
| 829 | and [https://www.imperialviolet.org/2014/04/19/revchecking.html](https://www.imperialviolet.org/2014/04/19/revchecking.html). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 830 | |
Ryan Dickson | bbcdf3d | 2022-11-16 19:43:51 | [diff] [blame] | 831 | The following enterprise policies can be used to change the default revocation |
| 832 | checking behavior in Chrome, though these may be removed in the future: |
| 833 | * [enable soft-fail OCSP](https://chromeenterprise.google/policies/#EnableOnlineRevocationChecks) |
| 834 | * [hard-fail for local trust anchors](https://chromeenterprise.google/policies/#RequireOnlineRevocationChecksForLocalAnchors). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 835 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 836 | ## Passwords & Local Data |
| 837 | |
| 838 | <a name="TOC-What-about-unmasking-of-passwords-with-the-developer-tools-"></a> |
| 839 | ### What about unmasking of passwords with the developer tools? |
| 840 | |
| 841 | One of the most frequent reports we receive is password disclosure using the |
| 842 | Inspect Element feature (see [Issue 126398](https://crbug.com/126398) for an |
| 843 | example). People reason that "If I can see the password, it must be a bug." |
| 844 | However, this is just one of the [physically-local attacks described in the |
| 845 | previous |
| 846 | section](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-), |
| 847 | and all of those points apply here as well. |
| 848 | |
| 849 | The reason the password is masked is only to prevent disclosure via |
| 850 | "shoulder-surfing" (i.e. the passive viewing of your screen by nearby persons), |
| 851 | not because it is a secret unknown to the browser. The browser knows the |
| 852 | password at many layers, including JavaScript, developer tools, process memory, |
| 853 | and so on. When you are physically local to the computer, and only when you are |
| 854 | physically local to the computer, there are, and always will be, tools for |
| 855 | extracting the password from any of these places. |
| 856 | |
| 857 | <a name="TOC-Is-Chrome-s-support-for-userinfo-in-HTTP-URLs-e.g.-http:-user:password-example.com-considered-a-vulnerability-"></a> |
| 858 | ### Is Chrome's support for userinfo in HTTP URLs (e.g. http://user:[email protected]) considered a vulnerability? |
| 859 | |
| 860 | [Not at this time](https://crbug.com/626951). Chrome supports HTTP and HTTPS |
| 861 | URIs with username and password information embedded within them for |
| 862 | compatibility with sites that require this feature. Notably, Chrome will |
| 863 | suppress display of the username and password information after navigation in |
| 864 | the URL box to limit the effectiveness of spoofing attacks that may try to |
| 865 | mislead the user. For instance, navigating to |
| 866 | `http://[email protected]` will show an address of |
| 867 | `http://evil.example.com` after the page loads. |
| 868 | |
Tom Sepez | 83fd1f61 | 2022-07-18 21:21:27 | [diff] [blame] | 869 | Note: We often receive reports calling this an "open redirect". However, it has |
| 870 | nothing to do with redirection; rather the format of URLs is complex and the |
| 871 | userinfo may be misread as a host. |
| 872 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 873 | <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] | 874 | ### Why does the Password Manager ignore `autocomplete='off'` for password fields? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 875 | |
| 876 | Ignoring `autocomplete='off'` for password fields allows the password manager to |
| 877 | give more power to users to manage their credentials on websites. It is the |
| 878 | security team's view that this is very important for user security by allowing |
| 879 | users to have unique and more complex passwords for websites. As it was |
| 880 | originally implemented, autocomplete='off' for password fields took control away |
| 881 | from the user and gave control to the web site developer, which was also a |
| 882 | violation of the [priority of |
Adam Barth | 3a3bfef | 2021-10-06 02:36:44 | [diff] [blame] | 883 | constituencies](https://www.schemehostport.com/2011/10/priority-of-constituencies.html). |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 884 | For a longer discussion on this, see the [mailing list |
| 885 | announcement](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/zhhj7hCip5c). |
| 886 | |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 887 | <a name="TOC-Signout-of-Chrome"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 888 | ### Signing out of Chrome does not delete previously-synced data? |
Eric Lawrence | 122e8688 | 2017-12-07 22:53:05 | [diff] [blame] | 889 | |
| 890 | If you have signed into Chrome and subsequently sign out of Chrome, previously |
| 891 | saved passwords and other data are not deleted from your device unless you |
| 892 | select that option when signing out of Chrome. |
| 893 | |
| 894 | If you change your Google password, synced data will no longer be updated in |
| 895 | Chrome instances until you provide the new password to Chrome on each device |
| 896 | configured to sync. However, previously synced data [remains available](https://crbug.com/792967) |
| 897 | on each previously-syncing device unless manually removed. |
| 898 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 899 | <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] | 900 | ### 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] | 901 | |
| 902 | In its default mode, Chrome Sync uses your Google password to protect all the |
| 903 | other passwords in the Chrome Password Manager. |
| 904 | |
| 905 | In general, it is a bad idea to store the credential that protects an asset in |
| 906 | the same place as the asset itself. An attacker who could temporarily compromise |
| 907 | the Chrome Password Manager could, by stealing your Google password, obtain |
| 908 | continuing access to all your passwords. Imagine you store your valuables in a |
| 909 | safe, and you accidentally forget to close the safe. If a thief comes along, |
| 910 | they might steal all of your valuables. That’s bad, but imagine if you had also |
| 911 | left the combination to the safe inside as well. Now the bad guy has access to |
| 912 | all of your valuables and all of your future valuables, too. The password |
| 913 | manager is similar, except you probably would not even know if a bad guy |
| 914 | accessed it. |
| 915 | |
| 916 | To prevent this type of attack, Chrome Password Manager does not save the Google |
| 917 | password for the account you sync with Chrome. If you have multiple Google |
| 918 | accounts, the Chrome Password Manager will save the passwords for accounts other |
| 919 | than the one you are syncing with. |
| 920 | |
| 921 | <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] | 922 | ### Does the Password Manager store my passwords encrypted on disk? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 923 | |
| 924 | Chrome generally tries to use the operating system's user storage mechanism |
| 925 | wherever possible and stores them encrypted on disk, but it is platform |
| 926 | specific: |
| 927 | |
| 928 | * On Windows, Chrome uses the [Data Protection API |
| 929 | (DPAPI)](https://msdn.microsoft.com/en-us/library/ms995355.aspx) to bind |
| 930 | your passwords to your user account and store them on disk encrypted with |
| 931 | a key only accessible to processes running as the same logged on user. |
Viktor Semeniuk | 3720fc4 | 2024-04-03 09:33:52 | [diff] [blame^] | 932 | * On macOS and iOS, Chrome previously stored credentials directly in the user's |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 933 | Keychain, but for technical reasons, it has switched to storing the |
| 934 | credentials in "Login Data" in the Chrome users profile directory, but |
| 935 | 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^] | 936 | 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] | 937 | * On Linux, Chrome previously stored credentials directly in the user's |
Tom Anderson | 761687a | 2023-06-14 17:27:39 | [diff] [blame] | 938 | Gnome Secret Service or KWallet, but for technical reasons, it has switched to |
Christos Froussios | 2a02cc5 | 2019-07-30 07:04:46 | [diff] [blame] | 939 | storing the credentials in "Login Data" in the Chrome user's profile directory, |
| 940 | 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] | 941 | Secret Service or KWallet. If there is no available Secret Service or KWallet, |
| 942 | the data is not encrypted when stored. |
Viktor Semeniuk | 3720fc4 | 2024-04-03 09:33:52 | [diff] [blame^] | 943 | * On Android, Chrome doesn't store in the profile anymore, instead it uses Google |
| 944 | Play Services to access passwords stored on a device. |
| 945 | * On ChromeOS passwords are only obfuscated since all profile data is encrypted |
| 946 | by the OS. |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 947 | |
Adrian Taylor | ae854525 | 2021-05-27 17:16:51 | [diff] [blame] | 948 | <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] | 949 | ### 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] | 950 | |
| 951 | No. If an attacker has control of your login on your device, they can get to |
| 952 | your passwords by inspecting Chrome disk files or memory. (See |
| 953 | [why aren't physically-local attacks in Chrome's threat |
| 954 | model](#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model-)). |
| 955 | |
| 956 | On some platforms we ask for a password before revealing stored passwords, |
| 957 | but this is not considered a robust defense. It’s historically to stop |
| 958 | users inadvertently revealing their passwords on screen, for example if |
| 959 | they’re screen sharing. We don’t do this on all platforms because we consider |
| 960 | such risks greater on some than on others. |
| 961 | |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 962 | ## Other |
Alex Gough | 8dc4f56 | 2022-04-18 22:14:05 | [diff] [blame] | 963 | |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 964 | <a name="TOC-What-is-the-security-story-for-Service-Workers-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 965 | ### What is the security story for Service Workers? |
Chris Palmer | 554c66e | 2017-07-29 01:02:56 | [diff] [blame] | 966 | |
| 967 | See our dedicated [Service Worker Security |
Eric Lawrence [MSFT] | f8057955 | 2021-04-22 18:39:26 | [diff] [blame] | 968 | 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] | 969 | |
Devlin Cronin | 7304fec | 2021-06-02 22:51:26 | [diff] [blame] | 970 | <a name="TOC-What-is-the-security-story-for-Extensions-"></a> |
Alex Gough | e7bcbea | 2022-05-03 21:45:34 | [diff] [blame] | 971 | ### What is the security story for Extensions? |
Devlin Cronin | 7304fec | 2021-06-02 22:51:26 | [diff] [blame] | 972 | |
| 973 | 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] | 974 | |
Adrian Taylor | 1bbbf14 | 2023-08-29 17:41:17 | [diff] [blame] | 975 | <a name="TOC-What-is-the-security-model-for-Chrome-Custom-Tabs-"></a> |
| 976 | ### What's the security model for Chrome Custom Tabs? |
| 977 | |
| 978 | See our [Chrome Custom Tabs security FAQ](custom-tabs-faq.md). |
| 979 | |
Adrian Taylor | 82a534b | 2023-05-09 19:21:20 | [diff] [blame] | 980 | <a name="TOC-Are-all-Chrome-updates-important--"></a> |
| 981 | ### Are all Chrome updates important? |
| 982 | |
| 983 | Yes - see [our updates FAQ](updates.md). |
| 984 | |
| 985 | <a name="TOC-What-older-Chrome-versions-are-supported--"></a> |
| 986 | ### What older Chrome versions are supported? |
| 987 | |
| 988 | We always recommend being on the most recent Chrome stable version - see |
| 989 | [our updates FAQ](updates.md). |
| 990 | |
Adrian Taylor | d57a4c6 | 2022-11-10 10:27:50 | [diff] [blame] | 991 | <a name="TOC-Im-making-a-Chromium-based-browser-how-should-I-secure-it-"></a> |
| 992 | ### I'm making a Chromium-based browser. How should I secure it? |
| 993 | |
| 994 | If you want to make a browser based on Chromium, you should stay up to date |
| 995 | with Chromium's security fixes. There are adversaries who weaponize fixed |
| 996 | Chromium bugs ("n-day vulnerabilities") to target browsers which haven’t yet |
| 997 | absorbed those fixes. |
| 998 | |
| 999 | Decide whether your approach is to stay constantly up to date with Chromium |
| 1000 | releases, or to backport security fixes onto some older version, upgrading |
| 1001 | Chromium versions less frequently. |
| 1002 | |
| 1003 | Backporting security fixes sounds easier than forward-porting features, but in |
| 1004 | our experience, this is false. Chromium releases 400+ security bug fixes per |
| 1005 | year ([example |
| 1006 | query](https://bugs.chromium.org/p/chromium/issues/list?q=type%3DBug-Security%20has%3Arelease%20closed%3Etoday-730%20closed%3Ctoday-365%20allpublic&can=1)). |
| 1007 | Some downstream browsers take risks by backporting only Medium+ severity fixes, |
| 1008 | but that's still over 300 ([example |
| 1009 | 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)). |
| 1010 | Most are trivial cherry-picks; but others require rework and require versatile |
| 1011 | engineers who can make good decisions about any part of a large codebase. |
| 1012 | |
| 1013 | Our recommendation is to stay up-to-date with Chrome's released versions. You |
| 1014 | should aim to release a version of your browser within just a few days of each |
| 1015 | Chrome [stable |
| 1016 | release](https://chromereleases.googleblog.com/search/label/Stable%20updates). |
| 1017 | If your browser is sufficiently widely-used, you can [apply for advance notice |
| 1018 | of fixed vulnerabilities](https://www.chromium.org/Home/chromium-security/) to |
| 1019 | make this a little easier. |
| 1020 | |
| 1021 | Finally, if you choose the backporting approach, please explain the security |
| 1022 | properties to your users. Some fraction of security improvements cannot be |
| 1023 | backported. This can happen for several reasons, for example: because they |
| 1024 | depend upon architectural changes (e.g. breaking API changes); because the |
| 1025 | security improvement is a significant new feature; or because the security |
| 1026 | improvement is the removal of a broken feature. |