Credentials obfuscation from multiple files
Resolves: RHEL-58096 Signed-off-by: Jan Jansky <jjansky@redhat.com>
This commit is contained in:
		
							parent
							
								
									f395777c55
								
							
						
					
					
						commit
						0700b161b0
					
				
							
								
								
									
										146
									
								
								sos-obfuscate-environment.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								sos-obfuscate-environment.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,146 @@ | |||||||
|  | From 60356d6b1096407ed9cd71cf519ac2a381bedee4 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Pavel Moravec <pmoravec@redhat.com> | ||||||
|  | Date: Fri, 27 Sep 2024 08:30:06 +0200 | ||||||
|  | Subject: [PATCH 1/1] [plugins] Obfuscate http URL credentials | ||||||
|  | 
 | ||||||
|  | HTTP_PROXY or similar env.variables can contain credentials we must | ||||||
|  | scrub. The variables or directly credentials of a http(s) URL can be | ||||||
|  | specified in several places the commit deals with. | ||||||
|  | 
 | ||||||
|  | Futher, update apt plugin to use the new do_paths_httpp_sub method. | ||||||
|  | 
 | ||||||
|  | Resolves: #3789 | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Pavel Moravec <pmoravec@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  sos/report/plugins/__init__.py | 15 +++++++++++++++ | ||||||
|  |  sos/report/plugins/anaconda.py |  9 +++++---- | ||||||
|  |  sos/report/plugins/apt.py      | 12 ++---------- | ||||||
|  |  sos/report/plugins/system.py   |  6 ++++++ | ||||||
|  |  sos/report/plugins/systemd.py  |  7 +++++++ | ||||||
|  |  5 files changed, 35 insertions(+), 14 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
 | ||||||
|  | index f88f0c0d..9b54c68a 100644
 | ||||||
|  | --- a/sos/report/plugins/__init__.py
 | ||||||
|  | +++ b/sos/report/plugins/__init__.py
 | ||||||
|  | @@ -1313,6 +1313,21 @@ class Plugin():
 | ||||||
|  |              replacements = 0 | ||||||
|  |          return replacements | ||||||
|  |   | ||||||
|  | +    def do_paths_http_sub(self, pathspecs):
 | ||||||
|  | +        """ Obfuscate credentials in *_PROXY variables in all files in the
 | ||||||
|  | +        given list. Proxy setting without protocol is ignored, since that
 | ||||||
|  | +        is not recommended setting and obfuscating that one can hit false
 | ||||||
|  | +        positives.
 | ||||||
|  | +
 | ||||||
|  | +        :param pathspecs: A filepath to obfuscate credentials in
 | ||||||
|  | +        :type pathspecs: ``str`` or a ``list`` of strings
 | ||||||
|  | +        """
 | ||||||
|  | +        if isinstance(pathspecs, str):
 | ||||||
|  | +            pathspecs = [pathspecs]
 | ||||||
|  | +        for path in pathspecs:
 | ||||||
|  | +            self.do_path_regex_sub(
 | ||||||
|  | +                path, r"(http(s)?://)\S+:\S+(@.*)", r"\1******:******\3")
 | ||||||
|  | +
 | ||||||
|  |      def do_path_regex_sub(self, pathexp, regexp, subst): | ||||||
|  |          """Apply a regexp substituation to a set of files archived by | ||||||
|  |          sos. The set of files to be substituted is generated by matching | ||||||
|  | diff --git a/sos/report/plugins/anaconda.py b/sos/report/plugins/anaconda.py
 | ||||||
|  | index 78577d3f..77f54d65 100644
 | ||||||
|  | --- a/sos/report/plugins/anaconda.py
 | ||||||
|  | +++ b/sos/report/plugins/anaconda.py
 | ||||||
|  | @@ -24,21 +24,21 @@ class Anaconda(Plugin, RedHatPlugin):
 | ||||||
|  |   | ||||||
|  |      def setup(self): | ||||||
|  |   | ||||||
|  | -        paths = [
 | ||||||
|  | +        self.copypaths = [
 | ||||||
|  |              "/root/anaconda-ks.cfg" | ||||||
|  |          ] | ||||||
|  |   | ||||||
|  |          if self.path_isdir('/var/log/anaconda'): | ||||||
|  |              # new anaconda | ||||||
|  | -            paths.append('/var/log/anaconda')
 | ||||||
|  | +            self.copypaths.append('/var/log/anaconda')
 | ||||||
|  |          else: | ||||||
|  | -            paths = paths + [
 | ||||||
|  | +            self.copypaths = self.copypaths + [
 | ||||||
|  |                  "/var/log/anaconda.*", | ||||||
|  |                  "/root/install.log", | ||||||
|  |                  "/root/install.log.syslog" | ||||||
|  |              ] | ||||||
|  |   | ||||||
|  | -        self.add_copy_spec(paths)
 | ||||||
|  | +        self.add_copy_spec(self.copypaths)
 | ||||||
|  |   | ||||||
|  |      def postproc(self): | ||||||
|  |          self.do_file_sub( | ||||||
|  | @@ -51,5 +51,6 @@ class Anaconda(Plugin, RedHatPlugin):
 | ||||||
|  |              r"(user.*--password=*\s*)\s*(\S*)", | ||||||
|  |              r"\1********" | ||||||
|  |          ) | ||||||
|  | +        self.do_paths_http_sub(self.copypaths)
 | ||||||
|  |   | ||||||
|  |  # vim: set et ts=4 sw=4 : | ||||||
|  | diff --git a/sos/report/plugins/apt.py b/sos/report/plugins/apt.py
 | ||||||
|  | index 857a11b6..464cfb98 100644
 | ||||||
|  | --- a/sos/report/plugins/apt.py
 | ||||||
|  | +++ b/sos/report/plugins/apt.py
 | ||||||
|  | @@ -48,19 +48,11 @@ class Apt(Plugin, DebianPlugin, UbuntuPlugin):
 | ||||||
|  |      def postproc(self): | ||||||
|  |          super().postproc() | ||||||
|  |   | ||||||
|  | -        common_regex = r"(http(s)?://)\S+:\S+(@.*)"
 | ||||||
|  | -        common_replace = r"\1******:******\3"
 | ||||||
|  | -
 | ||||||
|  | -        files_to_sub = [
 | ||||||
|  | +        self.do_paths_http_sub([
 | ||||||
|  |              "/etc/apt/sources.list", | ||||||
|  |              "/etc/apt/sources.list.d/", | ||||||
|  |              "/etc/apt/apt.conf", | ||||||
|  |              "/etc/apt/apt.conf.d/", | ||||||
|  | -        ]
 | ||||||
|  | -
 | ||||||
|  | -        for file in files_to_sub:
 | ||||||
|  | -            self.do_path_regex_sub(
 | ||||||
|  | -                file, common_regex, common_replace
 | ||||||
|  | -            )
 | ||||||
|  | +        ])
 | ||||||
|  |   | ||||||
|  |  # vim: set et ts=4 sw=4 : | ||||||
|  | diff --git a/sos/report/plugins/system.py b/sos/report/plugins/system.py
 | ||||||
|  | index cc282dc1..fcba1161 100644
 | ||||||
|  | --- a/sos/report/plugins/system.py
 | ||||||
|  | +++ b/sos/report/plugins/system.py
 | ||||||
|  | @@ -40,5 +40,11 @@ class System(Plugin, IndependentPlugin):
 | ||||||
|  |              "ld.so --list-tunables" | ||||||
|  |          ]) | ||||||
|  |   | ||||||
|  | +    def postproc(self):
 | ||||||
|  | +        self.do_paths_http_sub([
 | ||||||
|  | +            "/etc/sysconfig",
 | ||||||
|  | +            "/etc/default",
 | ||||||
|  | +            "/etc/environment",
 | ||||||
|  | +        ])
 | ||||||
|  |   | ||||||
|  |  # vim: set et ts=4 sw=4 : | ||||||
|  | diff --git a/sos/report/plugins/systemd.py b/sos/report/plugins/systemd.py
 | ||||||
|  | index a50a155e..b23b32fe 100644
 | ||||||
|  | --- a/sos/report/plugins/systemd.py
 | ||||||
|  | +++ b/sos/report/plugins/systemd.py
 | ||||||
|  | @@ -95,4 +95,11 @@ class Systemd(Plugin, IndependentPlugin):
 | ||||||
|  |          ]) | ||||||
|  |          self.add_forbidden_path('/dev/null') | ||||||
|  |   | ||||||
|  | +    def postproc(self):
 | ||||||
|  | +        self.do_paths_http_sub([
 | ||||||
|  | +            "/etc/systemd/system",
 | ||||||
|  | +            "/lib/systemd/system",
 | ||||||
|  | +            "/run/systemd/system",
 | ||||||
|  | +        ])
 | ||||||
|  | +
 | ||||||
|  |  # vim: set et ts=4 sw=4 : | ||||||
|  | -- 
 | ||||||
|  | 2.43.5 | ||||||
|  | 
 | ||||||
							
								
								
									
										8
									
								
								sos.spec
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								sos.spec
									
									
									
									
									
								
							| @ -5,7 +5,7 @@ | |||||||
| Summary: A set of tools to gather troubleshooting information from a system | Summary: A set of tools to gather troubleshooting information from a system | ||||||
| Name: sos | Name: sos | ||||||
| Version: 4.8.0 | Version: 4.8.0 | ||||||
| Release: 3%{?dist} | Release: 4%{?dist} | ||||||
| Group: Applications/System | Group: Applications/System | ||||||
| Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz | Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz | ||||||
| Source1: sos-audit-%{auditversion}.tgz | Source1: sos-audit-%{auditversion}.tgz | ||||||
| @ -24,6 +24,7 @@ Conflicts: vdsm < 4.40 | |||||||
| Obsoletes: sos-collector <= 1.9 | Obsoletes: sos-collector <= 1.9 | ||||||
| Patch0: sos-Revert-changed-formatting.patch | Patch0: sos-Revert-changed-formatting.patch | ||||||
| Patch1: sos-RHEL-22732-Fix-check_file_too_big.patch | Patch1: sos-RHEL-22732-Fix-check_file_too_big.patch | ||||||
|  | Patch2: sos-obfuscate-environment.patch | ||||||
| 
 | 
 | ||||||
| %description | %description | ||||||
| Sos is a set of tools that gathers information about system | Sos is a set of tools that gathers information about system | ||||||
| @ -36,6 +37,7 @@ support technicians and developers. | |||||||
| %setup -T -D -a1 -q | %setup -T -D -a1 -q | ||||||
| %patch -P 0 -p1 | %patch -P 0 -p1 | ||||||
| %patch -P 1 -p1 | %patch -P 1 -p1 | ||||||
|  | %patch -P 2 -p1 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| %py3_build | %py3_build | ||||||
| @ -108,6 +110,10 @@ of the system.  Currently storage and filesystem commands are audited. | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Sep 27 2024 Jan Jansky <jjansky@redhat.com> = 4.8.0-4 | ||||||
|  | - Added credentials obfuscation from multiple files | ||||||
|  |   Resolves: RHEL-58096 | ||||||
|  | 
 | ||||||
| * Wed Sep 25 2024 Jan Jansky <jjansky@redhat.com> = 4.8.0-3 | * Wed Sep 25 2024 Jan Jansky <jjansky@redhat.com> = 4.8.0-3 | ||||||
| - Update 4.8.0 | - Update 4.8.0 | ||||||
|   Resolves: RHEL-58096 |   Resolves: RHEL-58096 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user