Control: 5.24 Ensure that docker exec commands are not used with the user=root option
Description
You should not use docker exec
with the --user=root
option.
Using the --user=root
option in a docker exec
command, executes it within the
container as the root user. This could potentially be insecure, particularly when you are
running containers with reduced capabilities or enhanced restrictions.
For example, if your container is running as a tomcat user (or any other non-root user),
it would be possible to run a command through docker exec
as root with the --user=root
option. This could potentially be dangerous.
Remediation
You should not use the --user=root
option in docker exec
commands.
Default Value
By default, the docker exec
command runs without the --user
option.
Usage
Run the control in your terminal:
powerpipe control run docker_compliance.control.cis_v160_5_24
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run docker_compliance.control.cis_v160_5_24 --share
SQL
This control uses a named query:
with os_output as ( select btrim(stdout_output, E' \n\r\t') as os, _ctx ->> 'connection_name' as os_conn from exec_command where command = 'uname -s'), hostname as ( select btrim(stdout_output, E' \n\r\t') as host, _ctx ->> 'connection_name' as host_conn, _ctx from exec_command where command = 'hostname'),
linux_output as ( select stdout_output, _ctx ->> 'connection_name' as conn from exec_command, os_output where os_conn = _ctx ->> 'connection_name' and command = 'sudo -n ausearch -k docker | grep exec | grep user')select host as resource, case when os.os ilike '%Darwin%' then 'skip' when o.stdout_output = '' then 'ok' else 'alarm' end as status, case when os.os ilike '%Darwin%' then host || ' ausearch command not supported on ' || os.os || ' OS.' when o.stdout_output = '' then host || ' Docker exec commands are not used with the user=root option.' else host || ' Docker exec commands are used with the user=root option.' end as reason , h._ctx ->> 'connection_name' as connection_namefrom hostname as h, os_output as os, linux_output as owhere os.os_conn = h.host_conn and h.host_conn = o.conn;