osob.de Unicorn Logo
Blogpost overview

Webhoster Security Fail | 08.07.2018

Gerne nutze ich die Möglichkeit, für ein neues Projekt auch einen neuen Webhoster auszuprobieren. So bin ich schon bei einigen Hostern gelandet und die Liste wächst. Besonders interessant finde ich immer, wie das Webhosting auf Servern mit vielen Nutzern organisiert wird.

Vor kurzem habe ich einen Webhoster getestet und festgestellt, dass bei der Konfiguration etwas schief gelaufen ist. Das Ganze schiebe ich an dieser Stelle mal auf den Admin und Plesk. Warum? Der Admin muss das System einrichten und überwachen. Und Plesk bietet gewisse Services an, die wiederum z. B. Logdateien anlegen und damit für diese (irgendwie) verantwortlich sind. Und eigentlich darf ich von Plesk erwarten, dass es etwas wie einen Sicherheitscheck durchführt (Schreib- und Leseberechtigungen prüfen z. B.). Ob Plesk nun schlecht ist oder gut, das kann ich nicht sagen. Ich weiß nur, dass Plesk alleine nicht ausreicht, um sicheres Webhosting zu betreiben.

You like what you find here? A donation helps to keep this project running.

Unsicherer Webhoster: Falsche Berechtigungen

Als ich ein bisschen mit PHP gespielt habe (und mir ein Webterminal eingerichtet hatte, da das gelieferte Terminal nichts konnte), ist mir aufgefallen, dass ich etwas mehr sehe als ich dürfte. Der Nutzer, unter welchem PHP ausgeführt wird, durfte aus der Umgebung des Webhosting-Pakets raus und sich umschauen.

Aus Spaß habe ich einfach mal folgendes versucht:

:#~ ls -ls /var/www/vhosts

total 416
 4 drwx--x---   5 ftp***         psaserv  4096 Oct 31  2017 U***.server**.webhosteranbieter.de
 4 drwx--x---   7 ftp***          psaserv  4096 Jun 18 11:37 bla*****chen.de
 4 drwxr-x---   7 root           root     4096 Jun 16 09:26 chroot
 4 drwxr-xr-x   5 root           root     4096 Apr 25 08:10 default
 4 drwxr-xr-x   3 root           root     4096 Jul 15  2017 dig*****rks.nl
 4 drwx--x---   5 ftp***          psaserv  4096 May 13 20:42 e*****r.eu
20 drwxr-xr-x 322 root           root    20480 Jul  6 22:26 system
 4 drwx--x---   4 webhosteranbieter        psaserv  4096 Apr 28  2017 system**.webhosteranbieter.de
 4 drwx--x---   8 marius         psaserv  4096 Jul  1 15:12 U***.server**.webhosteranbieter.de

Okay. Interessant. 416 "Kunden" liegen also auf dem Server. Was halte ich davon? Grundsätzlich ist es ja so, dass ich auch bei anderen Hostern sehen kann, welche Nutzer im System sind. Hier ist es aber so, dass ich automatisch die Nutzernummern erhalte und zum Teil auch Domains. Damit ließen sich Rückschlüsse auf die Kunden des Anbieters ziehen. Dies kann ich auch, wenn ich rückwärts die IP untersuche und schaue, welche Domains auf dieser laufen. Aber dies ist etwas anderes und hat nichts mit der Konfiguration des Servers zu tun.

Dann ein Test, wie weit ich komme:

:#~ ls -ls /var/www/vhosts/kli*****h.de

ls: cannot open directory /var/www/vhosts/kli*****h.de: Permission denied

Alles klar, das ist beruhigend. Zumindest in die Ordner komme ich nicht rein. Oder? Ich habe mal versucht, einen root:root-Ordner auszulesen. Und ... naja ... es klappt. Und wenn dann irgendwo eine Datei auch noch root:root gehört und lesbar ist, kann ich diese einfach in mein eigenes Verzeichnis kopieren und auch lesen. Zum Verständnis: Der Fehler ist, dass gewisse Dateien einen globalen Lesezugriff haben. In diesem Fall fast alle der Gruppe/Eigentümer Root.

Wer jetzt denkt: Okay, ich sehe eigentlich nur die Adressen, die vom System vergeben werden, sollte sich den Inhalt des Ordners system anzeigen lassen. Dort, so scheint es, sind alle Subdomains aufgelistet, die im aktuellen System eingetragen sind:

:#~ ls -ls /var/www/vhosts/system

total 1280
4 drwx--x--x 7 root psaserv 4096 May 24 21:39*******
4 drwx--x--x 7 root psaserv 4096 Mar 24 16:00 1cen*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:0*******
4 drwx--x--x 7 root psaserv 4096 Nov  2  2017 Andr*******
4 drwx--x--x 7 root psaserv 4096 Aug 28  2017 Anni*******
4 drwx--x--x 7 root psaserv 4096 Apr 14 09:46 BTC.n*******
4 drwx--x--x 7 root psaserv 4096 Aug  8  2017 Hel*******
4 drwx--x--x 7 root psaserv 4096 Jun 26 15:33 Schiffselekt*******
4 drwx--x--x 7 root psaserv 4096 Oct 31  2017 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Apr  1 18:25 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Apr  2 21:07 U****V***..server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 May 28 01:50 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Feb 14 20:19 cloud.d*****eat*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 cloud.*******
4 drwx--x--x 7 root psaserv 4096 Apr  8 12:39 cloud.jonathan*******
4 drwx--x--x 7 root psaserv 4096 Apr 16 15:57 cloud.pic-*******
4 drwx--x--x 7 root psaserv 4096 Dec  4  2017 cloud.*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 cloud.waldo*******
4 drwx--x--x 7 root psaserv 4096 Jun 14  2017 vetmed-versic*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.dystem*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.eag*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.gssk*******
4 drwx--x--x 7 root psaserv 4096 May 11 08:50 xn--sex-aufklru*******
4 drwx--x--x 7 root psaserv 4096 May 24 17:50 yacht-elek*******

Also die 416 Kunden haben insgesamt 1280 Domains und Subdomains auf dem Server aktiviert. Zum Teil erkenne ich Hinweise auf Webmail-Clients oder Cloud-Umgebungen. Es gibt Firmenwebsites und private Blogs.

Weiter runter kommt man zum Glück nicht. Aber es reicht zum Teil schon aus. Okay, also mal weiter umschauen auf dem System. Eventuell kann ich ja Logs lesen:

:#~ ls -l /var/log

total 229460
-rw------- 1 root          utmp            14614272 Jul  7 00:32 btmp
-rw------- 1 root          utmp            74356992 Jul  1 05:26 btmp-20180701
-rw------- 1 root          root             1906093 Jul  7 00:33 cron
-rw------- 1 root          root             4370503 Jun 10 05:15 cron-20180610
-rw------- 1 root          root             4137152 Jun 17 05:18 cron-20180617
-rw------- 1 root          root             2778917 Jun 24 05:20 cron-20180624
-rw------- 1 root          root             2583637 Jul  1 05:27 cron-20180701
-rw-r--r-- 1 root          root              113322 Jun 15 13:28 dnssec_debug.log
-rw------- 1 root          root                 109 Jul  1 05:27 fail2ban.log
-rw------- 1 root          root                 108 May 13 05:01 fail2ban.log-20180520.gz
-rw------- 1 root          root                 108 May 20 05:02 fail2ban.log-20180527.gz
-rw------- 1 root          root                 108 May 27 05:13 fail2ban.log-20180603.gz
-rw------- 1 root          root                 106 Jun  3 05:25 fail2ban.log-20180610.gz
-rw------- 1 root          root                 250 Jun 16 09:22 fail2ban.log-20180617.gz
-rw------- 1 root          root                 110 Jun 17 05:18 fail2ban.log-20180624.gz
-rw------- 1 root          root                 110 Jun 24 05:20 fail2ban.log-20180701.gz
drwx------ 2 root          root                4096 Jun 27 15:49 httpd
drwxr-sr-x 3 root          systemd-journal     4096 Apr 26  2017 journal
-rw-r--r-- 1 root          root             2976940 Jul  6 23:45 lastlog
-rw-r----- 1 root          root             3467222 Jul  7 00:33 maillog
-rw-r----- 1 root          root               33036 Jul  6 04:33 maillog.processed
-rw-r----- 1 root          root             1284651 Jul  6 04:10 maillog.processed.1.gz
-rw-r----- 1 root          root             1628475 Jul  4 04:15 maillog.processed.2.gz
-rw-r----- 1 root          root             1658867 Jul  2 04:11 maillog.processed.3.gz
drwxrwxr-x 2 root          mailman             4096 Jul  1 05:27 mailman
drwxr-x--- 2 mysql         mysql                 92 Aug  4  2017 mariadb
-rw------- 1 root          root             2101379 Jul  7 00:31 messages
-rw------- 1 root          root             4721567 Jun 10 05:15 messages-20180610
-rw------- 1 root          root             5290713 Jun 17 05:18 messages-20180617
-rw------- 1 root          root             4004525 Jun 24 05:20 messages-20180624
-rw------- 1 root          root             3561575 Jul  1 05:27 messages-20180701
drwxr-xr-x 2 ntp           ntp                 4096 Apr 13 14:52 ntpstats
drwxrwx--- 2 apache        root                4096 Jun 11 05:15 php-fpm
drwxr-x--- 5 psaadm        root                4096 Jul  6 04:33 plesk
drwx------ 2 root          root                4096 Jul  1 05:27 plesk-php55-fpm
drwx------ 2 root          root                4096 Jul  1 05:27 plesk-php56-fpm
drwx------ 2 root          root                4096 Jul  1 05:27 plesk-php70-fpm
drwx------ 2 root          root                4096 Jul  1 05:27 plesk-php71-fpm
drwx------ 2 root          root                4096 Jul  1 05:27 plesk-php72-fpm
drwxr-x--- 2 horde_sysuser root                4096 Jul  1 04:07 psa-horde
-rw-r--r-- 1 root          root                 215 Jul  6 05:26 sa-update.log
-rw-r--r-- 1 root          root                  86 Apr  1 04:53 sa-update.log-20180401
-rw-r--r-- 1 root          root                1315 May  1 05:33 sa-update.log-20180501
-rw-r--r-- 1 root          root                1290 Jun  1 05:40 sa-update.log-20180601
-rw-r--r-- 1 root          root                1290 Jul  1 05:27 sa-update.log-20180701
drwx------ 3 root          root                4096 Apr 13 17:34 samba
-rw------- 1 root          root            16205928 Jul  7 00:32 secure
-rw------- 1 root          root            17937142 Jun 10 05:14 secure-20180610
-rw------- 1 root          root            23011227 Jun 17 05:18 secure-20180617
-rw------- 1 root          root            24260772 Jun 24 05:20 secure-20180624
-rw------- 1 root          root            18445428 Jul  1 05:27 secure-20180701
-rw------- 1 root          root                   0 Jul  1 05:27 spooler
-rw------- 1 root          root                   0 Jun  3 05:25 spooler-20180610
-rw------- 1 root          root                   0 Jun 10 05:15 spooler-20180617
-rw------- 1 root          root                   0 Jun 17 05:18 spooler-20180624
-rw------- 1 root          root                   0 Jun 24 05:20 spooler-20180701
drwxr-x--- 2 root          root                4096 Jul  2 05:22 sw-cp-server
-rw------- 1 root          root                   0 Mar 27  2017 tallylog
-rw-rw-r-- 1 root          utmp               31872 Jul  6 23:45 wtmp
-rw-rw-r-- 1 root          utmp             1476096 Jul  2 05:52 wtmp-20180701
-rw------- 1 root          root               45501 Jul  4 04:03 yum.log
-rw------- 1 root          root               67548 Dec 13  2017 yum.log-20180101
-rw------- 1 root          root               19618 Mar 28 04:03 yum.log-20180329

Okay, das sieht jetzt nicht so gut aus. Ich kann also in Logdateien von dnssec schauen oder auch andere Logs kopieren. DNS SEC Log einsehbar!

:#~ cp /var/log/wtmp wtmp
:#~ cp /var/log/wtmp-20180701 wtmp-2018070

Ich komme also in den Besitz von IP-Adressen der Nutzer und Zeitpunkten, zu denen sie online waren.

Nun stellt sich natürlich die Frage, ob es sich hierbei um eine Schwäche von Plesk handelt oder ob es einen Fehler in den genutzten Serverimages gibt. Möglich ist auch, dass die Server händisch aufgesetzt werden und hier der Administrator etwas vergessen hat. Natürlich habe ich den Betreiber informiert und dabei auf Folgendes hingewiesen: Bildbeschreibung