Sanitize emoji list when reading from LocalStorage
Fixes #339345 (closed)
This is a fix implemented in https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/1694, and moved here due to #339345 (comment 660818503)
Context / Issue
Emoji maps are cached in the local storage. When showing user the list of available emojis, frontend retrieves the emoji values from the storage, and inject directly into the DOM.
This can potentially lead to cross-site scripting bugs, when
- attacker can control victim's localstorage (physical access or due to another vulnerability), or
- backend fails to sanitize these values, especially in the case of custom emoji names.
What does this MR do?
This MR adds sanitization to the point where emoji maps are generated after retrieving values from the local storage.
An alternative approach would be to sanitize these values when injecting in the DOM. This is not future proof as developer can easily forget to sanitize in any of the future usages as we don't lint against .innerHtml
s at the moment.
Screenshots or Screencasts (strongly suggested)
No visual changes for normal (non-malicious) users
How to setup and validate locally (strongly suggested)
Please follow https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/1694#steps-to-reproduce
Does this MR meet the acceptance criteria?
Conformity
-
I have included changelog trailers, or none are needed. (Does this MR need a changelog?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Availability and Testing
-
I have added/updated tests following the Testing Guide, or it's not needed. (Consider all test levels. See the Test Planning Process.) -
I have tested this MR in all supported browsers, or it's not needed.
Security
Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team