FlawOpen

flawopen.com/Incidents/moveit-transfer-sql-injection-may-2023

● Progress Software · CVE-2023-34362 · May 2023 · CVSS 9.8 · Kritis
Riset Keamanan · FlawOpen

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]

💡 Penjelasan Sederhana (ELI5)

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

Kronologi Insiden

2023-05-27

Mandiant melaporkan bahwa bukti paling awal eksploitasi MOVEit Transfer yang diamatinya bertanggal 27 Mei 2023.[3]

2023-05-31

Progress mengungkap kerentanan dan meminta pelanggan memutus lalu lintas HTTP dan HTTPS sampai patch terpasang.[1]

2023-06-02

CISA memasukkan CVE-2023-34362 ke katalog Known Exploited Vulnerabilities.[9]

2023-06-07

CISA dan FBI menerbitkan imbauan bersama AA23-158A yang menyebut kampanye ini sebagai aktivitas ransomware CL0P. Mandiant kemudian memperbarui atribusinya dan menggabungkan UNC4857 ke FIN11 berdasarkan sejumlah kesamaan.[2], [3]

Alur Serangan Langkah demi Langkah

Langkah 1

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]

Langkah 2

Masukan mengubah makna kueri

Permintaan mencapai operasi SQL yang rentan. CISA menjelaskan bahwa celah ini memungkinkan akses tanpa autentikasi ke basis data; bergantung pada mesin basis data, pelaku juga dapat menyimpulkan informasi atau mengubah/menghapus data.[2], [5]

Langkah 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]

Langkah 4

Berkas dicuri besar-besaran

Mandiant mengamati pencurian berkas berskala besar. CISA dan FBI menyebut kampanye yang lebih luas sebagai aktivitas ransomware CL0P; atribusi Mandiant yang diperbarui kemudian mengaitkannya dengan FIN11.[2], [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]

IMPLEMENTASI RENTAN
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();
    }
}
PERBAIKAN AMAN & KUAT
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

Sumber