7
Kebijakan Keamanan dan Pelaporan Kerentanan
Kebijakan keamanan apkleaks sangat ramping: satu berkas berisi sembilan baris dan dua bagian. Bagian pertama mengatur cara melaporkan kerentanan, bagian kedua mengatur cara mengusulkan perbaikan atas proses pelaporan itu sendiri. .github/SECURITY.md:1-91
Kanal Pelaporan dan Tenggat Respons
Kebijakan menetapkan satu kanal masuk, yaitu surel, dan satu tenggat balasan yang tegas. Tidak ada alamat kedua, templat laporan, atau kewajiban enkripsi yang disebut di berkas tersebut.
| Butir | Isi kebijakan |
|---|---|
| Alamat laporan | [email protected], untuk kerentanan yang dicurigai maupun yang sudah dipastikan |
| Tenggat respons | balasan diterima "within 48 hours" |
| Waktu patch | secepat mungkin bergantung kompleksitas, secara historis dalam hitungan hari |
| Saran perbaikan proses | diajukan sebagai pull request |
Isi tabel diambil langsung dari .github/SECURITY.md:3-52 untuk tiga baris pertama dan dari .github/SECURITY.md:7-93 untuk baris terakhir.
Urutan interaksinya hanya satu arah: laporan masuk lewat surel, balasan keluar dalam 48 jam, lalu patch menyusul bila isu dikonfirmasi.
sequenceDiagram
autonumber
actor R as Reporter
participant M as Maintainer
participant P as Patch
R->>M: email ke [email protected]
Note over R,M: balasan dalam 48 jam
M->>M: konfirmasi isu dan nilai kompleksitas
alt isu dikonfirmasi
M->>P: siapkan patch
P-->>R: rilis patch historis dalam hitungan hari
else isu tidak dikonfirmasi
M-->>R: balasan tanpa patch
end
R->>M: pull request berisi saran perbaikan proses
%% fig: Siklus pelaporan kerentanan ke [email protected]
%% desc: Reporter mengirim surel, maintainer membalas dalam 48 jam, lalu patch dirilis bila isu dikonfirmasi.Riwayat Perbaikan Injeksi Perintah pada decompile
Fungsi decompile seluruhnya hanya sepuluh baris dan hampir semuanya berputar pada penyusunan satu string perintah. apkleaks/apkleaks.py:89-984
Nilai --args diterima sebagai satu string utuh lewat -a/--args, yang membantu menyebut contoh "Disassembler arguments (e.g. --threads-count 5 --deobf)". apkleaks/cli.py:275 String itu baru dipecah di dalam decompile.
Penyusunan perintah berjalan berlapis. Daftar args dimulai dari path jadx, path APK, flag -d, dan direktori sementara. apkleaks/apkleaks.py:90-916 Setelah itu argumen pengguna ditambahkan hasil re.split(r"\s|=", self.disarg), sehingga satu string panjang menjadi banyak elemen. apkleaks/apkleaks.py:92-957 Penggabungan kembali menjadi comm memakai quote dari shlex untuk setiap elemen, lalu kutip tunggal pada hasilnya ditukar menjadi kutip ganda sebelum os.system dipanggil. apkleaks/apkleaks.py:96-988 Import quote itu eksplisit di bagian atas modul. apkleaks/apkleaks.py:159
graph LR
A["nilai --args dari pengguna"] --> B["re.split pada spasi dan tanda sama dengan"]
B --> C["quote per argumen"]
C --> D["replace kutip tunggal menjadi kutip ganda"]
D --> E["os.system menjalankan comm"]
style A fill:#f59e0b,color:#000
style C fill:#2d7d46,color:#fff
style D fill:#dc2626,color:#fff
style E fill:#dc2626,color:#fff
%% fig: Penyusunan perintah jadx di decompile
%% desc: Argumen pengguna dipecah, di-quote satu per satu, lalu kutipnya ditukar sebelum os.system mengeksekusi string comm.⚠️ Penggantian kutip tunggal menjadi kutip ganda di baris 97 melemahkan sebagian perlindungan yang baru dipasang
quote. Di dalam kutip ganda,$dan backtick masih ditafsirkan shell, sehingga argumen yang memuat keduanya tetap bisa berubah menjadi perintah lain. Kelas isu ini masuk kanal pelaporan[email protected]. apkleaks/apkleaks.py:96-988
Permukaan Risiko Lain
Selain --args, ada dua titik lain yang menyentuh sumber daya di luar APK: binary disassembler dan berkas hasil.
| Permukaan | Mekanisme | Kondisi saat ini |
|---|---|---|
Binary jadx | which("jadx") dipakai bila ada, selain itu path diarahkan ke jadx/bin/jadx di dalam repository apkleaks/apkleaks.py:3610 | bergantung pada binary lokal atau unduhan |
Unduhan jadx | dependencies mengambil zip dari URL rilis HTTPS tetap lalu memanggil os.chmod(self.jadx, 33268) apkleaks/apkleaks.py:44-5311 | hanya berjalan setelah konfirmasi |
| Konfirmasi unduhan | integrity menampilkan "Can't find jadx binary." lalu membaca jawaban (Y/n) apkleaks/apkleaks.py:55-6012 | interaktif, satu kali per instalasi |
| Berkas hasil | self.output memakai tempfile.mkstemp bila -o tidak diberikan, dengan suffix .json atau .txt apkleaks/apkleaks.py:33-3413 | lokasi acak di direktori sementara |
Perilaku prompt unduhan itu juga tercatat di README: jadx diperlukan sebagai disassembler dan akan ditawarkan untuk diunduh bila belum ada di sistem. README.md:51-5314 Rincian pemasangan ada di Instalasi dan Dependensi, sedangkan efek argumen lain pada hasil pemindaian ada di Opsi CLI dan Argumen Disassembler.
Untuk menjaga laporan tetap dapat ditindaklanjuti, sebutkan langkah yang membuat os.system menyusun comm tertentu, misalnya nilai --args yang dipakai. Posisi decompile di antara integrity dan scanning dijelaskan di Siklus Hidup Kelas APKLeaks.