Hello,

I am running an apache 2.4 server (2.4.18-2ubuntu3.1) on Ubuntu 16.04 with mod_userdir, mod_suexec_custom, mod_cgid and php5.6-cgi.

Users can place arbitrary documents and scripts in their userdirs and are not considered trusted, so should not be able to interfere with anything except their own scripts and should not be able to do anything other than have apache execute their scripts with their

https://httpd.apache.org/docs/2.4/mod/mod_cgid.html#scriptsock says:
The socket will be opened using the permissions of the user who starts Apache 
(usually root). To maintain the security of communications with CGI scripts, it 
is important that no other user has permission to write in the directory where 
the socket is located.

To make CGID work with suexec+userdir, I've had to change the socket to make it group-owned by www-data and with g+w set:

me@box:~$ ls -al /var/run/apache2/
total 4
drwxr-xr-x  2 root     root       80 Oct 20 09:09 .
drwxr-xr-x 25 root     root     1000 Oct 20 10:38 ..
-rw-r--r--  1 root     root        5 Oct 20 09:09 apache2.pid
srwx-w----  1 www-data www-data    0 Oct 20 09:09 cgisock.9822

I hacked up the init script to perform this, by adding the following to apache_wait_start:

for sockfile in /var/run/apache2/cgisock.*; do
        if [ -S "$sockfile" ]; then
                chown www-data:www-data /var/run/apache2/cgisock.*
                chmod g+w /var/run/apache2/cgisock.*
                break
        fi
done

This works because suexec apparently retains the www-data group membership.

(Here's the output of a php script that echos posix_getuid() and runs system('id -a'):

31524
uid=31524(erlacher) gid=20909(tumuser) 
groups=20909(tumuser),0(root),4(adm),33(www-data),108(syslog),5177(sambarbg),9044(rbg),14777(ljfs),16693(desktop)

Ignore the "root" group, that's part of my groups. Of course it would be nice to have suexec drop groups, but that's not a feature that exists...
)

Now, getting back to the statement in the apache docs: Is this a security violation / vulnerability? What can an attacker do with that socket other than execute arbitrary programs on the machine using their own permissions (plus www-data group)? They can already do that by virtue of being able to place arbitrary cgi scripts in their userdirs.

Thank you for any thoughts or pointers!

Best regards,
Luke

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to