flawopen.com/Incidents/moveit-transfer-sql-injection-may-2023
MOVEit Transfer: SQL-Injection und massiver Datendiebstahl
CVE-2023-34362 war eine nicht authentifizierte SQL-Injection in MOVEit Transfer. Mandiant beobachtete Ausnutzung ab dem 27. Mai 2023, gefolgt von LEMURLOOT-Web-Shells und Datendiebstahl.[4], [3]
Stellen Sie sich ein Formular mit dem Feld „Ordnernummer“ vor. Die Sachbearbeitung kopiert den Inhalt jedoch direkt in einen Befehl an das Ablagesystem. Kann das Feld den Befehl ändern, statt nur einen Ordner zu benennen, kann die Eingabe mehr auslösen als vorgesehen. SQL-Injection überschreitet dieselbe Grenze: Nicht vertrauenswürdige Eingaben werden als SQL-Syntax statt als Wert behandelt.[5]
Kernkonzepte & Begriffe
SQL-Injection (CWE-89)- Eine in eine Datenbankabfrage eingefügte Eingabe verändert, was die Abfrage tut, statt als Wert behandelt zu werden.[5]
Managed File Transfer (MFT)- Software, mit der Organisationen große oder sensible Dateien mit Partnern austauschen. Ein Server kann Daten vieler Organisationen enthalten.[3]
Web-Shell- Ein Skript, das ein Angreifer auf einem Webserver ablegt, um Zugang zu behalten. Mandiant bezeichnete die hier genutzte als LEMURLOOT.[3]
Parametrisierte Abfrage- Eine Abfrage, deren Werte getrennt vom Abfragetext gesendet werden, sodass die Datenbank Daten nie als SQL interpretiert.[5]
Betroffene und korrigierte Versionen- Progress nennt für die jeweiligen Zweige Versionen vor 2021.0.6, 2021.1.4, 2022.0.4, 2022.1.5 und 2023.0.1 als betroffen; diese Versionen enthalten den Fix. Prüfen Sie Ihren Zweig und den aktuellen Upgradepfad im Progress-Hinweis.[1]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-89
- CISA KEV — aufgenommen am 2023-06-02 — CVE-2023-34362
Vorfall-Zeitstrahl
Mandiant datiert die frühesten von ihr beobachteten Hinweise auf eine Ausnutzung von MOVEit Transfer auf den 27. Mai 2023.[3]
Progress legt die Schwachstelle offen und rät Kunden, HTTP- und HTTPS-Verkehr bis zum Patch zu sperren.[1]
Die CISA nimmt CVE-2023-34362 in ihren Katalog Known Exploited Vulnerabilities auf.[9]
Schritt-für-Schritt Angriffsablauf
Eine Anfrage ohne Anmeldung
Mandiant beobachtete präparierte POST-Anfragen an guestaccess.aspx von MOVEit Transfer, bevor LEMURLOOT auftauchte; dafür war keine reguläre Benutzeranmeldung erforderlich.[3]
Eine Web-Shell wird installiert
Nach der Ausnutzung beobachtete Mandiant die LEMURLOOT-Web-Shell. Sie konnte Dateien auflisten und abrufen sowie einen bestimmten Anwendungskonten-Eintrag bearbeiten; generische Administratorkontrolle belegen die Quellen nicht.[3]
Quellcode: Verwundbar vs. Sicher
Illustratives C#, kein MOVEit-Quellcode. Die gehärtete Methode wandelt die ID in den Typ um, den die Spalte tatsächlich speichert, lehnt alles andere ab und sendet sie dann als typisierten Parameter, sodass der Wert nie Teil des SQL-Texts wird. Jede der beiden Kontrollen verhindert diese Injection allein; zusammen weisen sie zusätzlich fehlerhafte IDs zurück, bevor die Abfrage ausgeführt wird.[5]
using System.Data.SqlClient;
public static class FolderLookup
{
public static SqlDataReader Find(SqlConnection conn, string folderId)
{
// Abfragetext und Anfragedaten werden verkettet, sodass die Datenbank
// nicht erkennen kann, welcher Teil als Daten gedacht war.
string sql = "SELECT id, name FROM folders WHERE id = '" + folderId + "'";
var cmd = new SqlCommand(sql, conn);
return cmd.ExecuteReader();
}
}using System;
using System.Data;
using System.Data.SqlClient;
public static class FolderLookup
{
public static SqlDataReader Find(SqlConnection conn, string folderId)
{
if (!long.TryParse(folderId, out long id) || id <= 0)
throw new ArgumentException("folderId must be a positive integer");
// Der Wert wird als typisierter Parameter getrennt vom Abfragetext übergeben.
var cmd = new SqlCommand("SELECT id, name FROM folders WHERE id = @id", conn);
cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
return cmd.ExecuteReader();
}
}Checkliste für Engineering & Systemsicherheit
- ✓Parametrisieren Sie jeden SQL-Wert und lassen Sie die CI bei nicht vertrauenswürdiger Zeichenkettenverkettung in SQL-Befehls-APIs scheitern; MITRE
CWE-89nennt parametrisierte Abfragen als Schutzmaßnahme.[5] - ✓FlawOpen-Empfehlung: Suchen Sie nach einem gefundenen Injection-Fehler in allen Abfragepfaden nach derselben unsicheren Grenze zwischen Daten und SQL. Behandeln Sie spätere CVEs als eigene Fehler, sofern deren Hinweise keine gemeinsame Ursache belegen.
- ✓Wenden Sie die Patch-Empfehlung des Anbieters Progress auf alle installierten MOVEit-Transfer-Instanzen an; inventarisieren Sie sie und halten Sie die korrigierte Version fest, bevor Sie den normalen Zugriff wiederherstellen.[1]
- ✓Untersuchen Sie einen möglicherweise betroffenen Host vor der Wiederinbetriebnahme: Suchen Sie nach LEMURLOOT und betroffenen Konten und erneuern Sie anschließend möglicherweise offengelegte Zugangsdaten oder Geheimnisse.[3]
- ✓FlawOpen-Empfehlung: Fragen Sie Dateiübertragungsanbieter, welche Systeme Ihre Daten gespeichert haben, und nutzen Sie das Inventar für Umfang und Benachrichtigung der Incident Response.
- ✓FlawOpen-Empfehlung: Legen Sie die Aufbewahrung anhand der Datensensibilität und vertraglichen Notwendigkeit fest und prüfen Sie die Löschung. So begrenzen Sie Risiken, ohne eine bestimmte Aufbewahrungsdauer bei MOVEit-Opfern zu unterstellen.
Quellen
- Progress — kritische Schwachstelle in MOVEit Transfer (31. Mai 2023)
- CISA und FBI — Warnung AA23-158A: Ransomware-Bande CL0P nutzt CVE-2023-34362 aus
- Mandiant — Zero-Day-Schwachstelle in MOVEit Transfer für Datendiebstahl ausgenutzt
- CVE-2023-34362 — CVE-Eintrag
- MITRE CWE-89
- SQL-Injection — vollständige Referenz der Klasse in 11 Sprachen
- Verhindern Stored Procedures SQL-Injection?
- CVE-2025-1094: als die Escape-Funktion selbst die Schwachstelle war
- CISA-KEV-Katalog — CVE-2023-34362