Blob Blame History Raw
From a89f73985d5d92acc75229004bafdc931f5ed750 Mon Sep 17 00:00:00 2001
From: Gabriel Becker <ggasparb@redhat.com>
Date: Thu, 3 Sep 2020 18:09:53 +0200
Subject: [PATCH 1/2] Introduce new rule sssd_ldap_configure_tls_reqcert.

---
 .../ansible/shared.yml                        |  6 +++
 .../bash/shared.sh                            |  6 +++
 .../oval/shared.xml                           | 24 ++++++++++++
 .../sssd_ldap_configure_tls_reqcert/rule.yml  | 39 +++++++++++++++++++
 ...rovider_and_reqcert_never.notapplicable.sh |  7 ++++
 .../tests/correct_value.pass.sh               |  5 +++
 .../id_provider_is_set_to_ad.notapplicable.sh |  6 +++
 ...ldap_id_provider_and_reqcert_never.fail.sh |  6 +++
 .../tests/ldap_tls_reqcert_not_there.fail.sh  |  6 +++
 rhel7/profiles/stig.profile                   |  1 +
 shared/references/cce-redhat-avail.txt        |  2 -
 tests/shared/sssd.conf                        |  1 +
 12 files changed, 107 insertions(+), 2 deletions(-)
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/ansible/shared.yml
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/bash/shared.sh
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ad_id_provider_and_reqcert_never.notapplicable.sh
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/correct_value.pass.sh
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/id_provider_is_set_to_ad.notapplicable.sh
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_id_provider_and_reqcert_never.fail.sh
 create mode 100644 linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_tls_reqcert_not_there.fail.sh

diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/ansible/shared.yml b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/ansible/shared.yml
new file mode 100644
index 0000000000..891b3e2f97
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/ansible/shared.yml
@@ -0,0 +1,6 @@
+# platform = multi_platform_rhel,multi_platform_fedora,multi_platform_ol
+# reboot = false
+# strategy = unknown
+# complexity = low
+# disruption = medium
+{{{ ansible_sssd_ldap_config(parameter="ldap_tls_reqcert", value="demand") }}}
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/bash/shared.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/bash/shared.sh
new file mode 100644
index 0000000000..62c2febc46
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/bash/shared.sh
@@ -0,0 +1,6 @@
+# platform = multi_platform_wrlinux,multi_platform_rhel,multi_platform_fedora,multi_platform_ol
+
+# Include source function library.
+. /usr/share/scap-security-guide/remediation_functions
+
+{{{ bash_sssd_ldap_config(parameter="ldap_tls_reqcert", value="demand") }}}
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
new file mode 100644
index 0000000000..9d3db0488f
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
@@ -0,0 +1,24 @@
+<def-group>
+  <definition class="compliance" id="sssd_ldap_configure_tls_reqcert" version="1">
+    <metadata>
+      <title>Configure SSSD LDAP Backend Client to Demand a Valid Certificate from the Server</title>
+      {{{- oval_affected(products) }}}
+      <description>Configure SSSD to request a valid certificate from the server to protect LDAP remote access sessions.</description>
+    </metadata>
+    <criteria>
+      <criterion test_ref="test_sssd_ldap_tls_reqcert" />
+    </criteria>
+  </definition>
+
+  <ind:textfilecontent54_test check="all" check_existence="all_exist"
+  comment="Ensures that LDAP TLS requires certificate is set"
+  id="test_sssd_ldap_tls_reqcert" version="1">
+    <ind:object object_ref="object_sssd_ldap_tls_reqcert" />
+  </ind:textfilecontent54_test>
+
+  <ind:textfilecontent54_object id="object_sssd_ldap_tls_reqcert" version="1">
+    <ind:filepath>/etc/sssd/sssd.conf</ind:filepath>
+    <ind:pattern operation="pattern match">^[\s]*\[domain\/[^]]*]([^\n\[\]]*\n+)+?[\s]*ldap_tls_reqcert[ \t]*=[ \t]*((?i)demand)[ \t]*$</ind:pattern>
+    <ind:instance datatype="int">1</ind:instance>
+  </ind:textfilecontent54_object>
+</def-group>
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
new file mode 100644
index 0000000000..4dee11bcfb
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
@@ -0,0 +1,39 @@
+documentation_complete: true
+
+prodtype: ol7,ol8,rhel7,rhel8,wrlinux1019
+
+title: 'Configure SSSD LDAP Backend Client to Demand a Valid Certificate from the Server'
+
+description: |-
+    Configure SSSD to demand a valid certificate from the server to
+    protect the integrity of LDAP remote access sessions. By setting
+    the <pre>ldap_tls_reqcert</pre> option in <pre>/etc/sssd/sssd.conf</pre>
+    to <tt>demand</tt>.
+
+rationale: |-
+    Without a valid certificate presented to the LDAP client backend, the identity of a
+    server can be forged compromising LDAP remote access sessions.
+
+severity: medium
+
+identifiers:
+    cce@rhel7: CCE-84061-1
+    cce@rhel8: CCE-84062-9
+
+references:
+    stigid@ol7: OL07-00-040190
+    disa: CCI-001453
+    nist: SC-12(3),CM-6(a)
+    srg: SRG-OS-000250-GPOS-00093
+    stigid@rhel7: RHEL-07-040190
+
+ocil_clause: 'the TLS reqcert is not set to demand'
+
+ocil: |-
+    To verify the LDAP client backend demands a valid certificate from the server in
+    remote ldap access sessions, run the following command:
+    <pre>$ sudo grep ldap_tls_reqcert /etc/sssd/sssd.conf</pre>
+    The output should return the following:
+    <pre>ldap_tls_reqcert = demand</pre>
+
+platform: sssd-ldap
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ad_id_provider_and_reqcert_never.notapplicable.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ad_id_provider_and_reqcert_never.notapplicable.sh
new file mode 100644
index 0000000000..3b82743f8d
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ad_id_provider_and_reqcert_never.notapplicable.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# profiles = xccdf_org.ssgproject.content_profile_stig
+
+. $SHARED/setup_config_files.sh
+setup_correct_sssd_config
+sed -i 's/ldap_tls_reqcert = demand/ldap_id_use_start_tls = never/' /etc/sssd/sssd.conf
+sed -i 's/id_provider = ldap/id_provider = ad/' /etc/sssd/sssd.conf
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/correct_value.pass.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/correct_value.pass.sh
new file mode 100644
index 0000000000..82bff74acf
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/correct_value.pass.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+# profiles = xccdf_org.ssgproject.content_profile_stig
+
+. $SHARED/setup_config_files.sh
+setup_correct_sssd_config
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/id_provider_is_set_to_ad.notapplicable.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/id_provider_is_set_to_ad.notapplicable.sh
new file mode 100644
index 0000000000..21f3af4c96
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/id_provider_is_set_to_ad.notapplicable.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+# profiles = xccdf_org.ssgproject.content_profile_stig
+
+. $SHARED/setup_config_files.sh
+setup_correct_sssd_config
+sed -i 's/id_provider = ldap/id_provider = ad/' /etc/sssd/sssd.conf
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_id_provider_and_reqcert_never.fail.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_id_provider_and_reqcert_never.fail.sh
new file mode 100644
index 0000000000..0fe620475e
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_id_provider_and_reqcert_never.fail.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+# profiles = xccdf_org.ssgproject.content_profile_stig
+
+. $SHARED/setup_config_files.sh
+setup_correct_sssd_config
+sed -i 's/ldap_tls_reqcert = demand/ldap_id_use_start_tls = never/' /etc/sssd/sssd.conf
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_tls_reqcert_not_there.fail.sh b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_tls_reqcert_not_there.fail.sh
new file mode 100644
index 0000000000..0e01fafb6f
--- /dev/null
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/tests/ldap_tls_reqcert_not_there.fail.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+# profiles = xccdf_org.ssgproject.content_profile_stig
+
+. $SHARED/setup_config_files.sh
+setup_correct_sssd_config
+sed -i '/ldap_tls_reqcert/d' /etc/sssd/sssd.conf
diff --git a/rhel7/profiles/stig.profile b/rhel7/profiles/stig.profile
index b820d30608..1b41b85857 100644
--- a/rhel7/profiles/stig.profile
+++ b/rhel7/profiles/stig.profile
@@ -236,6 +236,7 @@ selections:
     - sssd_ldap_start_tls.severity=medium
     - sssd_ldap_configure_tls_ca_dir
     - sssd_ldap_configure_tls_ca
+    - sssd_ldap_configure_tls_reqcert
     - sysctl_kernel_randomize_va_space
     - package_openssh-server_installed
     - sshd_required=yes
diff --git a/shared/references/cce-redhat-avail.txt b/shared/references/cce-redhat-avail.txt
index 4609b82680..7ab5eb179e 100644
--- a/shared/references/cce-redhat-avail.txt
+++ b/shared/references/cce-redhat-avail.txt
@@ -650,8 +650,6 @@ CCE-84057-9
 CCE-84058-7
 CCE-84059-5
 CCE-84060-3
-CCE-84061-1
-CCE-84062-9
 CCE-84063-7
 CCE-84064-5
 CCE-84065-2
diff --git a/tests/shared/sssd.conf b/tests/shared/sssd.conf
index dc51456425..6903a25d37 100644
--- a/tests/shared/sssd.conf
+++ b/tests/shared/sssd.conf
@@ -9,6 +9,7 @@ ldap_search_base = dc=com
 ldap_tls_cacertdir = /etc/openldap/cacerts
 cache_credentials = True
 krb5_store_password_if_offline = True
+ldap_tls_reqcert = demand
 
 
 [sssd]

From daf742ec9dad984e17e8a99bd7793bc9f44a32c4 Mon Sep 17 00:00:00 2001
From: Gabriel Becker <ggasparb@redhat.com>
Date: Mon, 21 Sep 2020 17:24:08 +0200
Subject: [PATCH 2/2] Use oval_metadata macro and update text of rule
 sssd_ldap_configure_tls_reqcert.

---
 .../sssd_ldap_configure_tls_reqcert/oval/shared.xml        | 7 ++-----
 .../sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml     | 4 ++--
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
index 9d3db0488f..688cf17abb 100644
--- a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/oval/shared.xml
@@ -1,10 +1,7 @@
 <def-group>
   <definition class="compliance" id="sssd_ldap_configure_tls_reqcert" version="1">
-    <metadata>
-      <title>Configure SSSD LDAP Backend Client to Demand a Valid Certificate from the Server</title>
-      {{{- oval_affected(products) }}}
-      <description>Configure SSSD to request a valid certificate from the server to protect LDAP remote access sessions.</description>
-    </metadata>
+    {{{ oval_metadata("Configure SSSD to request a valid certificate from the server to protect LDAP remote access sessions.",
+        title="Configure SSSD LDAP Backend Client to Demand a Valid Certificate from the Server") }}}
     <criteria>
       <criterion test_ref="test_sssd_ldap_tls_reqcert" />
     </criteria>
diff --git a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
index 4dee11bcfb..731b7c0846 100644
--- a/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
+++ b/linux_os/guide/services/sssd/sssd-ldap/sssd_ldap_configure_tls_reqcert/rule.yml
@@ -6,7 +6,7 @@ title: 'Configure SSSD LDAP Backend Client to Demand a Valid Certificate from th
 
 description: |-
     Configure SSSD to demand a valid certificate from the server to
-    protect the integrity of LDAP remote access sessions. By setting
+    protect the integrity of LDAP remote access sessions by setting
     the <pre>ldap_tls_reqcert</pre> option in <pre>/etc/sssd/sssd.conf</pre>
     to <tt>demand</tt>.
 
@@ -31,7 +31,7 @@ ocil_clause: 'the TLS reqcert is not set to demand'
 
 ocil: |-
     To verify the LDAP client backend demands a valid certificate from the server in
-    remote ldap access sessions, run the following command:
+    remote LDAP access sessions, run the following command:
     <pre>$ sudo grep ldap_tls_reqcert /etc/sssd/sssd.conf</pre>
     The output should return the following:
     <pre>ldap_tls_reqcert = demand</pre>