Informationssicherheit in den Kommunen

Wie sicher sind unsere Daten?

Ich habe deutsche Kommunen auf Schwachstellen überprüft

In diesem Artikel zeige ich auf, wie mit einfachsten Methoden Schwachstellen und Datenabflüsse bei deutschen Kommunen / Städten aufzudecken waren. Über 3 Monate hinweg habe ich Server / Applikationen überprüft und dabei so einiges gefunden. Darunter massive Datenabflüsse von E-Mails und Anhängen, persönliche Dokumente (z.B. Personalausweise, Anträge etc.), allg. Schriftverkehr mit Bürgern, Log-Files mit sensiblen Daten, Zugang zu diversen Datenbanken, Zugang zu Intranet-Plattformen und viele weitere Schwachstellen, die ich zum Teil (aktuell) gar nicht aufzeigen kann, weil das Responsible Disclosure in vielen Fällen noch im Gange ist oder noch nicht bearbeitet wurde.

Abgeflossene Daten wurden nach der Ausforschung sicher vernichtet. Ich behalte mir Screenshots mit ggf. personenbezogenen Daten in zensierter oder unkenntlicher Fassung für dieses Writeup vor.

Warum überhaupt das Ganze?

Zu den Hintergründen

In den Jahren 2021 und 2022 konnte man erschreckend viele Berichte über Ransomware oder allg. Hacker Angriffe auf Kommunen lesen. Dabei wurden nicht nur Daten durch Ransomware unbrauchbar, sondern auch massive Datenabflüsse festgestellt. Das passiert nicht nur in Deutschland, sondern europaweit. Da landen dann auch mal 32 GB im Darknet. Als Anwendungsentwickler habe ich mir die Frage gestellt, wie sicher die Web-Applikationen/Services unserer Gemeinden wirklich sind. Aber bevor ich darauf eingehe, sollten wir uns kurz noch die aktuelle Lage anschauen.

Cybercrime-Schäden in Deutschland beliefen sich 2021 auf 223,5 Mrd. Euro jährlich und sind damit mehr als doppelt so hoch wie noch 2019. Das geht aus dem vom 09. Mai 2022 durch das Bundeskriminalamt (BKA) veröffentlichten Bundeslagebild Cybercrime 2021 Bericht hervor.

Die Anzahl erfasster Cyber-Straftaten hat im Jahr 2021 einen neuen Höchstwert erreicht. Die Polizeiliche Kriminalstatistik (PKS) verzeichnet im Phänomenbereich Cybercrime 146.363 Delikte, was einem Anstieg um mehr als zwölf Prozent gegenüber dem Vorjahr entspricht.

Geschädigte von Cyberkriminellen

Geschädigte und somit auch Ziele solcher Attacken sind lauf dem Bericht vor allem die deutsche Wirtschaft und ab Mitte 2021 insbesondere auch die öffentliche Verwaltung (siehe Lagebild: Punkt 4.1). Tendenz steigend.

Man sollte also eigentlich davon ausgehen können, dass sich in Sachen IT-Sicherheit einiges getan hat und ein besonderes Interesse darin besteht, zumindest die Basics einzuhalten.

Lasst uns mal sehen, wie sicher deutsche Kommunen tatsächlich sind.

Während meiner Recherchen bin ich wie schon erwähnt auf diverse Schwachstellen gestoßen. Einige davon nicht wirklich nennenswert, andere hingegen fatal. So gut wie alle Schwachstellen waren auf die top 10 OWASP Kategorien zurückzuführen.

Es gibt stand Januar 2022 genau 10.787 Kommunen in Deutschland, davon 2.054 Städte. Überprüft habe ich etwa 10.200 TLD. Bei meiner Recherche fehlen also ein paar Kandidaten, da schlichtweg das Onlineangebot nicht auffindbar war oder nicht existiert.

Ich möchte erwähnen, dass ich meinen Haupt-Datenbestand durch dieses GitHub repository initial füllen konnte. Ein Dank an dieser Stelle an @robbi5! Hat mir viel Recherche erspart und konnte damit Prozesse automatisieren.

pn3uma

Ok, los gehts.

Intranet

Ein besonderes Interesse während meiner Recherchen galt dem Intranet der Kommunen. Eigentlich bin ich davon ausgegangen, dass ein Großteil der Instanzen überhaupt nicht aufgerufen werden können. Dem war aber nicht so. In den meisten Fällen war der Zugriff auf das jeweilige Intranet möglich und wurde lediglich durch eine Loginmaske geschützt. Neben anderen sinnvollen Sicherheitsmechanismen sollte man meiner Meinung zumindest den Aufruf eines Intranets einschränken und lediglich über das interne Netzwerk zulassen oder für extern ein VPN Zugang schaffen - also allgemein den externen Zugriff nur über eine bestimmte IP erlauben.

Ok, aber die Instanzen sind ja alle durch ein Authentifizierungsverfahren geschützt. Wie schafft man es also, Zugang zu einem Intranet zu bekommen? Es ist banaler als man annehmen würde.

Nach 13 Jahren Applikationsentwicklung weiß ich nur zu gut, dass Entwickler*innen während der Umsetzung gerne Test-Zugangsdaten erstellen, um einen schnellen Zugriff während eines Testings  "griffbereit" zu haben. Natürlich gehören solche Zugänge spätestens bei einem Livegang gelöscht - was aber oft vergessen wird.

Die Zugangsdaten "test / test" habe ich einfach mal ausprobiert.

Bei den Instanzen eines Landkreises, einer Gemeinde und zwei weiteren Städten hatte ich damit tatsächlich Erfolg und Zugriff auf interne Informationen, Diskussionen, Zugangsdaten zu externen Diensten und vertraulichen Dokumenten (auch VS-NfD). Natürlich lehne ich mich rechtlich gesehen hiermit weit aus dem Fenster, meine aber durch meine Intention und das sofortige Melden die zuständigen Stellen nicht verärgert zu haben. Auch wurden die Zugänge zeitnah entfernt, sodass diese nicht ausgenutzt werden können.

Intranet
Intranet
Intranet
Intranet
Intranet

E-Mails

Auch habe ich mir die Mail-Server angeschaut. Dabei waren für mich vor allem online Webmailer interessant. Unter einem Webmailer versteht man eine Weboberfläche, über die man direkt mit einem Browser E-Mails einsehen, empfangen oder senden kann. Man benötigt also keinen E-Mail-Client, der auf einem Endgerät installiert und eingerichtet sein muss. Weit verbreitet ist die Software Horde oder Roundcube. Durch die breite Nutzung dieser Software, kann man davon ausgehen, dass diese durchaus sicher ist - sofern sie korrekt installiert und konfiguriert wurde.

In der Dokumentation von Roundcube ist zu lesen, dass sensible Verzeichnisse entsprechend vor direktem Zugriff geschützt werden sollten. z.B. mithilfe einer .htaccess. Besonders sensible Verzeichnisse sind:

Ihr ahnt vielleicht schon, wo uns das hinführt.

Schweifen wir kurz ein wenig ab: Eine Martkanteil-Statistik von ngnix vs. apache aus dem Jahr 2018 (ich habe auf die schnelle nichts Aktuelleres gefunden) zeigt einen deutlichen ngnix Nutzer Zuwachs.

source code

Es ist für die nicht so technisch versierten Leser jetzt wichtig zu wissen, dass ngnix eine .htaccess nicht unterstützt. Wenn man bei ngnix also nicht die direktiven entsprechend in eine nginx.conf überführt, haben die Regelungen, auch wenn sie zuvor über eine .htaccess definiert wurden, überhaupt keine Auswirkung.

Ich habe mir also Gedanken darüber gemacht, ob Webserver, auf denen Roundcube installiert ist, nach einer Migration auf ngnix auch entsprechend konfiguriert wurden.

Eine Untersuchung der roundcube Instanzen, die von Kommunen eingesetzt wurden, war erschreckend und ließ mich fassungslos zurück.

In den gefundenen ungeschützten Verzeichnissen konnte ich anhand der dort abgelegten Logfiles (/logs) den E-Mail-Verkehr nachvollziehen: Wer (also welches E-Mail-Postfach) hat wann eine E-Mail an wen (Empfänger-E-Mail-Adresse) verschickt.

source code

In den meisten Fällen, wo das /logs Verzeichnis ungeschützt war, konnte ich auch auf das /temp Verzeichnis, indem z.B. Anhänge gespeichert werden, zugreifen. Im Browser wird einem das bei aktivem directory listing so angezeigt:

source code

Ich habe mir also die Files alle mal gezogen um zu schauen was in diesem einen Fall so abliegt.

source code
source code

Unter den Files (einer einzigen Instanz!) konnte ich Personalausweise, Reisepässe, Krankenkarten, unterschiedlichste Anträge, Geburtsurkunden, Krankmeldungen und vieles mehr einsehen. Identitätsdiebstahl leichtgemacht.

pn3uma

Das hier gezeigte ist bei weitem nicht alles. Es sei zudem angemerkt, dass ich lediglich einen kleinen Teil der eigentlich verschickten und empfangenen Anhänge einsehen konnte. Denn Roundcube speichert Anhänge im /temp Verzeichnis nur bei bestimmten Interaktionen des Users. Hierzu ein Auszug aus den Source Files:

"This is a core plugin [...] includes storing attachments of messages currently being composed, writing attachments to disk when drafts with attachments are re-opened and writing attachments to disk for inline display in current html compositions. [...]"

Auch gibt es einen Garbadge Collector, welcher die Inhalte des /temp Verzeichnisses nach und nach löscht [source]. Das passiert je nachdem wie es in den PHP Einstellungen definiert wurde [source] und wird final durch den Session-Handler getriggert. Bedeutet: Man wird - mit etwas Glück - nur die aktuellen und zuletzt generierten Anhänge vorfinden.

Aber krass, oder? Kommt das tatsächlich so oft vor? Ich habe etwa 200 Roundcube Instanzen über Suchmaschinen gefunden und wirklich viele davon waren nicht abgesichert oder zum Teil auch einfach falsch abgesichert. Denn nur weil ein Verzeichnisaufruf in einer 403 Response endet, bedeutet das nicht automatisch auch, dass darin liegende Dateien vor direktem Aufruf geschützt wurden.

Um das Ausmaß zu verdeutlichen:  Die Roundcube Instanzen der Technischen Universität Berlin, der TU Dresden (Fachschaftsrat Informatik) oder der Universität Kassel waren, um mal drei zu nennen, ebenfalls betroffen.

Puh, zum Glück kann wenigstens der eigentliche Inhalt einer Mail (also der E-Mail Body) nicht eingesehen werden. Zumindest, wenn imap_debug nicht auf true gesetzt ist. Leider war das in zwei Fällen möglich:

Es ist sogar möglich, Zugriff auf ein ganzes Postfach zu erlangen. Denn es werden auch SQL Errors geloggt. Wenn in Roundcube eine Session in die Datenbank wandert, die aber schon existent ist, wird die query in der Log gespeichert. Wenn man nun das Logfile monitoren würde, könnte man so aktive Sessions abgreifen.

Der Identifier der Session kann manuell im Browser als Cookie hinterlegt werden, wodurch die aktive Session angesprochen und der Nutzer automatisch im Webmailer eingeloggt wäre. Habe ich natürlich nicht gemacht und ist nur Theorie.

Ja gut, solche Fehler können beim kleinen lokalen IT-Dienstleister schon mal passieren, könnte man sagen. Viele Kommunen haben sich dazu entschieden, auf big player zu setzen. z.B. DomainFactory. Die verwalten mehr als 1,3 Millionen Domainnamen, gehören zu den größten Webhosting-Unternehmen im deutschsprachigen Raum und sind seit 2013 GoDaddy zugehörig. Welchen Webmailer die anbieten?

source code

Neeee. Das wäre jetzt zu krass. Oder? Guess what:

source code

Bevor nun alle DomainFactory-Kunden Schnappatmung bekommen: Infrastruktur bedingt, betreibt die Firma mehrere Instanzen, wovon nur eine einzige vulnerable war. Die meisten Kunden sind also nicht betroffen.

Sonstiges

Habt ihr schonmal eine Sperrmüllabholung online beantragt? Eine Neuanmeldung oder ein Eigentümerwechsel zur öffentlichen Müllabfuhr? Sensible Daten wurden z.B. von einer Kreisstadt in einem öffentlich abrufbaren Logfile gespeichert (Bild links). Dabei wurde wohl alles, was über das jeweilige Online-Formular verschickt wurde, nochmal separat abgespeichert. Auch eine Möglichkeit, die Einwohner einer Stadt zu erfassen.

Solche Log Files oder auch andere interessante Sachen findet man sehr oft anhand der .DS_Store Datei, welche von iOS im Finder automatisch erstellt wird. Diese beinhaltet z.B. Informationen über die im Ordner abgelegten Dateien und kann ausgelesen werden. Da das File hidden ist, bemerkt man oftmals überhaupt nicht, dass man die beim traditionellen File-Upload  (FTP, SFTP etc.) auf ein Webserver mitnimmt.

Datenbanken

Vorab kann ich schonmal sagen, dass ich Einsicht in weit über 200.000 Datensätze mit personen bezogenem Kontext hatte.

Es gibt verschiedene Wege, sich mit einer Datenbank zu verbinden. Beliebt sind Verwaltungssysteme, da die durch eine GUI einfach zu handhaben sind und keine CLI Kenntnisse erforderlich sind. Eine Datenbank-Verwaltungssoftware wird über den Browser aufgerufen und man erlangt DB Zugriff, wenn Host, User und Passwort bekannt sind. Das mag erstmal super sicher klingen, ist es aber nur bedingt. Der Host ist in den meisten Fällen localhost, da sich die Datenbanken fast immer auf demselben Server befinden, wo auch die Verwaltungssoftware installiert ist. Der User und das Passwort lassen sich z.B. durch andere Schwachstellen herausfinden. Bei einigen der von mir überprüften Servern wurden z.B. Credentials durch öffentlich zugängliche Backupdateien oder komischen Installer, die nicht gelöscht wurden, offengelegt.

source code
source code

Bei so einem Fund ist so eine offen zugängliche Verwaltungsoberfläche das passende Schlüsselloch, denn idealerweise, lässt man - sofern nicht gewollt - den Verbindungsaufbau zu MySQL remote erst gar nicht zu. Bringt dann nur nichts, weil man sich direkt über das System Zugriff verschaffen kann.

Es ist allgemein common practice den Zugang zu einer Datenbankverwaltung nicht öffentlich abrufbar zu machen oder zumindest diese durch weitere Sicherheitsmechanismen zu schützen. Meist erfolgt das durch eine benutzerdefinierte Zugriffskontrolle via htaccess (apache) oder in der (Virt)Host-Konfiguration der Domain, worüber sich ein effektiver Passwortschutz vorschalten lässt. Im besten Fall ist der Aufruf nur mit aktiver SCP Session möglich (kennt man z.B. von ISPConfig).

Anyway - Ich konnte mir ohne Probleme auf die ein oder andere Datenbankenverwaltungen (so oder so ähnlich) Zugriff verschaffen, auch weil keinerlei Schutz vorgeschaltet wurde.

source code
source code

Das geht aber noch krasser. z.B. das Generieren eines Backups der Datenbank in Echtzeit über einen simplen URL-Aufruf. Als ich die Seite das erste Mal aufgerufen habe, hatte ich mich schon gewundert, warum der Seitenaufbau so lange dauert. Ich bin davon ausgegangen, dass ich hier durch das Erreichen der max execution time in einem Error lande. Dem war nicht so und das warten hat sich gelohnt, denn was hier so lange gedauert hat, war das Packen von Dateien in Echtzeit im Hintergrund. Als Bonus bekommt man dann sogar noch das gesamte Filesystem on top. Wie kommt man auf solche Ideen?

source code

Der absolute Overkill ist aber, wenn ein Hoster ALLE Datenbanken seiner Kunden über eine ungeschützte phpMyAdmin Instanz öffentlich zugänglich macht. Man musste nur den URL kennen, welchen ich z.B. in einem dump file einer Stadt gefunden und aufgerufen habe.

source code

Die Datenbanken sind von 1 bis 325 durchnummeriert. Jede einzelne davon einer Web-Applikation zugehörig. Ich hatte hierdurch Zugriff auf solch eine Masse an personen bezogenen Daten, dass ich bis heute nicht sicher sagen kann, wie viele Personen hiervon letztendlich betroffen sind. Selbst wenn ich wollte, hätte ich nicht die Zeit gehabt, das alles zu überprüfen. Auch mit dem Gedanken, diese Instanz so schnell wie möglich zu melden, habe ich irgendwann mit der Erfassung aufgehört. Aber natürlich habe ich mich ein wenig umgeschaut und scheiße, was man da alles finden konnte. Sogar Accounts mit bundestag.de E-Mail-Adressen. Immer auch etwas kritisch, wenn Passwörter teils Plaintext gespeichert werden.

source code

Oder interne Kommunikation zur Entwicklung und Fehlerbehebung irgendeiner Software mit und von dem IT-Dienstleister KDO aus einer Datenbank für eine Art CRM-System. Das war so spannend zu lesen, dass ich mir die öffentlichen IT-Dienstleister genauer anschauen musste.

Nachtrag 11.08.2023: Der Hoster wurde einen Monat nach meinem Hinweis von der dogado group übernommen. Ein Schelm, wer Böses dabei denkt.

Öffentliche IT-Dienstleister für Kommunen

Kommen wir zu den öffentlichen IT-Dienstleistern. Um einen groben Überblick zu bekommen, welche Unternehmen hier maßgeblich mitspielen, habe ich mich bei der govdigital belesen. Die govdigital ist eine bundesweite Genossenschaft zur Integration von IT-Lösungen für Bund, Länder und Kommunen. Dort sind aktuell 23 Mitglieder aufgeführt, die Software herstellen oder allg. IT Dienstleistungen anbieten. Diese habe ich mir grob angeschaut, da deren Dienste weit verbreitet in Kommunen Anklang finden.

Als ich mir das Themenfeld auf deren Webseite angeschaut habe, ist beim Schlagwort "Blockchain" beinahe die Faust im Bildschirm gelandet. Ich pflege (wie viele andere Personen aus meinem IT-Umfeld) gegenüber der Blockchain-Technologie eine äußerst kritische Haltung. Aber das ist ein Thema, um das es hier nicht gehen soll. Halten wir einfach fest, dass es eine scheiß Idee ist auf eine Blockchain-Technologie zu setzen - vor allem im öffentlichen Sektor.

Komm.ONE

„Erstes Anliegen von Komm.ONE ist es, die digitale Souveränität der Kommunen zu stärken. Dies gelingt unserer Erfahrung nach vor allem über die Zusammenarbeit maßgeblicher Akteure. Innovative Netzwerke sind für uns deshalb der Weg, den wir konsequent verfolgen, um Know-How und Kompetenzen im Interesse der Kommunen in Baden-Württemberg weiter auf- und auszubauen“, erklärt William Schmitt, Vorstandsvorsitzender der Komm.ONE. Die Mitgliedschaft von Komm.ONE in der govdigital eG sei daher ein schlüssiger Schritt, mit dem das Unternehmen dazu beitrage, innovative Lösungen wie zum Beispiel die Blockchain-Technologie für den öffentlichen Sektor weiter zu entwickeln, so Schmitt weiter.

Also die digitale Souveränität ist in meinen Augen direkt zerbröselt, als ich bemerkte, dass die Komm.ONE Serverkonfigurationen öffentlich abrufbar macht (Upsi: CWE-200 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N). Warum das ein Problem ist? Nunja, als potenzieller Angreifer kann ich genau nachvollziehen, welche Module installiert oder welche Einstellungen getroffen wurden, um den Server abzusichern. z.B. auch ob und wie bestimmte Dateitypen interpretiert werden, welche vHost Einstellungen gegeben oder wie die Firewall-Einstellungen für Modsec gesetzt sind.

Ich fand es auch durchaus interessant, welche Kommunen gehostet werden. Idealerweise kann man das ohne großartige Recherchen anzustellen ganz einfach einsehen, da - warum auch immer (?) - das  /etc/passwd file gedumpt wird [1, 2]:

		
			
testroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin sshd:x:100:65534::/var/run/sshd:/usr/sbin/nologin ftpsecure:x:102:65534::/var/run/vsftpd/:/bin/false messagebus:x:104:105::/var/run/dbus:/bin/false shared-secure-04:x:1000:1003::/var/www/de.rz-kiru.shared-secure-04/data/:/sbin/nologin shared-secure-04-sftp01:x:1001:1003::/var/www/de.rz-kiru.shared-secure-04/data/:/sbin/nologin uuidd:x:103:103::/run/uuidd:/bin/false radar:x:1002:1004::/home/radar:/bin/sh _apt:x:101:65534::/nonexistent:/bin/false systemd-timesync:x:105:109:systemd Time Synchronization,,,:/run/systemd:/bin/false systemd-network:x:106:110:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:107:111:systemd Resolver,,,:/run/systemd/resolve:/bin/false php56:x:1003:1005::/var/www/de.rz-kiru.php56/data/:/sbin/nologin php56-sftp01:x:1004:1005::/var/www/de.rz-kiru.php56/data/:/sbin/nologin php72:x:1005:1006::/var/www/de.rz-kiru.php72/data/:/sbin/nologin php72-sftp01:x:1006:1006::/var/www/de.rz-kiru.php72/data/:/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin rammingen:x:1007:1007::/var/www/de.rammingen-bw.www/data/:/sbin/nologin rammingen-sftp01:x:1008:1007::/var/www/de.rammingen-bw.www/data/:/sbin/nologin allmendingen:x:1009:1009::/var/www/de.allmendingen.www/data/:/sbin/nologin allmendingen-sftp01:x:1010:1009::/var/www/de.allmendingen.www/data/:/sbin/nologin altheim:x:1011:1011::/var/www/de.altheim-info.www/data/:/sbin/nologin altheim-sftp01:x:1012:1011::/var/www/de.altheim-info.www/data/:/sbin/nologin wendlingen:x:1013:1013::/var/www/de.wendlingen.service/data/:/sbin/nologin wendlingen-sftp01:x:1014:1013::/var/www/de.wendlingen.service/data/:/sbin/nologin müllheim:x:1015:1015::/var/www/de.dwwwmüllheim/data/:/sbin/nologin müllheim-sftp01:x:1016:1015::/var/www/de.dwwwmüllheim/data/:/sbin/nologin muellheim:x:1017:1017::/var/www/de.muellheim.www/data/:/sbin/nologin muellheim-sftp01:x:1018:1017::/var/www/de.muellheim.www/data/:/sbin/nologin lrabb:x:1019:1019::/var/www/de.lrabb.sftp/data/:/sbin/nologin lrabb-sftp01:x:1020:1019::/var/www/de.lrabb.sftp/data/:/sbin/nologin lra-karlsruhe:x:1021:1021::/var/www/de.landratsamt-karlsruhe.ftp/data/:/sbin/nologin lra-karlsruhe-sftp01:x:1022:1021::/var/www/de.landratsamt-karlsruhe.ftp/data/:/sbin/nologin formsend:x:1023:1023::/var/www/one.komm.formsend/data/:/sbin/nologin formsend-sftp01:x:1024:1023::/var/www/one.komm.formsend/data/:/sbin/nologin sftp-impfzentren01:x:1025:1024::/var/www/de.landratsamt-karlsruhe.ftp/data/website/Impfzentren/:/sbin/nologin sftp-impfzentren02:x:1026:1025::/var/www/de.landratsamt-karlsruhe.ftp/data/website/Impfzentren/:/sbin/nologin huelben:x:1027:1027::/var/www/de.huelben.service/data/:/sbin/nologin huelben-sftp01:x:1028:1027::/var/www/de.huelben.service/data/:/sbin/nologin lra-goeppingen:x:1029:1029::/var/www/de.landkreis-goeppingen.www/data/:/sbin/nologin lra-goeppingen-sftp01:x:1030:1029::/var/www/de.landkreis-goeppingen.www/data/:/sbin/nologin immendingen:x:1031:1031::/var/www/de.immendingen.service/data/:/sbin/nologin immendingen-sftp01:x:1032:1031::/var/www/de.immendingen.service/data/:/sbin/nologin feuerwehr.leutenbach.de:x:1033:1033::/var/www/de.leutenbach.feuerwehr.www/data/:/sbin/nologin feuerwehr.leutenbach.de-sftp01:x:1034:1033::/var/www/de.leutenbach.feuerwehr.www/data/:/sbin/nologin schloss-achberg:x:1035:1035::/var/www/de.schloss-achberg.www/data/:/sbin/nologin schloss-achberg-sftp01:x:1036:1035::/var/www/de.schloss-achberg.www/data/:/sbin/nologin abwasserverband-murg:x:1037:1037::/var/www/de.abwasserverband-murg/data/:/sbin/nologin abwasserverband-murg-sftp01:x:1038:1037::/var/www/de.abwasserverband-murg/data/:/sbin/nologin ortenauline:x:1039:1039::/var/www/de.ortenauline.www2/data/:/sbin/nologin ortenauline-sftp01:x:1040:1039::/var/www/de.ortenauline.www2/data/:/sbin/nologin gerabronn:x:1043:1043::/var/www/de.gerabronn.www/data/:/sbin/nologin gerabronn-sftp01:x:1044:1043::/var/www/de.gerabronn.www/data/:/sbin/nologin achstetten:x:1045:1045::/var/www/de.achstetten.service/data/:/sbin/nologin achstetten-sftp01:x:1046:1045::/var/www/de.achstetten.service/data/:/sbin/nologin alva_lra-sftp01:x:1047:1021::/var/www/de.landratsamt-karlsruhe.ftp/data/ALVA/:/sbin/nologin www10.dzbw.de:x:1048:1048::/var/www/de.dzbw.www10/data/:/sbin/nologin www10.dzbw.de-sftp01:x:1049:1048::/var/www/de.dzbw.www10/data/:/sbin/nologin schwetzingen:x:1050:1050::/var/www/de.schwetzingen.stadt.www/data/:/sbin/nologin schwetzingen-sftp01:x:1051:1050::/var/www/de.schwetzingen.stadt.www/data/:/sbin/nologin windenelztal:x:1052:1052::/var/www/de.winden-im-elztal.www/data/:/sbin/nologin windenelztal-sftp01:x:1053:1052::/var/www/de.winden-im-elztal.www/data/:/sbin/nologin landkreisbw:x:1054:1054::/var/www/de.landkreise-bw.www/data/:/sbin/nologin landkreisbw-sftp01:x:1055:1054::/var/www/de.landkreise-bw.www/data/:/sbin/nologin kuessaberg:x:1056:1056::/var/www/de.kuessaberg.www/data/:/sbin/nologin kuessaberg-sftp01:x:1057:1056::/var/www/de.kuessaberg.www/data/:/sbin/nologin hansthomaschule:x:1058:1058::/var/www/de.hans-thoma-schule-malsch.www/data/:/sbin/nologin hansthomaschule-sftp01:x:1059:1058::/var/www/de.hans-thoma-schule-malsch.www/data/:/sbin/nologin gemeindehasel:x:1060:1060::/var/www/de.gemeinde-hasel.www/data/:/sbin/nologin gemeindehasel-sftp01:x:1061:1060::/var/www/de.gemeinde-hasel.www/data/:/sbin/nologin eichstetten:x:1062:1062::/var/www/de.eichstetten.www/data/:/sbin/nologin eichstetten-sftp01:x:1063:1062::/var/www/de.eichstetten.www/data/:/sbin/nologin breitnau:x:1064:1064::/var/www/de.breitnau.www/data/:/sbin/nologin breitnau-sftp01:x:1065:1064::/var/www/de.breitnau.www/data/:/sbin/nologin erdmannsreich:x:1066:1066::/var/www/de.erdmannsreich.www/data/:/sbin/nologin erdmannsreich-sftp01:x:1067:1066::/var/www/de.erdmannsreich.www/data/:/sbin/nologin modulekommone:x:1068:1068::/var/www/one.komm.module/data/:/sbin/nologin modulekommone-sftp01:x:1069:1068::/var/www/one.komm.module/data/:/sbin/nologin ncpclientkommone:x:1070:1070::/var/www/one.komm.ncpclient/data/:/sbin/nologin ncpclientkommone-sftp01:x:1071:1070::/var/www/one.komm.ncpclient/data/:/sbin/nologin hebelschule-malsch:x:1072:1072::/var/www/de.hebelschule-malsch.www/data/:/sbin/nologin hebelschule-malsch-sftp01:x:1073:1072::/var/www/de.hebelschule-malsch.www/data/:/sbin/nologin malsburg-marzell:x:1074:1074::/var/www/de.malsburg-marzell.www/data/:/sbin/nologin malsburg-marzell-sftp01:x:1075:1074::/var/www/de.malsburg-marzell.www/data/:/sbin/nologin lewis-ftp:x:1076:1076::/var/www/de.kivbf.lewis-ftp/data/:/sbin/nologin lewis-ftp-sftp01:x:1077:1076::/var/www/de.kivbf.lewis-ftp/data/:/sbin/nologin zell:x:1078:1078::/var/www/de.zell.stadt/data/:/sbin/nologin zell-sftp01:x:1079:1078::/var/www/de.zell.stadt/data/:/sbin/nologin shared-secure-01:x:1000:1003::/var/www/de.rz-kiru.shared-secure-01/data/:/sbin/nologin shared-secure-01-sftp01:x:1001:1003::/var/www/de.rz-kiru.shared-secure-01/data/:/sbin/nologin zv-wasser-hz:x:1002:1004::/var/www/de.zv-wasserversorgung-hohenzollern.www/data/:/sbin/nologin zv-wasser-hz-sftp01:x:1003:1004::/var/www/de.zv-wasserversorgung-hohenzollern.www/data/:/sbin/nologin fischingen:x:1004:1005::/var/www/de.fischingen-am-neckar.www/data/:/sbin/nologin fischingen-sftp01:x:1005:1005::/var/www/de.fischingen-am-neckar.www/data/:/sbin/nologin hdh-ris:x:1010:1010::/var/www/de.heidenheim.ris/data/:/sbin/nologin hdh-ris-sftp01:x:1011:1010::/var/www/de.heidenheim.ris/data/:/sbin/nologin lauterach:x:1012:1012::/var/www/de.gemeinde-lauterach.www/data/:/sbin/nologin lauterach-sftp01:x:1013:1012::/var/www/de.gemeinde-lauterach.www/data/:/sbin/nologin biberach:x:1014:1014::/var/www/de.biberach.www/data/:/sbin/nologin biberach-sftp01:x:1015:1014::/var/www/de.biberach.www/data/:/sbin/nologin medienrecherche-biberach:x:1027:1027::/var/www/de.landkreisbiberach.www/data/:/sbin/nologin medienrecherche-biberach-sftp01:x:1028:1027::/var/www/de.landkreisbiberach.www/data/:/sbin/nologin landesakademie-ochsenhausen:x:1029:1029::/var/www/de.landesakademie-ochsenhausen.www/data/:/sbin/nologin landesakademie-ochsenhausen-sftp01:x:1037:1029::/var/www/de.landesakademie-ochsenhausen.www/data/:/sbin/nologin ratsinfo-biberach:x:1032:1032::/var/www/de.biberach.ratsinfo/data/:/sbin/nologin ratsinfo-biberach-sftp01:x:1033:1032::/var/www/de.biberach.ratsinfo/data/:/sbin/nologin boebingen:x:1040:1040::/var/www/de.boebingen.service/data/:/sbin/nologin boebingen-sftp01:x:1041:1040::/var/www/de.boebingen.service/data/:/sbin/nologin bad-schussenried:x:1042:1042::/var/www/de.bad-schussenried.service/data/:/sbin/nologin bad-schussenried-sftp01:x:1043:1042::/var/www/de.bad-schussenried.service/data/:/sbin/nologin aitrach:x:1044:1044::/var/www/de.aitrach.www/data/:/sbin/nologin aitrach-sftp01:x:1045:1044::/var/www/de.aitrach.www/data/:/sbin/nologin beuron:x:1046:1046::/var/www/de.beuron.www/data/:/sbin/nologin beuron-sftp01:x:1047:1046::/var/www/de.beuron.www/data/:/sbin/nologin tuningen:x:1048:1048::/var/www/de.tuningen.service/data/:/sbin/nologin tuningen-sftp01:x:1049:1048::/var/www/de.tuningen.service/data/:/sbin/nologin sontheim-brenz:x:1050:1050::/var/www/de.sontheim-brenz.service/data/:/sbin/nologin sontheim-brenz-sftp01:x:1051:1050::/var/www/de.sontheim-brenz.service/data/:/sbin/nologin sontheim-brenz-sftp02:x:1052:1050::/var/www/de.sontheim-brenz.service/data/:/sbin/nologin kitasschemmerhofen:x:1053:1053::/var/www/de.kitas-schemmerhofen.www/data/:/sbin/nologin kitasschemmerhofen-sftp01:x:1054:1053::/var/www/de.kitas-schemmerhofen.www/data/:/sbin/nologin moegglingen:x:1057:1057::/var/www/de.moegglingen.service/data/:/sbin/nologin moegglingen-sftp01:x:1058:1057::/var/www/de.moegglingen.service/data/:/sbin/nologin kressbronn:x:1059:1059::/var/www/de.kressbronn.service/data/:/sbin/nologin kressbronn-sftp01:x:1060:1059::/var/www/de.kressbronn.service/data/:/sbin/nologin servicehuelben:x:1061:1006::/var/www/de.huelben.www/data/:/sbin/nologin servicehuelben-sftp01:x:1062:1006::/var/www/de.huelben.www/data/:/sbin/nologin holzgerlingen:x:1063:1063::/var/www/de.holzgerlingen.service/data/:/sbin/nologin holzgerlingen-sftp01:x:1064:1063::/var/www/de.holzgerlingen.service/data/:/sbin/nologin gwg-tuebingen:x:1065:1065::/var/www/de.gwg-tuebingen.service/data/:/sbin/nologin gwg-tuebingen-sftp01:x:1066:1065::/var/www/de.gwg-tuebingen.service/data/:/sbin/nologin rietheim-weilheim:x:1067:1067::/var/www/de.rietheim-weilheim.service/data/:/sbin/nologin rietheim-weilheim-sftp01:x:1068:1067::/var/www/de.rietheim-weilheim.service/data/:/sbin/nologin biberach-riss:x:1069:1069::/var/www/de.biberach-riss.service/data/:/sbin/nologin biberach-riss-sftp01:x:1070:1069::/var/www/de.biberach-riss.service/data/:/sbin/nologin sessiontest:x:1071:1071::/var/www/de.rz-kiru.sessiontest/data/:/sbin/nologin sessiontest-sftp01:x:1072:1071::/var/www/de.rz-kiru.sessiontest/data/:/sbin/nologin klinikum-tut:x:1073:1073::/var/www/de.klinikum-tut.www/data/:/sbin/nologin systemd-timesync:x:101:109:systemd Time Synchronization,,,:/run/systemd:/bin/false systemd-network:x:105:110:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:106:111:systemd Resolver,,,:/run/systemd/resolve:/bin/false kirchheim-teck:x:1074:1074::/var/www/de.kirchheim-teck.service/data/:/sbin/nologin kirchheim-teck-sftp01:x:1075:1074::/var/www/de.kirchheim-teck.service/data/:/sbin/nologin boeblingen:x:1076:1076::/var/www/de.boeblingen.service/data/:/sbin/nologin boeblingen-sftp01:x:1077:1076::/var/www/de.boeblingen.service/data/:/sbin/nologin dornstadt:x:1078:1078::/var/www/de.dornstadt.service/data/:/sbin/nologin dornstadt-sftp01:x:1079:1078::/var/www/de.dornstadt.service/data/:/sbin/nologin albershausen:x:1080:1080::/var/www/de.albershausen.service/data/:/sbin/nologin albershausen-sftp01:x:1081:1080::/var/www/de.albershausen.service/data/:/sbin/nologin urbach:x:1082:1082::/var/www/de.urbach.service/data/:/sbin/nologin urbach-sftp01:x:1083:1082::/var/www/de.urbach.service/data/:/sbin/nologin denkingen:x:1084:1084::/var/www/de.denkingen.service/data/:/sbin/nologin denkingen-sftp01:x:1085:1084::/var/www/de.denkingen.service/data/:/sbin/nologin gerlingen:x:1086:1086::/var/www/de.gerlingen.service/data/:/sbin/nologin gerlingen-sftp01:x:1087:1086::/var/www/de.gerlingen.service/data/:/sbin/nologin remsmurrkreis:x:1088:1088::/var/www/de.rems-murr-kreis.service/data/:/sbin/nologin remsmurrkreis-sftp01:x:1089:1088::/var/www/de.rems-murr-kreis.service/data/:/sbin/nologin albstadt:x:1090:1090::/var/www/de.albstadt.service/data/:/sbin/nologin albstadt-sftp01:x:1091:1090::/var/www/de.albstadt.service/data/:/sbin/nologin radar:x:1092:1092:Radar Service,,,:/home/radar:/bin/bash steinenbronn:x:1093:1093::/var/www/de.steinenbronn.service/data/:/sbin/nologin steinenbronn-sftp01:x:1094:1093::/var/www/de.steinenbronn.service/data/:/sbin/nologin _apt:x:108:65534::/nonexistent:/bin/false

KDO

Bei der KDO konnte ich auf drei unterschiedlichen Servern die Apache Server-Status Seite auffinden. Betroffen waren die Domains:

https://collabora.kdo.de/server-status
https://fachbetrieberegister.zks-mtu.kdo.de/server-status
https://kupata.kdo.de/server-status

Nachdem ich ein wenig mit den angezeigten Requests gespielt hatte, wurden zwei der Seiten wenige Stunden später vom Netz genommen - ohne dass ich diese überhaupt melden musste. Das ist wohl auch in den Logs aufgefallen. Monitoring FTW. Screenshots habe ich natürlich trotzdem gemacht, denn die Informationen, die durch die URL Parameter dort geleakt wurden, sind schon etwas brisanter. z.B. E-Mails, Tokens und UUIDs, die teils verwendet werden können, um Anfragen an deren Systeme zu schicken. Interessante Endpunkte, oder?

source code

Softwareaktualisierungen

Kommen wir zum Thema der Wartung von Serverkomponenten. Interessant dürfte sein, dass bei vielen Kommunen serverseitige Komponenten verwenden werden, die längst nicht mehr aktuell sind und schon seit Jahren keine Sicherheitsupdates mehr bekommen. Warum ich das sicher sagen kann?

Nun, durch eine Information Disclosure Schwachstelle (CWE-200 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N) konnte ich bei 60 der überprüften Server genau diese Informationen einsehen. Dabei handelt es sich um eine Datei, welche eine Funktion ausführt, die neben der verwendeten PHP Version auch weitere detaillierte Informationen über das System preisgibt, sofern sie existiert. Die hat eig. nichts in einer Produktivumgebung zu suchen.

PHP ist eine Sprache, die zum Programmieren von Web-Applikationen verwendet wird. PHP muss als Software auf dem Webserver installiert sein, um eine PHP-Applikationen (z.B. ein CMS) auszuführen.

Von Kommunen verwendete PHP-Binaries

Wie bei jeder Software, die aktiv weiterentwickelt wird, werden Support für Bug- und Security fixes bei älteren Versionen irgendwann eingestellt. Spätestens wenn Sicherheitslücken nicht mehr gepatched werden, wird es Zeit zu updaten.

Stellt man nun die von Kommunen verwendeten PHP Versionen der aktuellen Release-Roadmap von PHP gegenüber, kann man stark annehmen, dass bei einer Hochrechnung auf wohl über der Hälfte aller Webserver (worauf Kommunen ihre Webapplikationen laufen lassen) veraltete PHP Binaries installiert sind und auch aktiv verwendet werden.

censored data

Um sich einen Überblick zu verschaffen, welche existenten Sicherheitslücken öffentlich bekannt sind, kann man sich hier mal durch die Einträge pagnieren.

Fazit

Teilweise erschreckend, wie einfach man an vermeintlich geschützte Daten und Informationen gelangt.

Meine Vorgehensweise zielte ursprünglich tatsächlich nur auf eine kleine Range an möglichen Schwachstellen ab. Also wenige Szenarien, die bei Web- und Mail-Server/Applikationen theoretisch möglich sind und direkt abgerufen werden können, ohne Sicherheitsvorkehrungen zu umgehen.

Jetzt kann man sich die Frage stellen, wie es mit "richtigen" Angriffsvektoren auf größere Teile der Infrastrukturen aussieht. Ich meine, wenn ein kleiner Sicherheitsforscher mit den einfachsten Mitteln an solche Informationen und Daten kommt, schaffen organisierte Gruppen mit genug krimineller Energie das auch. Zudem solche Leute meist weitaus bessere und effektivere Methoden, wie auch die notwendigen Ressourcen zur Verfügung haben.

Viele der hier gezeigten Schwachstellen waren auf fehlerhafte Konfigurationen zurückzuführen. Einige davon existierten einfach nur aus Mangel und Nichtanwendung einfachster Standards. Es ist allgemein bekannt, dass IT-Fachkräfte in den Kommunen fehlen und Dienstleistungen extern eingekauft werden (müssen). Um so wichtiger wäre es zukünftig IT-Kompetenzen intern aufzubauen, damit Systeme auch kontrollierbar in eigener Hand bleiben.

Auch wir als Bürger sollten immer ein Auge darauf haben, wem wir unsere Daten anvertrauen. Klar ist eine Gemeinde, ein größerer Dienstleister oder der Mailverkehr mit staatlichen Akteuren vertrauenswürdig und man sollte annehmen, dass mit unseren persönlichen Daten entsprechen umgegangen wird. Wie man aber sieht, sind zivilgesellschaftliche Recherchen ab und an notwendig, um Schwachstellen und Probleme öffentlich aufzuzeigen und die zuständigen Stellen dahingehend zu sensibilisieren. Und wenn dies auch nur marginal dazu beiträgt, dass unsere Daten in Zukunft besser geschützt werden, dann hat es sich schon gelohnt.

Mein persönlicher Appell an euch: Versendet nicht euren Personalausweis, Reisepass oder sonstige Ausweisdokumente per E-Mail oder Onlineformular. Bleibt von eurer Seite datensparsam.

Zum Schluss möchte ich noch betonen, dass sicherlich nicht alles kaputt ist. Es gibt einige Kommunen, die aus meiner Sicht saubere Applikationen und wirklich gute online Angebote umgesetzt haben.

Ist euch eigentlich aufgefallen, dass ich bei allen beschriebenen Schwachstellen keine besonderen Schutzmaßnahmen ausgehebelt habe (Ausnahme Intranet)? Alles war öffentlich einsehbar. Ging da etwa nicht mehr? RCE wäre doch noch interessant, oder? Darüber werde ich in diesem Kontext trotz meiner (wohl vertretbaren) Motivation aber leider nicht schreiben können. § 202c StGB lässt grüßen.

Danke fürs Lesen!

Veröffentlicht am 25.10.2022