Malware Plugin Minecraft Solar (s0lar.net): Cara Kerja, Deteksi, dan Pembersihan
Analisis malware yang menyusup lewat file plugin Paper/Spigot dan menjadikan server bot. Cara kerjanya, cara memeriksa server, dan cara membersihkannya.

Pada Oktober 2026, salah satu server kami, Realms, ternyata membawa malware di dalam file plugin-nya. Penjelasan untuk pemain ada di pemberitahuan insiden Realms. Tulisan ini untuk sesama owner dan developer server Minecraft: cara kerja malware ini, cara memeriksa server kamu, dan cara membersihkannya.
Malware ini sudah dilaporkan juga oleh server lain, antara lain di MCAntiMalware issue #778, tulisan Plattio (lima jaringan terdampak di Jerman), dan analisis crashdemons. Kontribusi kami adalah analisis dinamis: kami menjalankannya di mesin terisolasi dan merekam apa yang benar-benar dikirim ke server pelaku.
Ringkasnya
- Sebuah loader kecil disisipkan ke satu class di file plugin yang tetap berfungsi normal. Tanggal file tidak berubah.
- Saat plugin dimuat, loader mengunduh plugin kedua yang terenkripsi dari
s0lar.net, mendekripsinya, lalu memuatnya lewatPluginManager.loadPlugin(). Plugin ini tidak terlihat di folderplugins/. - Plugin kedua (bernama "DataFixerUpper") mendaftarkan server sebagai bot, mengunggah semua file plugin dan file server ke pelaku untuk ditulari, mencuri token bot DiscordSRV, mengunggah
latest.log, lalu menunggu perintah. - Salinan payload disimpan di folder
logs/dengan nama yang mirip log biasa, ditambah karakter tak terlihat U+200B.

Dua Versi Loader
Di server kami ada dua versi sekaligus. Pembersihan pertama kami hanya menangkap versi pertama, jadi periksa keduanya.
| Versi hex | Versi Base64 | |
|---|---|---|
| String tersembunyi | Teks hex di-XOR (564A4A4E4D041111 = https://) |
Base64 di constant pool (czBsYXIubmV0 = s0lar.net) |
| Kode sisipan | Method tambahan (mis. setupServerIntegration) |
Method tersembunyi int getSemanticsId() atau getTelemetryId() (flag bridge + synthetic) dan field int |
| Pemanggilan | Di dalam method yang sudah ada | Prolog 9 byte di awal satu method: aload_0; invokevirtual getSemanticsId; aload_0; swap; putfield |
| File server | Tidak ditemukan | patchLibs() di io/papermc/paperclip/Main.class, dipanggil pertama di main() |
| Di server kami | 55 file plugin | 52 file plugin (termasuk salinan .bak) dan server.jar |
Versi Base64 ternyata sudah ada di server kami setidaknya sejak 30 Mei 2026.
Apa yang Dikirim ke Server Pelaku
Kami menjalankan plugin terinfeksi di VPS sewaan sekali pakai, dengan firewall yang hanya mengizinkan koneksi ke s0lar.net lewat proxy perekam, dan file umpan (token Discord palsu, kata sandi database palsu). Semua lalu lintas, kecuali unggahan file jar, berupa Base64 dari IV 16 byte + ciphertext AES-256-CBC, dan balasannya disamarkan sebagai halaman nginx "404 Not Found" dengan data di komentar HTML <!-- B: ... -->.
| Request | Isi (setelah didekripsi) |
|---|---|
GET /routes/0/d.php |
Unduh plugin kedua |
POST /routes/0/a.php |
Pendaftaran: port, OS, nama plugin inang, MOTD |
POST /routes/0/b.php |
Info server: hostname, port, world, daftar plugin, pemain online |
POST /routes/0/e.php |
Unggah file jar (plugin dan paper.jar) untuk ditulari, lalu ambil hasilnya |
POST /routes/0/v.php |
Token bot DiscordSRV dan nama user OS |
POST /routes/0/s.php |
File latest.log |
POST /a |
Menunggu perintah (long poll, sekitar 100 detik) |
Sebelum menghubungi server pelaku, plugin kedua mengecek koneksi internet ke cloudflare.com, google.com, bstats.org, dan github.com. Kalau gagal, ia diam.
Menurut analisis crashdemons, plugin kedua juga punya perintah tersembunyi lewat chat dan buku yang bisa menjalankan perintah console, untuk akun yang diizinkan server pelaku. Pengaturan bot yang dikirim server pelaku ke kami berisi satu UUID akun Minecraft: d7b77c65-23fe-4159-b73c-50fc3d2c293d. Malware juga mencari UUID e19212b9-53d8-44cd-8eac-41c85f8b0e28. Keduanya bisa saja akun curian, jadi pertimbangkan untuk memblokir kedua UUID ini.
Satu peringatan dari laporan lain: tanpa header a: yang benar, server pelaku mengirim payload lain yang merusak (menghapus server). Jangan mencoba mengunduh payload dari server produksi.
Cara Memeriksa Server Kamu

Jalankan di folder server (Linux):
# 1. Salinan payload: file yang namanya diakhiri karakter tak terlihat U+200B
find . -name "*$(printf '\342\200\213')" -ls
# 2. Jar terinfeksi (kedua versi), termasuk server.jar dan salinan .bak / .disabled / -jar
P='564A4A4E4D041111|czBsYXIubmV0|aHR0cHM6Ly9zMGxhci5uZXQ|bmV0LnMwbGFyLlNvbGFyTG9hZGVy'
find . \( -name '*.jar*' -o -name '*-jar' \) -type f -print0 | while IFS= read -r -d '' j; do
unzip -p "$j" 2>/dev/null | grep -a -q -E "$P" && echo "INFECTED: $j"
done
Perintah kedua menemukan semua 107 file terinfeksi yang kami uji dari server kami dan 0 dari 1.073 file bersih di server kami yang lain. Jalankan tanpa pola file seperti contoh di atas: sebagian versi unzip tidak mencocokkan '*.class' di dalam folder, sehingga melewatkan hampir semua file terinfeksi. Jangan menambahkan nama method getSemanticsId ke pencarian cepat ini, karena plugin yang sah (misalnya DriveBackupV2 dan Geyser) juga memakai nama itu.
Di server yang sedang berjalan, plugin bernama DataFixerUpper di /plugins juga tanda kuat.
Cara Membersihkan
- Matikan server. Bot bisa menulari ulang file selama server berjalan.
- Blokir koneksi keluar ke
s0lar.netdan198.167.197.169kalau host kamu mengizinkan. - Ganti setiap jar, termasuk
server.jardan isilibraries/,cache/,versions/, dengan salinan resmi. Pindahkan juga salinan.bakdan.disabledkeluar dari folder server. Jangan pakai jar dari server terinfeksi atau backup-nya tanpa diperiksa dengan perintah di atas. - Hapus file
logs/*.log.gz+ U+200B setelah menyimpan salinannya sebagai bukti. - Ganti semua rahasia yang bisa dibaca server: token bot Discord, kata sandi database, kata sandi RCON, token BungeeGuard / forwarding secret, API key panel, dan token git.
- Periksa operator dan permission (
ops.json, LuckPerms) untuk akun yang tidak kamu kenal. - Periksa server lain yang berbagi file atau staf dengan server terinfeksi, dan cek komputer developer: kami menemukan salinan jar terinfeksi di folder proyek lokal, termasuk di repo git. Plugin kedua juga membawa kode untuk membuka data terenkripsi Windows (DPAPI), yang biasa dipakai untuk mencuri kata sandi dan cookie browser, jadi jangan jalankan jar mencurigakan di komputer Windows.
Untuk plugin berbayar yang tidak punya salinan bersih, sisipan versi Base64 bisa dihapus dengan tepat: hapus method tersembunyi, field-nya, dan prolog 9 byte tadi. Pada 28 jar yang punya salinan resmi, hasil pembersihan ini identik dengan jar resmi (method dan instruksi yang sama).
Indikator (IoC)
| Jenis | Nilai |
|---|---|
| Domain | s0lar.net (didaftarkan 27 Juni 2025) |
| IP | 198.167.197.169 |
| Path | /routes/0/{a,b,d,e,s,v}.php, /a |
| File | logs/<tanggal>-<n>.log.gz + U+200B, /tmp/<angka>.jar berumur pendek |
| Plugin tersembunyi | DataFixerUpper, main com.mojang.datafixers.util.impl.EntityBrainFixer |
| Penanda jar | 564A4A4E4D041111, czBsYXIubmV0, aHR0cHM6Ly9zMGxhci5uZXQ, bmV0LnMwbGFyLlNvbGFyTG9hZGVy, cC5Bc3luY1RpbWluZ3M |
| SHA-256 plugin kedua | 3bd14a1dece3fd17c867b49c135282d304703ff1f19558abe7cba97c22023058 |
| UUID Minecraft | d7b77c65-23fe-4159-b73c-50fc3d2c293d, e19212b9-53d8-44cd-8eac-41c85f8b0e28 |
Kami sudah melaporkan domain, server, dan DNS pelaku ke penyedia masing-masing pada 17 Oktober 2026.
Penutup
Kalau server kamu ternyata terinfeksi, kamu tidak sendirian, dan ini bukan berarti kamu ceroboh: malware ini dirancang agar plugin tetap berfungsi dan tanggal file tidak berubah. Laporan teknis lengkap kami (dalam bahasa Inggris) bisa diminta lewat [email protected]. Kalau kamu menemukan versi lain, kabari kami atau komunitas di laporan publik di atas.
Ringkasan
| Aspek | Detail |
|---|---|
| Apa | Loader di file plugin yang memuat plugin bot tersembunyi dari s0lar.net |
| Terdampak | Server Paper, Spigot, Purpur, Folia |
| Mencuri | Token bot DiscordSRV, latest.log, semua file jar (untuk ditulari) |
| Ciri utama | File logs/*.log.gz + U+200B, plugin DataFixerUpper, penanda Base64/hex di jar |
| Pembersihan | Matikan server, ganti semua jar termasuk server.jar, hapus salinan payload, ganti semua rahasia |
Tentang Penulis
Sen
Founder, Owner, and Developer
Kontributor Kaizen Network
Komunitas
Bergabung dengan Kaizen Network
Gabung komunitas Discord kami untuk update dan diskusi!