Skip to main content

WordPress Server Compromise

Pendahuluan

Sebuah server Linux yang menjalankan beberapa instalasi WordPress terindikasi mengalami kompromi pada salah satu website. Investigasi dilakukan untuk mengetahui bagaimana attacker memperoleh akses, file apa saja yang ditanam, bagaimana payload dieksekusi, apakah terdapat persistence, serta apakah terdapat indikasi komunikasi dengan command-and-control (C2).

Investigasi menunjukkan bahwa insiden bukan sekadar aktivitas scanning terhadap WordPress. Terdapat bukti kuat berupa:

  • eksekusi PHP dari direktori mu-plugins;
  • beberapa PHP webshell dengan nama yang tidak lazim;
  • penyalahgunaan fungsi WP File Manager;
  • upload dan ekstraksi archive dari remote request;
  • eksekusi binary native oleh www-data;
  • binary yang sengaja dihapus tetapi masih berjalan di memory;
  • file PHP yang sudah dihapus tetapi masih dipegang process melalui file descriptor;
  • koneksi network dari malware ke external endpoint;
  • mekanisme self-replication;
  • indikasi penggunaan Telegram sebagai C2/telemetry;
  • dan aktivitas yang menyebabkan PHP-FPM mengalami timeout.

Dengan demikian, klasifikasi insiden paling tepat adalah server/application compromise dengan webshell, malware persistence, dan post-exploitation activity.


1. Environment yang Diinvestigasi

Environment yang ditemukan selama investigasi secara umum memiliki karakteristik:

Linux Server
    |
    +-- Nginx
    |
    +-- PHP 8.3-FPM
    |
    +-- WordPress
          |
          +-- Multiple WordPress Sites
          |
          +-- wp-content/
                |
                +-- plugins/
                +-- mu-plugins/
                +-- themes/
                +-- uploads/

Target utama yang menjadi fokus investigasi:

[REDACTED-WP-SITE]

Dalam artikel ini domain tersebut akan disebut:

target.example

User web server:

www-data

PHP runtime:

PHP 8.3-FPM


2. Scope Investigasi

Investigasi mencakup beberapa layer.

Application Layer

  • WordPress
  • WordPress plugins
  • Must-use plugins (mu-plugins)
  • WP File Manager
  • admin-ajax.php
  • PHP scripts

Web Layer

  • Nginx access log
  • Nginx error log
  • HTTP request method
  • Source IP
  • URI
  • HTTP status
  • request timing

Runtime Layer

  • PHP-FPM logs
  • PHP-FPM worker
  • slow execution
  • timeout
  • process termination
  • process tracing

Operating System Layer

  • running process
  • deleted executable
  • deleted file descriptor
  • /tmp
  • /var/tmp
  • filesystem metadata
  • process ownership

Network Layer

  • outbound connection
  • listening socket
  • connection state
  • remote IP
  • remote port
  • process-to-network mapping

3. Initial Indicators of Compromise

Beberapa filename pertama yang menjadi perhatian:

exp.php
rev.php
jokowi.php
dongak.php

File tersebut berada di lokasi:

wp-content/mu-plugins/

Lokasi ini sangat penting karena mu-plugins merupakan mekanisme WordPress untuk must-use plugins.

File PHP yang ditempatkan di lokasi tersebut dapat menjadi persistence mechanism yang lebih sulit terlihat dibandingkan plugin biasa.


4. PHP-FPM Evidence: exp.php

Salah satu bukti terkuat berasal dari PHP-FPM.

Log menunjukkan:

[18-Aug-2026 21:55:49] WARNING:
[pool www] child 285394,
script '/var/www/[REDACTED]/wp-content/mu-plugins/exp.php'
(request: "POST /wp-content/mu-plugins/exp.php")
executing too slow (5.577702 sec)

Kemudian:

[18-Aug-2026 21:56:44] WARNING:
[pool www] child 285394,
script '/var/www/[REDACTED]/wp-content/mu-plugins/exp.php'
(request: "POST /wp-content/mu-plugins/exp.php")
execution timed out (60.620911 sec), terminating

Artinya:

  1. exp.php benar-benar dieksekusi oleh PHP-FPM.
  2. Request menggunakan HTTP POST.
  3. Script berjalan lebih dari 5 detik.
  4. Script akhirnya mencapai timeout sekitar 60 detik.
  5. PHP-FPM kemudian melakukan termination terhadap worker tersebut.

Ini berbeda dengan sekadar attacker melakukan:

GET /wp-content/mu-plugins/exp.php

yang menghasilkan 404.

Dalam kasus ini, PHP-FPM sendiri mengkonfirmasi bahwa PHP interpreter menjalankan file tersebut.


5. Native Binary Execution

Investigasi kemudian menemukan indikator yang jauh lebih serius.

Process:

bad-epoll

berjalan menggunakan user:

www-data

PID yang ditemukan antara lain:

365958
365959
365960
365963

Process tersebut mempunyai working directory:

/tmp/xpl2026 (deleted)

dan executable:

/tmp/xpl2026/bad-epoll-static (deleted)

Contoh evidence:

bad-epoll 365958 www-data cwd
DIR ... /tmp/xpl2026 (deleted)

bad-epoll 365958 www-data txt
REG ... /tmp/xpl2026/bad-epoll-static (deleted)

Hal ini menunjukkan pola:

malware binary
      |
      v
/tmp/xpl2026/
      |
      +-- bad-epoll-static
      |
      +-- execution
      |
      +-- delete file
      |
      v
process tetap berjalan

Menghapus file dari filesystem tidak otomatis menghentikan process.

Process masih dapat menjalankan executable yang sudah di-unlink selama inode/file descriptor masih digunakan.


6. Deleted rev.php yang Masih Digunakan Process

Temuan yang sangat signifikan adalah:

FD 6r
/home/[REDACTED]/rev.php (deleted)

pada beberapa process bad-epoll.

Dengan kata lain:

rev.php
   |
   | executed/opened
   v
process
   |
   | rm/delete file
   v
filesystem entry hilang
   |
   +----> process masih memegang FD

Sehingga:

ls rev.php

dapat menghasilkan:

No such file

namun malware tetap mempunyai akses terhadap file tersebut.

Ini merupakan teknik umum untuk meninggalkan process aktif setelah file payload dihapus dari filesystem.


7. jokowi.php

File lain yang ditemukan dalam PHP-FPM log adalah:

wp-content/mu-plugins/jokowi.php

Evidence:

[21-Aug-2026 19:09:18] WARNING:
[pool www] child 358145,
script '/var/www/[REDACTED]/wp-content/mu-plugins/jokowi.php'
(request: "POST /wp-content/mu-plugins/jokowi.php")
executing too slow (5.381112 sec)

Pada timestamp yang sama worker lain juga menjalankan script tersebut:

child 358047
POST /wp-content/mu-plugins/jokowi.php

Kemudian:

[21-Aug-2026 19:10:13]
child 358125
POST /wp-content/mu-plugins/jokowi.php
executing too slow

dan:

[21-Aug-2026 19:10:13]
child 358115
POST /wp-content/mu-plugins/jokowi.php
executing too slow

Kemudian:

[21-Aug-2026 19:12:03]
GET /wp-content/mu-plugins/jokowi.php
executing too slow

Interpretasi

Ini merupakan bukti bahwa jokowi.php bukan hanya file yang pernah ada.

File tersebut benar-benar dipanggil dan dieksekusi oleh PHP-FPM.

Namun, Nginx access log tidak memberikan request langsung terhadap jokowi.php pada pencarian yang dilakukan.

Hal ini dapat terjadi karena:

  • access logging berbeda antar virtual host;
  • log telah mengalami rotation;
  • request masuk melalui mekanisme tertentu yang tidak tercatat seperti yang diharapkan;
  • PHP-FPM menerima execution path yang tidak mudah direlasikan langsung dengan Nginx log;
  • atau log request sudah tidak tersedia.

Karena itu, evidence PHP-FPM menjadi sumber penting dalam kasus ini.


8. dongak.php

Script lain yang muncul sebelum jokowi.php:

wp-content/mu-plugins/dongak.php

Evidence:

[21-Aug-2026 18:26:28]
POST /wp-content/mu-plugins/dongak.php
executing too slow (5.663986 sec)

dan:

[21-Aug-2026 18:27:38]
POST /wp-content/mu-plugins/dongak.php
executing too slow (6.449326 sec)

Hal ini menunjukkan terdapat beberapa script PHP berbeda dalam direktori mu-plugins yang digunakan dalam periode yang relatif berdekatan.


9. rev.php

rev.php merupakan indikator yang bahkan lebih kuat karena muncul pada beberapa layer.

PHP-FPM:

[21-Aug-2026 18:29:16]
GET /wp-content/mu-plugins/rev.php
executing too slow

Kemudian:

[21-Aug-2026 18:30:11]
GET /wp-content/mu-plugins/rev.php
execution timed out

Sementara pada OS ditemukan:

bad-epoll

yang masih memegang:

/home/[REDACTED]/rev.php (deleted)

Jadi terdapat hubungan temporal dan teknis:

rev.php
   |
   +--> PHP-FPM execution
   |
   +--> timeout
   |
   +--> deleted
   |
   +--> process masih memegang FD
   |
   +--> native malware process


10. WP File Manager Abuse

Salah satu temuan utama adalah penyalahgunaan plugin:

WP File Manager

Attacker tidak hanya melakukan scanning.

Mereka menggunakan functionality internal plugin:

admin-ajax.php

dengan action:

mk_file_folder_manager

Salah satu request penting:

GET /wp-admin/admin-ajax.php?action=mk_file_folder_manager&_wpnonce=4a15aa6730&networkhref=&cmd=extract&target=l1_d3Blci56aXA&makedir=0&reqid=1a0287f0f42304

HTTP response:

200

Source:

[REDACTED-IP]

Referer:

https://target.example/wp-admin/admin.php?page=wp_file_manager

User-Agent:

Firefox/150.0


11. Analisis cmd=extract

Parameter penting:

cmd=extract

menunjukkan bahwa request menggunakan fungsi extraction pada File Manager.

Parameter:

target=l1_d3Blci56aXA

merupakan encoded representation dari nama archive.

Hasil decoding mengarah pada:

wper.zip

Dengan demikian request tersebut dapat direpresentasikan secara konseptual sebagai:

WP File Manager
       |
       v
admin-ajax.php
       |
       v
mk_file_folder_manager
       |
       v
cmd=extract
       |
       v
wper.zip
       |
       v
extract files
       |
       v
Webroot / WordPress filesystem

Ini merupakan salah satu evidence paling penting dalam rekonstruksi attack chain.


12. File Manager sebagai Post-Exploitation Tool

Setelah attacker memperoleh kemampuan menggunakan File Manager, functionality tersebut dapat digunakan untuk:

  • listing directory;
  • upload file;
  • download file;
  • extract archive;
  • delete file;
  • membaca konfigurasi;
  • memindahkan file;
  • dan melakukan file manipulation tanpa perlu SSH.

Dengan demikian, attacker tidak harus mempunyai shell OS untuk melakukan banyak aktivitas filesystem.


13. Indikasi Pengambilan wp-config.php

Dalam log ditemukan request dengan functionality:

cmd=get

terhadap target yang mengarah pada:

wp-config.php

File tersebut merupakan salah satu file paling sensitif dalam WordPress karena dapat berisi:

DB_NAME
DB_USER
DB_PASSWORD
DB_HOST
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
NONCE_KEY

Jika attacker berhasil membaca wp-config.php, maka dampaknya dapat melampaui filesystem compromise.

Potential impact:

WordPress compromise
        |
        +--> DB credential exposure
        |
        +--> database access
        |
        +--> WordPress user manipulation
        |
        +--> content manipulation
        |
        +--> persistence

Catatan: dari evidence yang tersedia, request untuk mengambil file tersebut tercatat. Apakah seluruh isi file berhasil dieksfiltrasi perlu dibuktikan lebih lanjut dari response body, network capture, atau log aplikasi yang relevan.


14. Archive wper.zip

Archive:

wper.zip

muncul dalam attack chain sebagai object yang diekstrak menggunakan WP File Manager.

Keberadaan archive tersebut penting karena archive dapat berfungsi sebagai:

payload container

yang membawa beberapa file sekaligus.

Dengan pendekatan tersebut attacker tidak perlu meng-upload setiap PHP file satu per satu.

Attack chain dapat berupa:

Upload archive
      |
      v
wper.zip
      |
      v
File Manager extraction
      |
      +-- PHP webshell
      +-- utility
      +-- loader
      +-- payload
      +-- supporting files


15. ALFA TEaM / Webshell

Dalam filesystem investigation juga ditemukan indikasi webshell dengan karakteristik:

ALFA TEaM Shell

Webshell tersebut memiliki kemampuan seperti:

  • file management;
  • command execution;
  • process/network functionality;
  • backdoor installation;
  • CMS manipulation.

Function yang menjadi indikator kuat:

passthru()
shell_exec()
popen()
proc_open()

Function tersebut memungkinkan PHP memanggil command atau process OS.

Jika webshell dapat diakses dari internet, attacker pada dasarnya memperoleh interface remote administration dengan privilege:

www-data


16. Native Malware

Tidak berhenti pada PHP.

Investigasi menemukan binary native:

bad-epoll-static

yang berjalan sebagai:

www-data

Lokasi awal:

/tmp/xpl2026/

Nama directory:

xpl2026

menunjukkan staging area yang digunakan malware.

Setelah execution, file tersebut dihapus.

Namun process tetap aktif.

Pattern:

/tmp/xpl2026/bad-epoll-static
              |
              v
            execute
              |
              v
             PID
              |
              v
             rm
              |
              v
bad-epoll-static (deleted)
              |
              v
still running


17. Executable Stack Indicator

Dalam investigation juga ditemukan indikator executable stack pada binary/payload terkait.

Executable stack bukan bukti tunggal bahwa sebuah program pasti malware.

Namun dalam konteks:

WordPress compromise
+
webshell
+
/tmp staging
+
deleted binary
+
www-data
+
outbound connection

indikator tersebut menjadi bagian penting dari keseluruhan evidence chain.


18. Network Communication / C2

Process malware kemudian dikorelasikan dengan koneksi network.

Remote endpoint ditemukan pada:

[REDACTED-C2-IP]:4444

Process yang berkaitan:

bad-epoll

Port:

4444

Status yang terlihat:

CLOSE-WAIT

Port 4444 sendiri tidak otomatis berarti C2.

Namun kombinasi:

www-data
+
malicious-looking binary
+
deleted executable
+
/tmp/xpl2026
+
webshell
+
remote connection
+
port 4444

merupakan indikator compromise yang sangat kuat.


19. Self-Replication / Persistence

Investigasi juga menemukan mekanisme replikasi PHP.

Payload menggunakan sebuah variable payload, misalnya:

$M

dan melakukan write/copy terhadap sejumlah lokasi.

Lokasi yang terindikasi antara lain:

.cache.php
themes/index.php
wp-includes/.tmp.php
wp-includes/js/.loader.php
.well-known/.srv.php
mu-plugins/defender.php
wp-content/themes/.index.php
wp-uploads/.thumb.php

Pattern ini menunjukkan:

initial malware
      |
      v
replication routine
      |
      +--> .cache.php
      +--> .tmp.php
      +--> .loader.php
      +--> .srv.php
      +--> defender.php
      +--> .index.php
      +--> .thumb.php

Tujuannya adalah meningkatkan kemungkinan malware tetap bertahan walaupun salah satu file ditemukan dan dihapus.


20. defender.php

Nama:

defender.php

secara naming terlihat seperti security component.

Namun berdasarkan code behavior yang ditemukan, file tersebut justru terkait dengan persistence/reinfection mechanism.

Ini merupakan teknik umum malware:

menggunakan nama file yang terlihat legitimate atau security-related agar tidak langsung menarik perhatian administrator.

Karena itu, filename saja tidak boleh digunakan untuk menentukan apakah file aman.


21. Telegram C2 / Telemetry

Payload juga menunjukkan adanya fungsi yang melakukan komunikasi keluar menggunakan:

curl

serta token bot yang hardcoded.

Komunikasi tersebut digunakan untuk mengirim informasi seperti:

HTTP_HOST

dan informasi identifikasi server lainnya.

Secara konseptual:

Compromised WordPress
       |
       v
Malware PHP
       |
       v
curl
       |
       v
Telegram Bot API
       |
       v
Attacker

Hal ini menunjukkan bahwa malware bukan sekadar webshell pasif.

Malware mempunyai mekanisme telemetry / command-and-control communication.


22. Function _t() dan Fatal Error

Payload yang direplikasi mendefinisikan function:

_t()

Masalah muncul ketika dua payload berbeda berhasil berada pada environment yang sama dan keduanya mendefinisikan:

_t()

PHP kemudian menghasilkan:

Fatal error:
Cannot redeclare _t()

Akibatnya WordPress dapat mengalami:

HTTP 500

atau:

White Screen of Death

Ironisnya, persistence mechanism malware sendiri kemudian menjadi salah satu penyebab application failure.


23. XML-RPC Activity

Investigasi juga menemukan banyak request terhadap:

xmlrpc.php

Contoh:

GET /xmlrpc.php?rsd

dan:

GET /wp-content/languages/plugins/xmlrpc.php

serta:

GET /wp-content/mu-plugins/uploads/xmlrpc.php

dan:

GET /cgi-bin/xmlrpc.php

Sebagian besar mendapatkan:

404

atau:

429

Contohnya:

20.63.219.114
GET /wp-content/xmlrpc.php
404

dan:

20.196.209.81
GET /wp-content/mu-plugins/uploads/xmlrpc.php
429

Apakah ini normal?

Scanning terhadap xmlrpc.php dari internet sangat umum pada WordPress.

Itu sendiri belum membuktikan compromise.

Yang penting adalah membedakan:

GET /xmlrpc.php

dengan:

POST /xmlrpc.php

Karena XML-RPC legitimate memang dapat digunakan WordPress untuk beberapa functionality.

Sedangkan attacker juga sering melakukan:

  • XML-RPC brute-force;
  • multicall abuse;
  • vulnerability probing;
  • endpoint discovery.

Pada evidence yang diberikan, mayoritas request XML-RPC yang terlihat adalah:

GET

dan banyak mendapatkan:

404 / 429

Tidak terdapat evidence yang cukup dari potongan log tersebut untuk menyatakan bahwa XML-RPC merupakan initial access vector.


24. IP Address Activity

Beberapa source IP muncul selama investigation.

Untuk keperluan publikasi, IP disamarkan:

[ATTACKER-IP-01]
[ATTACKER-IP-02]
[ATTACKER-IP-03]
[SCANNER-IP-01]
[SCANNER-IP-02]

Penting untuk membedakan:

Confirmed malicious activity

IP yang melakukan:

admin-ajax.php
cmd=extract
cmd=get
cmd=rm

lebih kuat hubungannya dengan compromise.

Opportunistic scanning

IP yang hanya melakukan:

GET /xmlrpc.php
GET /cgi-bin/xmlrpc.php
GET /wp-content/.../xmlrpc.php

belum dapat dianggap sebagai attacker yang sama.


25. Tidak Ditemukannya bepas2.php

Investigasi juga mencoba mencari:

bepas2.php

berdasarkan dugaan bahwa:

bepas2

mungkin merupakan slang atau naming convention untuk:

bypass

Search dilakukan pada:

/home/[REDACTED]
/tmp
/var/tmp

dan kemudian dilakukan pengecekan langsung terhadap:

/home/[REDACTED]/bepas2.php
/var/www/[REDACTED]/bepas2.php

Hasil:

No such file

Tidak ditemukan:

bepas2.php

di lokasi yang diperiksa.

Kesimpulan

Tidak ada evidence filesystem saat ini yang membuktikan keberadaan:

bepas2.php

Namun absennya file tersebut tidak membuktikan bahwa file tersebut tidak pernah ada.

File bisa saja:

  • telah dihapus;
  • berada pada path lain;
  • berada pada filesystem lain;
  • dibuat sementara;
  • atau hanya merupakan filename yang tidak pernah digunakan.

26. Korelasi Timeline

Berdasarkan evidence yang berhasil dikumpulkan, timeline paling kuat adalah:

18-Aug
  |
  +-- exp.php executed
  |
  +-- PHP-FPM slow execution
  |
  +-- exp.php timeout
  |
  +-- native payload activity
  |
  v
21-Aug
  |
  +-- dongak.php
  |
  +-- rev.php
  |
  +-- rev.php timeout
  |
  +-- jokowi.php
  |      |
  |      +-- POST
  |      +-- POST
  |      +-- POST
  |      +-- GET
  |
  v
22-Aug
  |
  +-- WP File Manager activity
  |
  +-- admin-ajax
  |
  +-- cmd=extract
  |
  +-- wper.zip
  |
  +-- cmd=get
  |
  +-- sensitive file access
  |
  +-- cmd=rm
  |
  +-- rev.php deletion
  |
  v
23-Aug
  |
  +-- deleted malware processes discovered
  |
  +-- deleted rev.php FD discovered
  |
  +-- malware replication indicators
  |
  +-- application errors


27. Attack Chain yang Direkonstruksi

Berdasarkan evidence yang tersedia, attack chain dapat digambarkan sebagai:

                    INTERNET
                       |
                       v
                WordPress Target
                       |
                       v
              Vulnerable Component
                       |
                       v
                File Management
                       |
                       v
               Remote File Access
                       |
             +---------+---------+
             |                   |
             v                   v
        Upload archive       Upload PHP
          wper.zip            payload
             |                   |
             v                   v
          extract             webshell
             |                   |
             +---------+---------+
                       |
                       v
                mu-plugins/
                       |
             +---------+----------+
             |         |          |
             v         v          v
          exp.php   rev.php   jokowi.php
             |         |          |
             +---------+----------+
                       |
                       v
                Code Execution
                       |
                       v
                 www-data
                       |
             +---------+---------+
             |                   |
             v                   v
         PHP Webshell        Native Binary
                               |
                               v
                         /tmp/xpl2026
                               |
                               v
                       bad-epoll-static
                               |
                               v
                         C2 / Remote IP


28. Persistence Model

Persistence terlihat berada pada beberapa layer.

Layer 1 — WordPress

mu-plugins/*.php

Layer 2 — Hidden PHP files

.cache.php
.tmp.php
.loader.php
.srv.php
.index.php
.thumb.php

Layer 3 — Native process

bad-epoll

Layer 4 — Deleted-but-running payload

bad-epoll-static (deleted)

Layer 5 — External communication

C2 endpoint

Artinya, menghapus satu webshell saja tidak cukup.


29. Mengapa Menghapus File Saja Tidak Cukup

Misalnya administrator melakukan:

rm /path/to/rev.php

Filesystem kemudian terlihat bersih.

Namun jika process masih membuka file:

rev.php (deleted)

maka payload masih dapat berjalan.

Karena itu incident response harus mencakup:

FILE
+
PROCESS
+
MEMORY
+
NETWORK
+
PERSISTENCE

bukan hanya:

FILE


30. Impact Assessment

Berdasarkan evidence, potential impact meliputi:

Confidentiality

Potential exposure terhadap:

wp-config.php
database credentials
WordPress secrets
application configuration

Integrity

Attacker dapat:

upload files
modify files
delete files
extract archives
modify WordPress
install webshell

Availability

Evidence menunjukkan:

PHP-FPM timeout
worker termination
application errors
Fatal PHP errors
HTTP 500 / WordPress failure

Persistence

Terdapat:

multiple webshell
self-replication
native process
deleted executable

Command & Control

Terdapat indikasi:

external network communication
Telegram telemetry
C2 endpoint


31. Tingkat Keparahan

Berdasarkan keseluruhan evidence:

SEVERITY: CRITICAL

Alasannya bukan hanya karena terdapat malicious PHP file.

Melainkan karena terdapat kombinasi:

Remote file manipulation
        +
Webshell
        +
Code execution
        +
Native binary
        +
Persistence
        +
Deleted running malware
        +
Potential credential exposure
        +
C2 communication

Ini harus diperlakukan sebagai full server/application compromise, bukan sekadar infected WordPress file.


32. Hal yang Sudah Terbukti vs Hal yang Masih Hipotesis

Confirmed / Strong Evidence

Terbukti

exp.php dieksekusi
rev.php dieksekusi
jokowi.php dieksekusi
dongak.php dieksekusi

Terbukti

WP File Manager digunakan

Terbukti

cmd=extract

digunakan terhadap archive:

wper.zip

Terbukti

bad-epoll

berjalan sebagai:

www-data

Terbukti

Binary telah dihapus tetapi process masih hidup.

Terbukti

rev.php telah dihapus namun masih direferensikan oleh process melalui FD.

Terbukti

Terdapat aktivitas network yang berkorelasi dengan malware process.

Terbukti

Terdapat mekanisme PHP self-replication.


33. Hal yang Belum Dapat Dibuktikan 100%

Beberapa hal masih membutuhkan evidence tambahan.

Initial Access

Belum dapat dipastikan dengan absolut apakah initial access berasal dari:

WP File Manager vulnerability

atau:

vulnerability/plugin lain

sebelum File Manager digunakan.

wper.zip origin

Kita dapat membuktikan archive tersebut diekstrak.

Namun source upload-nya harus dikorelasikan dengan request upload untuk memastikan timestamp dan IP yang tepat.

wp-config.php exfiltration

Request cmd=get menunjukkan akses terhadap file tersebut.

Namun keberhasilan exfiltration seluruh content perlu dikonfirmasi dari:

HTTP response
network capture
application log

bepas2.php

Belum ditemukan.

XML-RPC

Belum ada evidence yang cukup untuk menyatakan XML-RPC sebagai initial compromise vector.


34. Recommended Incident Response

Untuk server yang sudah mengalami level compromise seperti ini, pendekatan paling aman adalah rebuild, bukan sekadar cleanup.

Prioritas:

1. Isolate host
2. Preserve evidence
3. Stop malicious processes
4. Block C2
5. Rotate credentials
6. Rebuild server
7. Reinstall WordPress
8. Reinstall plugins from trusted source
9. Restore clean content
10. Rotate WordPress salts
11. Rotate DB credentials
12. Validate filesystem
13. Harden WordPress
14. Monitor post-recovery


35. Credential Rotation

Karena terdapat indikasi akses terhadap:

wp-config.php

semua credential yang terdapat atau mungkin terdapat di dalam file tersebut harus dianggap compromised.

Minimal:

Database password
WordPress admin credentials
API credentials
SMTP credentials
Cloud/API keys
SSH credentials
Application secrets

jika ada.


36. WordPress Salts

Authentication salts juga sebaiknya diregenerasi.

Tujuannya untuk invalidasi session/token yang masih aktif.

Secara konsep:

Old session
      |
      v
OLD SALT
      |
      X
invalid after rotation

Ini sangat penting jika attacker pernah memperoleh access terhadap WordPress authentication material.


37. WordPress Hardening

Beberapa baseline yang direkomendasikan:

define('DISALLOW_FILE_EDIT', true);

Kemudian:

  • hapus plugin yang tidak digunakan;
  • update WordPress;
  • update semua plugin;
  • gunakan plugin dari source terpercaya;
  • batasi akses /wp-admin;
  • gunakan MFA;
  • gunakan WAF;
  • monitor perubahan file;
  • batasi permission filesystem;
  • jangan menjalankan web application dengan privilege tinggi.

38. Monitoring yang Direkomendasikan

Monitoring sebaiknya mencakup:

Filesystem

Monitor:

wp-content/
wp-content/plugins/
wp-content/mu-plugins/
wp-content/uploads/
wp-includes/

terutama:

*.php

Process

Alert jika:

www-data

menjalankan binary dari:

/tmp
/var/tmp
/dev/shm

Network

Alert outbound connection dari:

php-fpm
nginx
www-data

ke internet yang tidak diharapkan.

PHP-FPM

Monitor:

execution timeout
slow script
worker termination
child process restart


39. IOC Summary

Untuk publikasi, IOC berikut disamarkan.

IOC Type Status
exp.php PHP webshell/payload Confirmed execution
rev.php PHP payload Confirmed execution
jokowi.php PHP payload Confirmed execution
dongak.php PHP payload Confirmed execution
alpa.php Webshell Found
bad-epoll Native process Confirmed running
bad-epoll-static Native binary Deleted but running
/tmp/xpl2026 Malware staging Confirmed
wper.zip Archive Used in extraction
defender.php Persistence Suspicious/malicious
.cache.php Persistence Suspicious/malicious
.loader.php Persistence Suspicious/malicious
.srv.php Persistence Suspicious/malicious
.thumb.php Persistence Suspicious/malicious
[REDACTED-C2]:4444 Network IOC Correlated
Telegram Bot API C2/telemetry Embedded in malware
bepas2.php Suspected IOC Not found

40. Final Technical Conclusion

Investigasi menunjukkan bahwa insiden ini bukan sekadar WordPress scanning atau automated bot attack.

Terdapat evidence yang menunjukkan attacker berhasil mencapai tahap:

Remote File Manipulation
        ↓
File Upload / Extraction
        ↓
PHP Code Execution
        ↓
Webshell
        ↓
Persistence
        ↓
Native Binary Execution
        ↓
Process Hiding / Deleted Files
        ↓
External Communication
        ↓
Self-Replication

Komponen paling signifikan adalah adanya process:

bad-epoll

yang berjalan sebagai:

www-data

dari staging directory yang telah dihapus, serta adanya file descriptor terhadap:

rev.php (deleted)

Hal ini menunjukkan bahwa menghapus file malicious dari filesystem tidak serta-merta membersihkan server.

Lebih lanjut, penggunaan WP File Manager dengan:

cmd=extract

terhadap:

wper.zip

menunjukkan bahwa attacker mempunyai kemampuan untuk memanipulasi filesystem melalui layer aplikasi WordPress.

Temuan jokowi.php, dongak.php, rev.php, dan exp.php juga menunjukkan bahwa attacker menggunakan lebih dari satu PHP payload, sehingga kemungkinan besar aktivitas tersebut merupakan bagian dari satu rangkaian post-exploitation/persistence, bukan satu file yang berdiri sendiri.

Dengan adanya indikasi credential exposure, webshell, native malware, persistence, dan C2 communication, server harus dianggap fully compromised sampai dilakukan rebuild atau validasi forensik yang membuktikan sebaliknya.

Important forensic note: tidak semua aktivitas scanning yang ditemukan, khususnya request terhadap xmlrpc.php, dapat secara otomatis dikaitkan dengan attacker utama. IOC harus dikorelasikan berdasarkan timestamp, source IP, URI, HTTP method, response, process execution, dan filesystem evidence sebelum dimasukkan ke attack chain utama.