-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Closed
Labels
Description
I've identified a Cross-Site Scripting (XSS) vulnerability in 'dash-core-components'
Vulnerability Details:
- Severity: High/Critical
- Description: There's a risk of malicious script execution when the href of the a tag is controlled by an adversary.
Steps to Reproduce:
In a React.js project:
import { Link } from 'dash-core-components'
<Link href={`javascript:alert(1)`} />
Then the malicious code alert(1) will be executed. Any React.js application using this package may be vulnerable to XSS.
Suggested Fix or Mitigation:
dash/components/dash-core-components/src/components/Link.react.js
Lines 64 to 94 in 000ec18
| render() { | |
| const { | |
| className, | |
| style, | |
| id, | |
| href, | |
| loading_state, | |
| children, | |
| title, | |
| target, | |
| } = this.props; | |
| /* | |
| * ideally, we would use cloneElement however | |
| * that doesn't work with dash's recursive | |
| * renderTree implementation for some reason | |
| */ | |
| return ( | |
| <a | |
| data-dash-is-loading={ | |
| (loading_state && loading_state.is_loading) || undefined | |
| } | |
| id={id} | |
| className={className} | |
| style={style} | |
| href={href} | |
| onClick={e => this.updateLocation(e)} | |
| title={title} | |
| target={target} | |
| > | |
| {isNil(children) ? href : children} | |
| </a> |
It is best practice for a React.js components package to sanitize the href attribute before passing it to an tag. React.js and many popular libraries such as react-router-dom and Next.js also ensure the safety of href attributes. For instance, React.js issues warnings about URLs starting with javascript: and is planning to block these in future versions, as indicated in this pull request.
Please consider validating the href to resolve this vulnerability, thanks!
Coding-with-Adam