Veröffentlicht am: 30. September 2022
Autor: David Peyer
Im vergangenen Quartal haben wir keine grossen Studien oder Analysen betreffend der Schweizer Weblandschaft durchgeführt, welche wir publizieren dürfen/können. Anstelle eines Berichtes über den Zustand der Schweizer Webapplikationen möchte ich die Gelegenheit nutzen drei Beispiele aus der Praxis etwas genauer anzuschauen. Alle Fälle wurden anonymisiert und sind vereinfacht.
Subdomains sind bei der Domain codepurple.ch zum Beispiel das www von www.codepurple.ch oder supersale bei supersale.<redacted>.ch. Diese Subdomains können im DNS eingetragen werden. Dieser Eintrag zeigt dann auf den Server, auf welchem die Webseite gehostet wird.
In unserem Fall hat unser Subdomain-Scanner Alarm geschlagen und gemeldet, dass supersale.<redacted>.ch auf einen Shopify-Webshop (Webshop-Hosting) zeigt. An und für sich nichts Aussergewöhnliches. Jedoch hat die Firma <redacted> keinen Webshop mehr bei Shopify, sondern hostet diesen nun direkt bei sich. supersale.<redacted>.ch ist somit ein DNS-Eintrag der nicht mehr verwendet wir und verwaist ist. Er zeigt jedoch immer noch auf die Server von Shopify.
Wir haben nun bei Shopify einen neuen Shop registrieren mit der URL supersale.<redacted>.ch und schon wird jede Person, welche supersale.<redacted>.ch aufrufen möchte auf den von uns kontrollierten Web-Shop weitergeleitet.
Das Angriffsszenario könnte nun sein, dass die Hacker einen Shop aufsetzen, der identisch aussieht wie der originale Webshop. Die Preise werden aber um etwa 50% reduziert. Als zweiten Schritt wird eine E-Mail-Kampagne erstellt, welche über die E-Mail-Adresse info@supersale-<redacted>.ch (Achtung die Mail Adresse ist mit Bindestrich geschrieben, die Domain wurde vom den Hackern neu registriert). Der Newsletter wird dann an möglichst viele Personen versendet. Die Käufer denken es ist ein Ausverkauf und bestellen die stark vergünstigten Waren und bezahlen. Die bestellten Artikel werden jedoch nie versendet.
Die Firma von <redacted>.ch hat nun einen doppelten Schaden: Imageverlust und Kunden die Ware nie erhalten haben. Die betroffene Firma wurde von uns informiert und der Eintrag wurde innerhalb von sieben Tagen gelöscht.
Subdomain Takeover werden bei Hackern immer beliebter, da sie mit der Kontrolle über eine legitime Subdomain Services kontrollieren können. Mit der Kontrolle über eine Subdomain können viele Arten von Angriffen umgesetzt werden. Zudem geben sie dem Opfer eine falsche Sicherheit, weil das Opfer meint, dass es auf der richtigen Webseite befindet.
Wichtig ist, alle DNS-Einträge stets aktuell zu halten und nicht mehr verwendete DNS-Einträge zu entfernen.
Der zweite Fall zeigt den Weg von von LFI (Local File Inclusion) zu RCE (Remote Code Execution) mit Hilfe von SVGs bei Apache FOP. SVGs sind Vektor-Grafiken (Als Beispiel alle Grafiken in diesem Blogartikel wurden als SVG gespeichert). Apache FOP wird verwendet um PDFs zu generieren.
Hat ein Angreifer die Möglichkeit lokale Dateien auf dem Server zu lesen, auf welche ein normaler Benutzer eigentlich keinen Zugriff hat, spricht man von Local File Inclusion.
Hat ein Angreifer die Möglichkeit Code in ein System einzuschleusen und diesen auszuführen, spricht man von Remote Code Execution. Erreicht ein Angreifer RCE, kann er das kompromittierte System steuern, Daten stehlen, Ransomware einschleusen.
Bei einem Onlineportal konnte die Adresse, eine Wegbeschreibung, sowie ein Logo und ein Situationsplan hochgeladen werden. Auf Basis dieser Angaben wurde ein PDF erstellt und dieses automatisch per E-Mail versendet. Alle Text-Eingaben wurden überprüft und man konnte kein Code darüber ausführen. Auch der Upload des Situationsplanes konnte nicht missbraucht werden. Beim Logo war die Situation eine andere, hier konnten wir schadhaften Code in die SVG-Datei einschleusen. Dieser Code führte dazu, dass eine lokale Datei auf dem Server gelesen werden konnte und der Inhalt der Datei ins PDF eingefügt wurde. Mit etwas probieren konnten wir den Private-Key für den SSH-Login des Servers lesen. Mit dem SSH Private-Key kann man sich direkt auf dem Server einloggen. Wie sich zeigte war nicht nur das generieren des PDFs auf diesen Angriff anfällig, auch liefen alle Dienste unter demselben Benutzer, was es überhaupt möglich macht auf sensitive Daten wie den Private-Key zuzugreifen.
1. Alle Eingaben, die vom Benutzer gemacht werden könne, müssen überprüft und bereinigt werden – Dies betrifft nicht nur Text-Eingaben, sondern auch/vor allem File Uploads.
2. Zugriffsrechte auf dem Server so feingranular wie möglich nach dem “Principle of least privilege” (so wenig Rechte wie absolut nötig) verteilen und die einzelnen Dienste mit dem jeweiligen notwendigen Rechten betreiben.
Um das Thema RCE (Remote Code Execution) aus dem vorherigen Abschnitt aufzugreifen, beschreibe ich hier noch eine ganz einfache und simple Möglichkeit von RCE, welcher uns in freier Wildbahn begegnete. Man muss dazu noch sagen, dass es uns hier durch den Entwickler sehr einfach gemacht wurde RCE zu erreichen.
Wir stellten fest, dass der Server Linux als Betriebssystem verwendet und auf dem Server PHP-Code ausgeführt wird. PHP ist eine verbreitete Programmiersprache, welche vor allem in der Webentwicklung zum Einsatz kommt. Auf dem Server fanden wir unter https://<redacted>.ch/cmd.php eine Webseite, welche sich wie folgt präsentiert:
Ein Eingabefeld und ein Knopf um das Formular abzusenden. Der Name der Datei lässt darauf schliessen, dass man hier Befehle eingeben kann, welche auf dem Server ausgeführt werden.
Ein bekannter Kommandozeilen-Befehl, welcher bei fast allen Linux-Distributionen von Haus aus installiert ist, ist “id”. Dieser Befehl zeigt Informationen zum Benutzer an, unter welchem er ausgeführt wird. Die Eingabe von “id” ergab folgendes Resultat:
Über dieses Formular ist es also möglich Befehle auf dem Server mit den Rechten des Benutzers “nginx” auszuführen.
Das PHP-Script unter cmd.php ist sehr simpel. Über den Befehl “cat cmd.php” (cat ist ein Kommandozeilenprogramm um Dateien zu lesen) kann man sich das Skript “cmd.php” selber anzeigen lassen:
<pre><?php if(isset($_POST['cmd'])) echo system($_POST['cmd']); ?> </pre> <form action="" method="post"> <textarea name="cmd"><?php echo @$_POST['cmd']?></textarea> <br /> <input type="submit" value="Submit"/> </form>
Ein solch simples und vergessenes PHP-Skript kann sehr gefährlich sein.
Wenn man eine Applikation deployt, sollte man jegliche Debug-Informationen oder Debug-Skripte nicht auch auf den Server kopieren oder man sollte diese Skripte an einem geschützten Ort (Bsp. Passwort geschützt auf dem Server) ablegen, damit nicht jeder diese aufrufen kann.
Gerne beraten wir Sie zu Cybersecurity-Themen.
Folgende Blog-Beiträge könnten Sie interessieren:
Ein 8-stelliges Passwort mit Nummern, Gross- und Kleinbuchstaben und Sonderzeichen kann in unter einer Stunde geknackt werden.
Quelle: Hive Systems
X
Gerne beraten wir Sie zu Cybersecurity-Themen.
Kontaktieren Sie uns unverbindlich:
Kathrin Müller freut sich auf Ihre Kontaktaufnahme und organisiert je nach Bedürfnis gerne ein Meeting.
nanio GmbH (Codepurple)
Moosweg 24
5606 Dintikon
Impressum| Datenschutz| © Codepurple 2024. Alle Rechte vorbehalten