GitHub Advisoryadvisory · RubyGems
GHSA-p4x4-rw2p-8j8m Cross-site Scripting in Sanitize
HIGH
Official page ↗
- Aliases
- CVE-2020-4054
- Ecosystem
- RubyGems
- Packages
- sanitize
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Weaknesses
- CWE-79
- Reviewed
- 2020-06-16
Affected packages
• RubyGems sanitize: >= 3.0.0, < 5.2.1 → fixed in 5.2.1
Description
When HTML is sanitized using Sanitize's "relaxed" config or a custom config that allows certain elements, some content in a `` or `` element may not be sanitized correctly even if `math` and `svg` are not in the allowlist.
You are likely to be vulnerable to this issue if you use Sanitize's relaxed config or a custom config that allows one or more of the following HTML elements:
• `iframe`
• `math`
• `noembed`
• `noframes`
• `noscript`
• `plaintext`
• `script`
• `style`
• `svg`
• `xmp`
Impact
Using carefully crafted input, an attacker may be able to sneak arbitrary HTML through Sanitize, potentially resulting in XSS (cross-site scripting) or other undesired behavior when that HTML is rendered in a browser.
Releases
This problem has been fixed in Sanitize 5.2.1.
Workarounds
If upgrading is not possible, a workaround is to override the default value of Sanitize's `:remove_contents` config option with the following value, which ensures that the contents of `math` and `svg` elements (among others) are removed entirely when those elements are not in the allowlist:
```ruby
%w[iframe math noembed noframes noscript plaintext script style svg xmp]
```
For example, if you currently use Sanitize's relaxed config, you can create a custom config object that overrides the default value of `:remove_contents` like this:
```ruby
custom_config = Sanitize::Config.merge(
Sanitize::Config::RELAXED,
:remove_contents => %w[iframe math noembed noframes noscript plaintext script style svg xmp]
)
```
You would then pass this custom config to Sanitize when sanitizing HTML.
For more information
If you have any questions or comments about this advisory:
• Open an issue in the Sanitize repo.
• See Sanitize's security policy.
Credits
Many thanks to Michal Bentkowski of Securitum for reporting this bug and helping to verify the fix.
References
• GHSA-p4x4-rw2p-8j8m
• CVE-2020-4054
• https://github.com/rgrove/sanitize/releases/tag/v5.2.1
Related
Alias · CVE (1)
- CVE-2020-4054 In Sanitize (RubyGem sanitize) greater than or equal to 3.0.0 and less than 5.2.1, there is a cross-site scripting vulnerability. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness
References
- https://github.com/rgrove/sanitize/security/advisories/GHSA-p4x4-rw2p-8j8m web
- https://nvd.nist.gov/vuln/detail/CVE-2020-4054 advisory
- https://github.com/rgrove/sanitize/commit/a11498de9e283cd457b35ee252983662f7452aa9 web
- https://github.com/rgrove/sanitize package
- https://github.com/rgrove/sanitize/releases/tag/v5.2.1 web
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/sanitize/CVE-2020-4054.yml web
- https://usn.ubuntu.com/4543-1 web
- https://www.debian.org/security/2020/dsa-4730 web