-
New Feature
-
Resolution: Fixed
-
Major
-
None
-
-
2.85
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes ").
In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example:
// Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } }
Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead:
node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } }
This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage.
- causes
-
JENKINS-64185 GerritTrigger.setTriggerOnEvents() expects class PluginGerritEvent but received class workflow.cps.DSL$NamedArgsAndClosure
-
- Resolved
-
- is duplicated by
-
JENKINS-47101 Pipeline withCredentials step does not mask step descriptions for variables with the same name as existing system variables
-
- Resolved
-
- relates to
-
JENKINS-47101 Pipeline withCredentials step does not mask step descriptions for variables with the same name as existing system variables
-
- Resolved
-
-
JENKINS-64631 String interpolation warning too broad; should apply to only passwords not usernames as well.
-
- Resolved
-
-
JENKINS-67769 Surpassing secrets interpolation warning in writeFile
-
- Resolved
-
[JENKINS-63254] Warn against using secrets in groovy strings
Description |
Original:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' echo "username is $USERNAME" } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
New:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
Description |
Original:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
New:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo s28892cr3t s28892cr3t [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo **** **** [Pipeline] echo username is $USERNAME [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
Description |
Original:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo s28892cr3t s28892cr3t [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo **** **** [Pipeline] echo username is $USERNAME [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
New:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo s28892cr3t s28892cr3t [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo **** **** [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
Description |
Original:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo s28892cr3t s28892cr3t [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} output: {code:bash} [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USERNAME or $PASSWORD [Pipeline] { [Pipeline] sh + echo **** **** [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
New:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
Link |
New:
This issue relates to |
Description |
Original:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
New:
It is possible to accidentally leak secrets, such as credentials, when using groovy strings (i.e. double quotes "). In a groovy string, any secrets in the string will be interpolated by groovy before being processed for further use. This can allow other processes to accidentally expose the secret. For example: {code:groovy} // Terribly obvious example node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh "echo $PASSWORD" } } {code} Any secrets should be used in single quotes so that they are expanded by the shell as an environment variable instead: {code:groovy} node { withCredentials([usernamePassword(credentialsId: 'bobid', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'echo $PASSWORD' } } {code} This behavior is already discouraged against in the credentials-binding docs as well as various places, but it would be Ideal to have some mechanism that warns against this usage. |
Released As | New: 2.85 | |
Resolution | New: Fixed [ 1 ] | |
Status | Original: Open [ 1 ] | New: Fixed but Unreleased [ 10203 ] |
According to https://github.com/jenkinsci/workflow-cps-plugin/blob/master/CHANGELOG.md this nice feature has allegedly already been released? But ticket status is still "Open"?