Cybersecurity

 

Cybersecurity

Letztens wurde leider meine Website mit meinen Blogposts gehackt. Dabei stellte ich mir die Frage, wie das passieren konnte und wie ich sowas in Zukunft vermeide, oder es den Hackern zumindest schwieriger zu machen. Mein Webhosting-Anbieter konnte die Seite glücklicherweise wiederherstellen. Auf der Übersicht meiner Wordpress-Seite sah ich die folgenden Sicherheitshinweise:
  • Veraltete PHP Version
  • Veraltete Wordpress Version

PHP 7.4

Vor dem Angriff auf meine Website verwendete ich noch die Version 7.4 von PHP. Diese wird nicht mehr unterstützt, was sie anfällig für Sicherheitslücken macht. Viele der Sicherheitslücken sind bereits bekannt.

XML External Entity (XXE) Injection

Eine XXE Injection ist ein Angriff, bei der bösartige XML-Daten in eine Anwedung eingeschleust werden und versucht wird, vertrauliche Informationen auszulesen oder Angriffe durchzuführen. Dies kann passieren, wenn die Anwendung unsicher konfiguriert ist und externe Entitäten in XML-Dokumenten ohne ausreichende Validierung erlaubt sind. 

Angenommen, eine Anwendung akzeptiert XML-Daten von Benutzern. Ein Angreifer sendet die folgende XML-Anfrage an die Anwendung:

<!DOCTYPE foo [
  <!ELEMENT foo ANY>
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>

In dieser XML-Anfrage definiert der Angreifer ein externes Entity namens "xxe", welches auf die Datei "/etc/passwd" zugreift. Somit erhält er die Informationen dieser Datei zurück und hat sensible Daten, auf welche er eigentlich keinen Zugriff haben sollte.

Out-of-Bounds

Eine Out-of-Bounds Vulnerability tritt auf, wenn eine Anwendung versucht, auf einen Speicherbereich zuzugreifen, welcher ausserhalb des reservierten Bereiches liegt. Dies kann zu unerwartetem Verhalten führen und Angreifern die Möglichkeit bieten, die Anwendung zu manipulieren oder sogar Code auszuführen. 

Die Ausnutzung einer Out-of-Bounds Vulnerability erfordert in der Regel jedoch ein tiefes Verständnis der Anwendung und ist nicht einfach durchzuführen.

Out-of-Bounds

Eine Integer Overflow or Wraparound Vulnerability tritt auf, wenn ein Integer einen Wert überschreitet, der ausserhalb des zulässigen Bereiches liegt. Dies kann zu unerwarteten Verhalten führen. Angreifer können dies ausnutzen, um Sicherheitsmechanismen zu umgehen.

In diesem Beispiel hat eine Anwendung einen 32-Bit-Integer, um die Anzahl der Produkte in einem Warenkorb zu speichern. Die Anzahl wird daraufhin mit dem Preis multipliziert. 

units = 2000000000 # 2 Milliarden Produkte
price_per_unit = 3 # 4 Franken pro Produkt

total_price = units * price_per_unit

Da "total_price" den Maximalwert überschreitet, ist das Ergebnis ein negativer Wert. Der Angreifer könnte nun die Produkte zu einem negativen Preis kaufen.

Server Side Request Forgery (SSRF)

Auf der Wordpress Version, welche ich verwendete, wurde von Simon Scannell und Thomas Chauchefoin eine Sicherheitslücke entdeckt, welche es Angreifern ermöglicht, sensible Daten und Services auf dem System auszulesen. Es handelt sich dabei um eine SSRF-Sicherheitslücke. Dieses Problem wurde jedoch noch nicht gelöst und es gibt noch keine neue Wordpress Version. (https://patchstack.com/database/vulnerability/wordpress/wordpress-6-1-1-unauth-blind-ssrf-vulnerability?_a_id=110)

Server Side Request Forgery (SSRF) ist eine Sicherheitslücke, bei der ein Angreifer Anfragen von einem Server auslösen kann, auf die er normalerweise keinen Zugriff hat. Dies passiert oft, indem der Angreifer Anfragen über die Schwachstellen einer Anwendung an den Server sendet, der dann Daten an den Angreifer zurückgibt. Dies kann dazu führen, dass vertrauliche Informationen offengelegt werden. SSRF-Angriffe sind gefährlich, da sie die gesamte Sicherheitsinfrastruktur eines Systems bedrohen.

Beispiel

Angenommen, eine Webanwendung akzeptiert Benutzereingaben für eine URL, die von einem internen Dienst abgerufen werden soll, um beispielsweise Metadaten einer Webseite anzuzeigen. Der Benutzer gibt die folgende URL ein:
http://internal-service/api/getdata?url=http://malicious-site.com/secret
Die Anwendung verwendet den Input, um eine HTTP-Anfrage an die angegebene URL zu senden und die Daten auf der Webseite malicious-site.com/secret abzurufen. Allerdings hat der Angreifer die URL so manipuliert, dass sie auf einen internen Dienst zeigt, den er auskundschaften möchte:
http://internal-service/api/getdata?url=http://internal-service/admin/credentials
In diesem Fall würde die Anwendung die Anfrage an den internen Dienst senden und die vertraulichen Anmeldeinformationen zurückgeben. Der Angreifer hat erfolgreich eine Anfrage manipuliert, um auf interne Ressourcen zuzugreifen, auf die er normalerweise keinen Zugriff hätte.

Schlussfolgerung

Ich kann mir Vorstellen, dass die veraltete PHP Version ein Grund für den Angriff auf meine Website war. Die PHP Version habe ich umgehend aktualisiert, um die Sicherheitslücken zu entfernen.

Es könnte auch sein, dass auf meiner Website ein SSRF-Angriff durchgeführt wurde, um meine Anmeldedaten zu erhalten. Das ist jedoch nur eine Annahme und ich kann nicht sicherstellen, ob das wirklich passiert ist. Ich werde die neue Version herunterladen, sobald sie verfügbar ist. 

Kommentare

Beliebte Posts aus diesem Blog

QuestPDF

ASP.NET Core Identity

Custom JsonConverter mit System.Text.Json