Skip to content

Commit 7541243

Browse files
committed
fixed rule to allow kubelet to kubelet to be unconfined
1 parent a78ca75 commit 7541243

2 files changed

Lines changed: 57 additions & 18 deletions

File tree

controls/nist_rhcos4.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,7 @@ controls:
480480
rules:
481481
- var_selinux_policy_name=targeted
482482
- selinux_policytype
483-
# (jhrozek): Disabled because of https://issues.redhat.com/browse/OCPBUGS-6968
484-
#- selinux_confinement_of_daemons
483+
- selinux_confinement_of_daemons
485484
- var_selinux_state=enforcing
486485
- selinux_state
487486
- coreos_enable_selinux_kernel_argument
@@ -822,8 +821,7 @@ controls:
822821

823822
https://issues.redhat.com/browse/CMP-115
824823
rules:
825-
# (jhrozek): Disabled because of https://issues.redhat.com/browse/OCPBUGS-6968
826-
#- selinux_confinement_of_daemons
824+
- selinux_confinement_of_daemons
827825
- no_shelllogin_for_systemaccounts
828826
- sysctl_kernel_perf_event_paranoid
829827
- sysctl_kernel_unprivileged_bpf_disabled
@@ -4919,8 +4917,7 @@ controls:
49194917
- audit_rules_privileged_commands_userhelper
49204918
- audit_rules_networkconfig_modification
49214919
- audit_rules_etc_shadow_openat
4922-
# (jhrozek): Disabled because of https://issues.redhat.com/browse/OCPBUGS-6968
4923-
#- selinux_confinement_of_daemons
4920+
- selinux_confinement_of_daemons
49244921
- audit_rules_etc_gshadow_open_by_handle_at
49254922
- audit_rules_etc_gshadow_open
49264923
- var_auditd_space_left_action=syslog
@@ -5166,8 +5163,7 @@ controls:
51665163
- service_bluetooth_disabled
51675164
- kernel_module_tipc_disabled
51685165
- sysctl_net_ipv6_conf_all_accept_redirects
5169-
# (jhrozek): Disabled because of https://issues.redhat.com/browse/OCPBUGS-6968
5170-
#- selinux_confinement_of_daemons
5166+
- selinux_confinement_of_daemons
51715167
- sysctl_net_ipv4_tcp_syncookies
51725168
- sysctl_net_ipv4_icmp_ignore_bogus_error_responses
51735169
- coreos_vsyscall_kernel_argument
Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,64 @@
11
<def-group>
2-
<definition class="compliance" id="selinux_confinement_of_daemons" version="1">
3-
{{{ oval_metadata("All pids in /proc should be assigned an SELinux security context other than 'unconfined_service_t'.", rule_title=rule_title) }}}
4-
<criteria>
5-
<criterion comment="no unconfined_service_t in /proc" test_ref="test_selinux_confinement_of_daemons" />
2+
<definition class="compliance" id="selinux_confinement_of_daemons" version="2">
3+
{{{ oval_metadata("All pids in /proc should be assigned an SELinux security context other than 'unconfined_service_t' (kubelet excluded).", rule_title=rule_title) }}}
4+
<criteria operator="OR">
5+
<criterion comment="no unconfined_service_t processes exist" test_ref="test_no_unconfined_service_t_processes" />
6+
<criterion comment="only kubelet has unconfined_service_t" test_ref="test_only_kubelet_unconfined" />
67
</criteria>
78
</definition>
8-
<linux:selinuxsecuritycontext_test check="none satisfy" check_existence="any_exist" comment="none satisfy unconfined_service_t in /proc" id="test_selinux_confinement_of_daemons" version="2">
9+
10+
<!-- Test 1: Check if NO processes have unconfined_service_t -->
11+
<linux:selinuxsecuritycontext_test check="none satisfy" check_existence="any_exist"
12+
comment="no processes with unconfined_service_t" id="test_no_unconfined_service_t_processes" version="1">
913
<linux:object object_ref="object_selinux_confinement_of_daemons" />
10-
<linux:state state_ref="state_selinux_confinement_of_daemons" />
14+
<linux:state state_ref="state_unconfined_service_t" />
1115
</linux:selinuxsecuritycontext_test>
12-
<linux:selinuxsecuritycontext_object comment="find unconfined_service_t in /proc" id="object_selinux_confinement_of_daemons" version="1">
16+
17+
<!-- Test 2: Check that all unconfined_service_t processes are kubelet -->
18+
<ind:textfilecontent54_test check="all" check_existence="all_exist"
19+
comment="all unconfined_service_t processes are kubelet" id="test_only_kubelet_unconfined" version="1">
20+
<ind:object object_ref="object_unconfined_service_t_cmdlines" />
21+
<ind:state state_ref="state_cmdline_is_kubelet" />
22+
</ind:textfilecontent54_test>
23+
24+
<!-- Object: Find all processes in /proc -->
25+
<linux:selinuxsecuritycontext_object comment="find all processes in /proc" id="object_selinux_confinement_of_daemons" version="2">
1326
<linux:behaviors max_depth="1" recurse_direction="down" />
1427
<linux:path>/proc</linux:path>
15-
<linux:filename operation="pattern match">^.*$</linux:filename>
16-
<filter action="include">state_selinux_confinement_of_daemons</filter>
28+
<linux:filename operation="pattern match">^[0-9]+$</linux:filename>
1729
</linux:selinuxsecuritycontext_object>
18-
<linux:selinuxsecuritycontext_state comment="state unconfined_service_t" id="state_selinux_confinement_of_daemons" version="1">
30+
31+
<!-- Object: Read cmdline for processes with unconfined_service_t -->
32+
<ind:textfilecontent54_object comment="cmdline of unconfined_service_t processes" id="object_unconfined_service_t_cmdlines" version="1">
33+
<ind:filepath operation="equals" var_ref="var_unconfined_cmdline_paths" var_check="at least one"/>
34+
<ind:pattern operation="pattern match">^(.*)$</ind:pattern>
35+
<ind:instance datatype="int" operation="equals">1</ind:instance>
36+
</ind:textfilecontent54_object>
37+
38+
<!-- Variable: Build /proc/PID/cmdline paths for unconfined processes -->
39+
<local_variable id="var_unconfined_cmdline_paths" datatype="string" comment="cmdline paths for unconfined_service_t PIDs" version="1">
40+
<concat>
41+
<literal_component>/proc/</literal_component>
42+
<object_component object_ref="object_unconfined_selinux_contexts" item_field="pid"/>
43+
<literal_component>/cmdline</literal_component>
44+
</concat>
45+
</local_variable>
46+
47+
<!-- Object: SELinux contexts filtered to unconfined_service_t -->
48+
<linux:selinuxsecuritycontext_object comment="unconfined_service_t contexts" id="object_unconfined_selinux_contexts" version="1">
49+
<linux:behaviors max_depth="1" recurse_direction="down" />
50+
<linux:path>/proc</linux:path>
51+
<linux:filename operation="pattern match">^[0-9]+$</linux:filename>
52+
<filter action="include">state_unconfined_service_t</filter>
53+
</linux:selinuxsecuritycontext_object>
54+
55+
<!-- State: Match unconfined_service_t type -->
56+
<linux:selinuxsecuritycontext_state comment="state unconfined_service_t" id="state_unconfined_service_t" version="1">
1957
<linux:type datatype="string" operation="equals">unconfined_service_t</linux:type>
2058
</linux:selinuxsecuritycontext_state>
59+
60+
<!-- State: Match kubelet in cmdline -->
61+
<ind:textfilecontent54_state comment="kubelet cmdline" id="state_cmdline_is_kubelet" version="1">
62+
<ind:subexpression operation="pattern match">.*kubelet.*</ind:subexpression>
63+
</ind:textfilecontent54_state>
2164
</def-group>

0 commit comments

Comments
 (0)