ad_integration - leaks credentials when in check_mode
Resolves:rhbz#2223764 ad_integration - leaks credentials when in check_mode
This commit is contained in:
parent
a0cc364663
commit
86eefbad8d
127
0001-fix-use-command-stdin-for-password-and-do-not-log-pa.patch
Normal file
127
0001-fix-use-command-stdin-for-password-and-do-not-log-pa.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
From 1931ebccaa146bd6ee8365c664ab62d294adaa31 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rich Megginson <rmeggins@redhat.com>
|
||||||
|
Date: Fri, 18 Aug 2023 12:35:44 -0600
|
||||||
|
Subject: [PATCH] fix: use command stdin for password, and do not log password
|
||||||
|
|
||||||
|
Cause: The code was constructing the realm join command to be passed
|
||||||
|
via the shell module, including piping the password into the command,
|
||||||
|
and was showing the command, including the password, when using
|
||||||
|
check mode.
|
||||||
|
|
||||||
|
Consequence: The clear text password was available in the logs when
|
||||||
|
using check mode.
|
||||||
|
|
||||||
|
Fix: Use command with stdin for the password instead of shell. The
|
||||||
|
password is not part of the command. command with stdin is more
|
||||||
|
secure than using shell. The debug output has been changed to
|
||||||
|
show the command with the `ad_integration_join_parameters` removed,
|
||||||
|
because we cannot know if those parameters contain data which should
|
||||||
|
not be logged. Those parameters will still be passed to the actual
|
||||||
|
realm join command.
|
||||||
|
|
||||||
|
Result: The password is not logged. The role is more secure.
|
||||||
|
|
||||||
|
Signed-off-by: Rich Megginson <rmeggins@redhat.com>
|
||||||
|
---
|
||||||
|
tasks/main.yml | 57 ++++++++++++++++++++++++++++----------------------
|
||||||
|
1 file changed, 32 insertions(+), 25 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tasks/main.yml b/tasks/main.yml
|
||||||
|
index fe2602e..265c6fe 100644
|
||||||
|
--- a/tasks/main.yml
|
||||||
|
+++ b/tasks/main.yml
|
||||||
|
@@ -3,8 +3,7 @@
|
||||||
|
- name: Ensure that mandatory variable ad_integration_realm is available
|
||||||
|
fail:
|
||||||
|
msg: Variable ad_integration_realm must be provided!
|
||||||
|
- when:
|
||||||
|
- - not ad_integration_realm
|
||||||
|
+ when: not ad_integration_realm
|
||||||
|
|
||||||
|
- name: Assume managing timesync if timesource is set
|
||||||
|
set_fact:
|
||||||
|
@@ -26,8 +25,7 @@
|
||||||
|
- name: Assume managing crypto policies if allow_rc4_crypto is set
|
||||||
|
set_fact:
|
||||||
|
ad_integration_manage_crypto_policies: true
|
||||||
|
- when:
|
||||||
|
- - ad_integration_allow_rc4_crypto | bool
|
||||||
|
+ when: ad_integration_allow_rc4_crypto | bool
|
||||||
|
|
||||||
|
- name: Ensure manage_crypt_policies is set with crypto_allow_rc4
|
||||||
|
fail:
|
||||||
|
@@ -141,41 +139,50 @@
|
||||||
|
|
||||||
|
- name: Build Command - Join to a specific Domain Controller
|
||||||
|
set_fact:
|
||||||
|
- __ad_integration_join_command: |
|
||||||
|
- set -euo pipefail
|
||||||
|
- echo {{ ad_integration_password | quote }} | realm join -U \
|
||||||
|
- {{ ad_integration_user | quote }} --membership-software \
|
||||||
|
- {{ ad_integration_membership_software | quote }} \
|
||||||
|
- {{ ad_integration_join_parameters }} \
|
||||||
|
- {{ ad_integration_join_to_dc | quote }}
|
||||||
|
+ __ad_integration_join_command: >-
|
||||||
|
+ realm join -U {{ ad_integration_user | quote }} --membership-software
|
||||||
|
+ {{ ad_integration_membership_software | quote }}
|
||||||
|
+ {{ ad_integration_join_parameters }}
|
||||||
|
+ {{ ad_integration_join_to_dc | quote }}
|
||||||
|
+ __ad_integration_debug_command: >-
|
||||||
|
+ realm join -U {{ ad_integration_user | quote }} --membership-software
|
||||||
|
+ {{ ad_integration_membership_software | quote }}
|
||||||
|
+ {{ ad_integration_join_to_dc | quote }}
|
||||||
|
no_log: true
|
||||||
|
- when:
|
||||||
|
- - ad_integration_join_to_dc is not none
|
||||||
|
+ when: ad_integration_join_to_dc is not none
|
||||||
|
|
||||||
|
- name: Build Join Command - Perform discovery-based realm join operation
|
||||||
|
set_fact:
|
||||||
|
- __ad_integration_join_command: |
|
||||||
|
- set -euo pipefail
|
||||||
|
- echo {{ ad_integration_password | quote }} | realm join -U \
|
||||||
|
- {{ ad_integration_user | quote }} --membership-software \
|
||||||
|
- {{ ad_integration_membership_software | quote }} \
|
||||||
|
- {{ ad_integration_join_parameters }} \
|
||||||
|
- {{ ad_integration_realm | quote }}
|
||||||
|
+ __ad_integration_join_command: >-
|
||||||
|
+ realm join -U {{ ad_integration_user | quote }} --membership-software
|
||||||
|
+ {{ ad_integration_membership_software | quote }}
|
||||||
|
+ {{ ad_integration_join_parameters }}
|
||||||
|
+ {{ ad_integration_realm | quote }}
|
||||||
|
+ __ad_integration_debug_command: >-
|
||||||
|
+ realm join -U {{ ad_integration_user | quote }} --membership-software
|
||||||
|
+ {{ ad_integration_membership_software | quote }}
|
||||||
|
+ {{ ad_integration_realm | quote }}
|
||||||
|
no_log: true
|
||||||
|
- when:
|
||||||
|
- - ad_integration_join_to_dc is none
|
||||||
|
+ when: ad_integration_join_to_dc is none
|
||||||
|
|
||||||
|
- name: Show the join command for debug
|
||||||
|
debug:
|
||||||
|
- msg: "Would run: '{{ __ad_integration_join_command }}'"
|
||||||
|
+ msg:
|
||||||
|
+ - >-
|
||||||
|
+ Would run the following command. Note that
|
||||||
|
+ ad_integration_join_parameters have been removed for security purposes,
|
||||||
|
+ the role will pass them to the actual realm join command when running
|
||||||
|
+ without check mode.
|
||||||
|
+ - "{{ __ad_integration_debug_command }}"
|
||||||
|
when:
|
||||||
|
- ad_integration_join_to_dc == __ad_integration_sample_dc
|
||||||
|
or ad_integration_realm == __ad_integration_sample_realm
|
||||||
|
or ansible_check_mode
|
||||||
|
|
||||||
|
- name: Run realm join command
|
||||||
|
- # noqa command-instead-of-shell
|
||||||
|
- shell: "{{ __ad_integration_join_command }}"
|
||||||
|
+ command: "{{ __ad_integration_join_command }}"
|
||||||
|
+ args:
|
||||||
|
+ stdin: "{{ ad_integration_password }}"
|
||||||
|
no_log: true
|
||||||
|
when:
|
||||||
|
- ad_integration_join_to_dc != __ad_integration_sample_dc
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -34,6 +34,7 @@ Changelog
|
|||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
- [ALL - facts being gathered unnecessarily](https://bugzilla.redhat.com/show_bug.cgi?id=2223032)
|
- [ALL - facts being gathered unnecessarily](https://bugzilla.redhat.com/show_bug.cgi?id=2223032)
|
||||||
|
- [ad_integration - leaks credentials when in check_mode](https://bugzilla.redhat.com/show_bug.cgi?id=2223764)
|
||||||
- [certificate - does not re-issue after updating key_size](https://bugzilla.redhat.com/show_bug.cgi?id=2224138)
|
- [certificate - does not re-issue after updating key_size](https://bugzilla.redhat.com/show_bug.cgi?id=2224138)
|
||||||
- [firewall - fix: reload on resetting to defaults](https://bugzilla.redhat.com/show_bug.cgi?id=2223764)
|
- [firewall - fix: reload on resetting to defaults](https://bugzilla.redhat.com/show_bug.cgi?id=2223764)
|
||||||
- [firewall - Check mode fails with replacing previous rules](https://issues.redhat.com/browse/RHEL-898)
|
- [firewall - Check mode fails with replacing previous rules](https://issues.redhat.com/browse/RHEL-898)
|
||||||
|
@ -217,6 +217,8 @@ Source1004: vendoring-build.inc
|
|||||||
|
|
||||||
Source995: CHANGELOG.md
|
Source995: CHANGELOG.md
|
||||||
|
|
||||||
|
Patch2201: 0001-fix-use-command-stdin-for-password-and-do-not-log-pa.patch
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
%if %{with html}
|
%if %{with html}
|
||||||
@ -329,6 +331,10 @@ if [ "$rolesdir" != "$realrolesdir" ]; then
|
|||||||
fi
|
fi
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
cd %{rolename22}
|
||||||
|
%patch2201 -p1
|
||||||
|
cd ..
|
||||||
|
|
||||||
# vendoring build steps, if any
|
# vendoring build steps, if any
|
||||||
%include %{SOURCE1004}
|
%include %{SOURCE1004}
|
||||||
|
|
||||||
@ -667,6 +673,7 @@ find %{buildroot}%{ansible_roles_dir} -mindepth 1 -maxdepth 1 | \
|
|||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Aug 15 2023 Rich Megginson <rmeggins@redhat.com> - 1.22.0-1
|
* Tue Aug 15 2023 Rich Megginson <rmeggins@redhat.com> - 1.22.0-1
|
||||||
|
- Resolves:rhbz#2223764 : ad_integration - leaks credentials when in check_mode
|
||||||
- Resolves:rhbz#2232241 : kdump - "Write new authorized_keys if needed" task idempotency issues
|
- Resolves:rhbz#2232241 : kdump - "Write new authorized_keys if needed" task idempotency issues
|
||||||
- Resolves:rhbz#2232231 : kdump - system role fails if kdump_ssh_user doesn't have a .ssh/authorized_keys file in home directory
|
- Resolves:rhbz#2232231 : kdump - system role fails if kdump_ssh_user doesn't have a .ssh/authorized_keys file in home directory
|
||||||
- Resolves RHEL-1397 : kdump - fix: ensure .ssh directory exists for kdump_ssh_user on kdump_ssh_server
|
- Resolves RHEL-1397 : kdump - fix: ensure .ssh directory exists for kdump_ssh_user on kdump_ssh_server
|
||||||
|
Loading…
Reference in New Issue
Block a user