CVE-2019-6804
Description
Stored XSS in Rundeck Community Edition Job Edit page via unsanitized script file text.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Stored XSS in Rundeck Community Edition Job Edit page via unsanitized script file text.
Vulnerability
A stored cross-site scripting (XSS) vulnerability exists in the Job Edit page of Rundeck Community Edition before version 3.0.13 [1][4]. The issue is located in the workflowStepEditorKO.js and views/execution/_wfitemEdit.gsp files [1]. Specifically, the scriptfileText value, entered by the user when creating or editing a script step, was rendered using text in some places but html via KO bindings in the preview block [4]. This allowed unsanitized HTML or JavaScript to be stored and later executed in the context of another user editing or viewing the job.
Exploitation
An attacker with permissions to create or edit jobs can inject malicious HTML or JavaScript into the script file text field. When an administrator or other user views or edits that job, the injected script is rendered unsafely via the html knockout binding (changed from text in the fix) [4]. The attacker does not need any special network position beyond authenticated access to the Rundeck interface. The steps are: (1) navigate to the Job Edit page, (2) create a new script step, (3) set the script file name or text to include a payload (e.g., ``), (4) save the job. Any subsequent visit to that job’s edit page triggers execution of the payload [3][4].
Impact
Successful exploitation allows the attacker to execute arbitrary JavaScript in the context of the victim’s session in the Rundeck web UI. This can lead to session theft, credential exfiltration, unauthorized job execution, or other actions as the affected user. The attack is stored, meaning the payload persists across sessions and can affect multiple users without further interaction from the attacker beyond creating/modifying the job [3].
Mitigation
Rundeck Community Edition version 3.0.13 contains the fix, released in January 2019 [1][2]. The patch replaces unsafe html knockout bindings with text bindings in the script step preview area, preventing script execution [4]. Users should upgrade to 3.0.13 or later. No workaround is provided in the public references; as of this writing, the vulnerability is not listed on the CISA KEV. Users of later versions (e.g., 4.x) are not affected [2].
AI Insight generated on May 22, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
org.rundeck:rundeckMaven | < 3.0.13 | 3.0.13 |
Affected products
2Patches
2dcc2589f4c5de992e94bba22Merge pull request #4407 from rundeck/issue/4406-stored-xss
2 files changed · +4 −4
rundeckapp/grails-app/assets/javascripts/workflowStepEditorKO.js+3 −3 modified@@ -388,7 +388,7 @@ function ScriptStep(data) { self.argStringAsQuotedWithScriptfile = ko.computed(function () { var isq = self.argsQuoted() ? '"' : ''; return isq - + '<em>' + self.scriptfileText() +'</em> ' + + self.scriptfileText() + ' ' + self.args() + isq; }); @@ -410,7 +410,7 @@ function ScriptStep(data) { self.invocationPreviewHtml = ko.computed(function () { var text = ''; if (self.invocationString() && self.invocationString().indexOf('${scriptfile}') >= 0) { - text += self.invocationString().split('\$\{scriptfile\}').join('<em>' + self.scriptfileText() +'</em>') + ' ' + self.argStringAsQuoted(); + text += self.invocationString().split('\$\{scriptfile\}').join( self.scriptfileText() ) + ' ' + self.argStringAsQuoted(); } else if (self.invocationString()) { text += self.invocationString() + ' ' + self.argStringAsQuotedWithScriptfile(); } else { @@ -527,4 +527,4 @@ function WorkflowStep(data) { }, ignore: ['editor'] }, this); -} \ No newline at end of file +}
rundeckapp/grails-app/views/execution/_wfitemEdit.gsp+1 −1 modified@@ -564,7 +564,7 @@ <div class="col-sm-2 control-label"><g:message code="Workflow.step.script.execution.preview.label" /></div> <div id='interpreterArgsQuotedHelp${rkey}_preview' class="col-sm-10 form-control-static"> - <code>$ <span data-bind="html: invocationPreviewHtml"></span></code> + <code>$ <span data-bind="text: invocationPreviewHtml"></span></code> </div> <g:embedJSON id="scriptStepData_${rkey}" data="${[invocationString: item?.scriptInterpreter?:'',fileExtension: item?.fileExtension?:'',args: item?.argString?:'',argsQuoted: item?.interpreterArgsQuoted?true:false]}"/>
Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
7- www.exploit-db.com/exploits/46251/mitreexploitx_refsource_EXPLOIT-DB
- github.com/advisories/GHSA-4262-wr7p-gpcjghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2019-6804ghsaADVISORY
- docs.rundeck.com/docs/history/version-3.0.13.htmlghsax_refsource_MISCWEB
- github.com/rundeck/rundeck/commit/e992e94bba22d9fca3a669f0d02c85b80a19f848ghsaWEB
- github.com/rundeck/rundeck/issues/4406ghsax_refsource_MISCWEB
- www.exploit-db.com/exploits/46251ghsaWEB
News mentions
0No linked articles in our index yet.