Skip to content

Sanitize emoji list when reading from LocalStorage

Dheeraj Joshi requested to merge djadmin-fix-emoji-local-storage into master

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 .innerHtmls 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

Availability and Testing

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
Edited by Dheeraj Joshi

Merge request reports

Loading