Blame SOURCES/scap-security-guide-0.1.64-fix_sudoers_defaults-PR_9299.patch

792d3d
From 9243f7615c2656003e4a64c88076d0d660f58580 Mon Sep 17 00:00:00 2001
792d3d
From: =?UTF-8?q?Jan=20=C4=8Cern=C3=BD?= <jcerny@redhat.com>
792d3d
Date: Fri, 5 Aug 2022 12:45:24 +0200
792d3d
Subject: [PATCH] Fix rule sudo_custom_logfile
792d3d
792d3d
- Allow only white space after the Default keyword to avoid
792d3d
  matching words that only start with Default.
792d3d
- If the variable value contains slashes they need to be escaped
792d3d
  because the sed command uses slashes as a separator, otherwise
792d3d
  the sed doesn't replace the wrong line during a remediation.
792d3d
792d3d
Also adds 2 test scenarios.
792d3d
792d3d
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2083109
792d3d
---
792d3d
 .../guide/system/software/sudo/sudo_custom_logfile/rule.yml  | 2 +-
792d3d
 .../sudo/sudo_custom_logfile/tests/broken_defaults.fail.sh   | 4 ++++
792d3d
 .../sudo/sudo_custom_logfile/tests/wrong_logfile.fail.sh     | 4 ++++
792d3d
 shared/templates/sudo_defaults_option/ansible.template       | 2 +-
792d3d
 shared/templates/sudo_defaults_option/bash.template          | 5 +++--
792d3d
 shared/templates/sudo_defaults_option/oval.template          | 2 +-
792d3d
 6 files changed, 14 insertions(+), 5 deletions(-)
792d3d
 create mode 100644 linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/broken_defaults.fail.sh
792d3d
 create mode 100644 linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/wrong_logfile.fail.sh
792d3d
792d3d
diff --git a/linux_os/guide/system/software/sudo/sudo_custom_logfile/rule.yml b/linux_os/guide/system/software/sudo/sudo_custom_logfile/rule.yml
792d3d
index 739f5f14936..94fbaaa33ed 100644
792d3d
--- a/linux_os/guide/system/software/sudo/sudo_custom_logfile/rule.yml
792d3d
+++ b/linux_os/guide/system/software/sudo/sudo_custom_logfile/rule.yml
792d3d
@@ -29,7 +29,7 @@ ocil_clause: 'logfile is not enabled in sudo'
792d3d
 
792d3d
 ocil: |-
792d3d
     To determine if <tt>logfile</tt> has been configured for sudo, run the following command:
792d3d
-    
$ sudo grep -ri "^[\s]*Defaults.*\blogfile\b.*" /etc/sudoers /etc/sudoers.d/
792d3d
+    
$ sudo grep -ri "^[\s]*Defaults\s*\blogfile\b.*" /etc/sudoers /etc/sudoers.d/
792d3d
     The command should return a matching output.
792d3d
 
792d3d
 template:
792d3d
diff --git a/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/broken_defaults.fail.sh b/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/broken_defaults.fail.sh
792d3d
new file mode 100644
792d3d
index 00000000000..13ff4559edb
792d3d
--- /dev/null
792d3d
+++ b/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/broken_defaults.fail.sh
792d3d
@@ -0,0 +1,4 @@
792d3d
+#!/bin/bash
792d3d
+# platform = multi_platform_all
792d3d
+
792d3d
+echo "Defaultsabc logfile=/var/log/sudo.log" >> /etc/sudoers
792d3d
diff --git a/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/wrong_logfile.fail.sh b/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/wrong_logfile.fail.sh
792d3d
new file mode 100644
792d3d
index 00000000000..ec24854f0f9
792d3d
--- /dev/null
792d3d
+++ b/linux_os/guide/system/software/sudo/sudo_custom_logfile/tests/wrong_logfile.fail.sh
792d3d
@@ -0,0 +1,4 @@
792d3d
+#!/bin/bash
792d3d
+# platform = multi_platform_all
792d3d
+
792d3d
+echo "Defaults logfile=/var/log/othersudologfile.log" >> /etc/sudoers
792d3d
diff --git a/shared/templates/sudo_defaults_option/ansible.template b/shared/templates/sudo_defaults_option/ansible.template
792d3d
index 094fa430b64..c9e344ec772 100644
792d3d
--- a/shared/templates/sudo_defaults_option/ansible.template
792d3d
+++ b/shared/templates/sudo_defaults_option/ansible.template
792d3d
@@ -8,7 +8,7 @@
792d3d
 - name: Ensure {{{ OPTION }}} is enabled with the appropriate value in /etc/sudoers
792d3d
   lineinfile:
792d3d
     path: /etc/sudoers
792d3d
-    regexp: '^[\s]*Defaults\s(.*)\b{{{ OPTION }}}=[-]?\w+\b(.*)$'
792d3d
+    regexp: '^[\s]*Defaults\s(.*)\b{{{ OPTION }}}=[-]?.+\b(.*)$'
792d3d
     line: 'Defaults \1{{{ OPTION }}}={{ {{{ VARIABLE_NAME }}} }}\2'
792d3d
     validate: /usr/sbin/visudo -cf %s
792d3d
     backrefs: yes
792d3d
diff --git a/shared/templates/sudo_defaults_option/bash.template b/shared/templates/sudo_defaults_option/bash.template
792d3d
index e3563d42db6..e7d962a668d 100644
792d3d
--- a/shared/templates/sudo_defaults_option/bash.template
792d3d
+++ b/shared/templates/sudo_defaults_option/bash.template
792d3d
@@ -9,7 +9,7 @@
792d3d
 {{% endif %}}
792d3d
 if /usr/sbin/visudo -qcf /etc/sudoers; then
792d3d
     cp /etc/sudoers /etc/sudoers.bak
792d3d
-    if ! grep -P '^[\s]*Defaults.*\b{{{ OPTION_REGEX }}}\b.*$' /etc/sudoers; then
792d3d
+    if ! grep -P '^[\s]*Defaults[\s]*\b{{{ OPTION_REGEX }}}\b.*$' /etc/sudoers; then
792d3d
         # sudoers file doesn't define Option {{{ OPTION }}}
792d3d
         echo "Defaults {{{ OPTION_VALUE }}}" >> /etc/sudoers
792d3d
     {{%- if not VARIABLE_NAME %}}
792d3d
@@ -21,7 +21,8 @@ if /usr/sbin/visudo -qcf /etc/sudoers; then
792d3d
             {{% if '/' in OPTION %}}
792d3d
             {{{ raise("OPTION (" + OPTION + ") uses sed path separator (/) in " + rule_id) }}}
792d3d
             {{% endif %}}
792d3d
-            sed -Ei "s/(^[\s]*Defaults.*\b{{{ OPTION }}}=)[-]?\w+(\b.*$)/\1{{{ '${' ~ VARIABLE_NAME ~ '}' }}}\2/" /etc/sudoers
792d3d
+            escaped_variable={{{ "${" ~ VARIABLE_NAME ~ "//$'/'/$'\/'}" }}}
792d3d
+            sed -Ei "s/(^[\s]*Defaults.*\b{{{ OPTION }}}=)[-]?.+(\b.*$)/\1$escaped_variable\2/" /etc/sudoers
792d3d
         fi
792d3d
     fi
792d3d
     {{% endif %}}
792d3d
diff --git a/shared/templates/sudo_defaults_option/oval.template b/shared/templates/sudo_defaults_option/oval.template
792d3d
index c0d81c95093..a9636a7204a 100644
792d3d
--- a/shared/templates/sudo_defaults_option/oval.template
792d3d
+++ b/shared/templates/sudo_defaults_option/oval.template
792d3d
@@ -13,7 +13,7 @@
792d3d
   </ind:textfilecontent54_test>
792d3d
   <ind:textfilecontent54_object id="object_{{{ OPTION }}}_sudoers" version="1">
792d3d
     <ind:filepath operation="pattern match">^/etc/sudoers(|\.d/.*)$</ind:filepath>
792d3d
-    <ind:pattern operation="pattern match">^[\s]*Defaults.*\b{{{ OPTION_REGEX }}}.*$</ind:pattern>
792d3d
+    <ind:pattern operation="pattern match">^[\s]*Defaults[\s]*\b{{{ OPTION_REGEX }}}.*$</ind:pattern>
792d3d
     <ind:instance datatype="int" operation="greater than or equal" >1</ind:instance>
792d3d
   </ind:textfilecontent54_object>
792d3d