| Summary: | Nitrate is vulnerable to XSS when w3m is not installed | ||
|---|---|---|---|
| Product: | [Other] TCMS | Reporter: | Lukas Vacek <lucas.vacek> |
| Component: | Application | Assignee: | Yuguang Wang <yuwang> |
| Status: | NEW --- | QA Contact: | Nobody <nobody> |
| Severity: | high | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | Devel | CC: | cqi, junzhang, ryang, vchen |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | Bug | |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
Input from fields with TinyMCE widget (TestPlan: Summary, TestCase: Breakdown, Setup, Action, Expected Results) is not sanitized and is rendered as is to the clients. The offending function is: def html2text(value): """ Pipes given HTML string into the text browser W3M, which renders it. Rendered text is grabbed from STDOUT and returned. """ try: cmd = "w3m -dump -T text/html -O ascii" proc = Popen(cmd, shell = True, stdin = PIPE, stdout = PIPE) return proc.communicate(str(value))[0] except OSError: # something bad happened, so just return the input return value An attacker can add an arbitrary javascript to, for example, a TestPlan Summary and the javascript is then executed for everyone viewing the test plan.