-
Bug
-
Resolution: Won't Fix
-
Major
-
None
Problem
A developer can accidentally unmask the credential to the console if they reference it as a variable outside of the withCredentials block in Pipeline.
Examples
The password for testCredentials would be echo to the console without it being masked.
withCredentials([usernamePassword(credentialsId:'testCredentials', passwordVariable:'PASSWORD', usernameVariable:'USER')]) { echo '${password}' // password is masked } echo ${password}' // password is not masked
Even if we enforced that the password variable should only be used inside the withPassword block, it would still be possible to unmask the password with a Pipeline like the following
def nicePasswordBro; withCredentials([usernamePassword(credentialsId:'testCredentials', passwordVariable:'PASSWORD', usernameVariable:'USER')]) { nicePasswordBro = '${password}' echo '${password}' // password is masked } echo nicePasswordBro // password is not masked
Original request
Example pipeline code:
node {
def usernameLocal, passwordLocal
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'simple_creds', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME']]) {
echo "echo step - env: ${env.USERNAME} - password through ${env.PASSWORD}"
sh 'echo "sh step - echo: ${USERNAME} - ${PASSWORD}"'
usernameLocal = env.USERNAME
passwordLocal = env.PASSWORD
echo "echo step (in block) - vars: ${usernameLocal} - ${passwordLocal}"
}
echo "echo step (out of block) - vars: ${usernameLocal} - ${passwordLocal}"
}
Output
[Pipeline] node
Running on master in /var/jenkins_home/workspace/with-credentials
[Pipeline] {
[Pipeline] withCredentials
[Pipeline] {
[Pipeline] echo
echo step - env: **** - password through ****
[Pipeline] sh
[with-credentials] Running shell script
+ echo sh step - echo: **** - ****
sh step - echo: **** - ****
[Pipeline] echo
echo step (in block) - vars: **** - ****
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
echo step (out of block) - vars: myusername - mypassword
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Expectations
I expect that the credentials would still be accessible but would still be masked.