flawopen.com/Incidents/moveit-transfer-sql-injection-may-2023
MOVEit Transfer: injeksi SQL dan pencurian data massal
CVE-2023-34362 adalah SQL injection tanpa autentikasi di MOVEit Transfer. Mandiant mengamati eksploitasi sejak 27 Mei 2023, disusul pemasangan web shell LEMURLOOT dan pencurian data.[4], [3]
Bayangkan formulir memiliki kolom “nomor folder”, tetapi petugas menyalin isinya langsung ke instruksi untuk sistem arsip. Jika isinya dapat mengubah instruksi, bukan sekadar menunjuk folder, pengisi formulir bisa membuat sistem melakukan lebih dari yang dimaksud. SQL injection melewati batas yang sama: masukan tak tepercaya diperlakukan sebagai sintaks SQL, bukan sebagai nilai.[5]
Konsep Kunci & Istilah
Injeksi SQL (CWE-89)- Masukan yang digabungkan ke dalam kueri basis data mengubah apa yang dilakukan kueri itu, alih-alih diperlakukan sebagai nilai.[5]
Transfer berkas terkelola (MFT)- Perangkat lunak yang dipakai organisasi untuk bertukar berkas besar atau sensitif dengan mitra. Satu server bisa menyimpan data banyak organisasi.[3]
Web shell- Skrip yang ditanam penyerang di server web untuk mempertahankan akses. Mandiant menamai yang dipakai di sini LEMURLOOT.[3]
Kueri berparameter- Kueri yang nilainya dikirim terpisah dari teksnya, sehingga basis data tidak pernah menafsirkan data sebagai SQL.[5]
Versi terdampak dan versi perbaikan- Progress mencantumkan versi sebelum 2021.0.6, 2021.1.4, 2022.0.4, 2022.1.5, dan 2023.0.1 sebagai versi terdampak pada cabangnya masing-masing; versi yang disebutkan memuat perbaikan. Periksa cabang dan jalur peningkatan saat ini di advisori Progress.[1]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-89
- CISA KEV — ditambahkan 2023-06-02 — CVE-2023-34362
Kronologi Insiden
Mandiant melaporkan bahwa bukti paling awal eksploitasi MOVEit Transfer yang diamatinya bertanggal 27 Mei 2023.[3]
Progress mengungkap kerentanan dan meminta pelanggan memutus lalu lintas HTTP dan HTTPS sampai patch terpasang.[1]
CISA memasukkan CVE-2023-34362 ke katalog Known Exploited Vulnerabilities.[9]
Alur Serangan Langkah demi Langkah
Permintaan tanpa autentikasi
Mandiant mengamati permintaan POST yang dibuat khusus ke guestaccess.aspx MOVEit Transfer sebelum LEMURLOOT muncul; aktivitas ini tidak memerlukan login pengguna biasa.[3]
Web shell dipasang
Setelah eksploitasi, Mandiant mengamati web shell LEMURLOOT. Web shell itu dapat mendaftar dan mengambil berkas serta mengubah akun aplikasi tertentu; sumber tidak membuktikan adanya kendali administratif secara umum.[3]
Kode Sumber: Rentan vs Aman
C# ilustratif, bukan kode sumber MOVEit. Metode yang diperkuat mengubah pengenal ke tipe yang benar-benar disimpan kolom dan menolak selain itu, lalu mengirimnya sebagai parameter bertipe sehingga nilainya tidak menjadi bagian teks SQL. Salah satu kontrol saja sudah menghentikan injeksi ini; jika digabungkan, keduanya juga menolak pengenal yang tidak valid sebelum kueri dijalankan.[5]
using System.Data.SqlClient;
public static class FolderLookup
{
public static SqlDataReader Find(SqlConnection conn, string folderId)
{
// Teks kueri dan data permintaan digabungkan sehingga basis data
// tidak dapat membedakan bagian yang dimaksud pengembang sebagai data.
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");
// Nilai dikirim sebagai parameter bertipe, terpisah dari teks kueri.
var cmd = new SqlCommand("SELECT id, name FROM folders WHERE id = @id", conn);
cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
return cmd.ExecuteReader();
}
}Daftar Periksa Penguatan Sistem Rekayasa
- ✓Parameterkan setiap nilai SQL dan gagalkan CI jika masukan tak tepercaya digabungkan ke API perintah SQL; MITRE
CWE-89menyebut kueri berparameter sebagai langkah pencegahan.[5] - ✓Saran FlawOpen: setelah menemukan satu celah injeksi, cari batas data-ke-SQL yang sama di semua jalur pembentukan kueri. Perlakukan CVE berikutnya sebagai masalah terpisah kecuali advisori membuktikan akar masalah yang sama.
- ✓Terapkan panduan patch Progress pada semua instans MOVEit Transfer yang digunakan; inventarisasi semuanya dan catat versi yang telah diperbaiki sebelum memulihkan paparan normal.[1]
- ✓Jika eksploitasi dicurigai, selidiki host sebelum mengembalikannya ke layanan: cari LEMURLOOT dan akun terdampak, lalu ganti kredensial atau rahasia yang mungkin terungkap.[3]
- ✓Saran FlawOpen: tanyakan kepada penyedia transfer berkas sistem mana yang menyimpan data Anda dan gunakan inventaris itu untuk menentukan cakupan pemberitahuan dan respons insiden.
- ✓Saran FlawOpen: tetapkan masa retensi berdasarkan sensitivitas data dan kebutuhan kontrak, lalu verifikasi penghapusan; ini membatasi paparan tanpa mengasumsikan riwayat retensi korban MOVEit.
Sumber
- Progress — kerentanan kritis di MOVEit Transfer (31 Mei 2023)
- CISA dan FBI — imbauan AA23-158A: geng ransomware CL0P mengeksploitasi CVE-2023-34362
- Mandiant — kerentanan zero-day MOVEit Transfer dieksploitasi untuk mencuri data
- CVE-2023-34362 — catatan CVE
- MITRE CWE-89
- Injeksi SQL — referensi lengkap kelas dalam 11 bahasa
- Apakah stored procedure mencegah injeksi SQL?
- CVE-2025-1094: saat fungsi escape itu sendiri menjadi kerentanan
- Katalog KEV CISA — CVE-2023-34362