Audit Keamanan Repository
Cara Scaffdev memeriksa keamanan repository template sebelum clone dan install, plus panduan pemeriksaan manual.
Audit Keamanan Repository#
Menjalankan kode orang lain selalu berisiko. CLI Scaffdev memeriksa repository template sebelum meng-clone dan sebelum menginstall dependency, supaya kamu bisa berhenti sebelum kode berbahaya berjalan.
Membutuhkan CLI
0.3.0+(npx scaffdev@latest --versionuntuk cek).
1. Kenapa repository perlu diaudit#
git clone sendiri aman (hanya mengunduh file). Bahayanya muncul belakangan:
npm install/composer installbisa menjalankan script otomatis (postinstalldkk) yang mengunduh dan mengeksekusi program dari internet.- File konfigurasi (git hooks, workflow CI, task editor) bisa berisi perintah yang berjalan saat kamu memakai git atau editor.
- Karena itu audit Scaffdev ditaruh sebelum execution boundary: sebelum clone (audit remote) dan sebelum install (audit lokal + konfirmasi).
2. Alur audit di CLI#
pilih template → Run security audit? [Y/n]
→ Ya: audit statis → tampilkan hasil → konfirmasi → git clone
→ post-clone audit lokal → konfirmasi → install dependency
→ Tidak: warning → konfirmasi "Lanjut tanpa audit? [y/N]" (default N)
Melewati audit butuh persetujuan eksplisit dua kali. Tidak ada jalur diam-diam.
3. Apa yang diperiksa (pre-clone, remote)#
CLI mengunduh arsip repository (tanpa clone, tanpa eksekusi) lalu memeriksa file-file ini secara statis:
| File | Yang dicari |
|---|---|
package.json |
Script lifecycle (preinstall, install, postinstall, prepare, prepublish, prepublishOnly) + dependensi ber-URL/git |
composer.json |
Script Composer (pre-install-cmd, post-install-cmd, pre-update-cmd, post-update-cmd) |
.github/workflows/* |
Blok run: berisi shell/download, secret yang diteruskan ke curl/wget |
.vscode/tasks.json, launch.json |
Command yang didefinisikan (tidak auto-run, hanya dicatat) |
Dockerfile, compose.yml |
RUN berisi download, CMD/ENTRYPOINT shell |
Pola berbahaya yang dicari: perintah download (curl, wget, Invoke-WebRequest, certutil, bitsadmin), eksekusi (eval, exec, spawn, child_process, os.system, bash -c, powershell), dan obfuscation (base64, atob, Buffer.from, fromCharCode, EncodedCommand, eval(...), Function(...)).
4. Severity: konteks, bukan sekadar keyword#
curl sendirian bukan bukti apa-apa (dokumentasi pun menyebutnya). Severity naik bila ada kombinasi:
- INFO: command pengembangan normal yang terdeteksi.
- LOW: command eksternal tapi konteksnya sah (mis.
curldi Dockerfile, task VS Code). - MEDIUM: lifecycle script terdeteksi. Berjalan otomatis saat install, jadi wajib dibaca isinya.
- HIGH: download remote + eksekusi (
curl <url> | bash), atau secret diteruskan ke downloader. - CRITICAL: payload remote ter-obfuscate lalu dieksekusi, atau PowerShell encoded command.
Temuan HIGH/CRITICAL memblokir instalasi secara default (lanjut butuh konfirmasi eksplisit).
5. Yang TIDAK bisa diperiksa sebelum clone#
Metadata .git (config dan hooks) baru ada setelah clone, jadi audit remote tidak menyentuhnya. CLI jujur soal ini di laporan ("tidak tersedia sebelum clone") dan memeriksanya di audit lokal tahap 2 setelah clone:
core.hooksPath,core.fsmonitor,core.pager,core.sshCommandaliasberisi!(eksekusi shell),credential.helper, driver diff/merge eksternal, filterclean/smudge- Isi
.git/hooks/*(dibaca saja — hook tidak pernah dijalankan untuk diperiksa)
Bila audit lokal menemukan yang mencurigakan, instalasi di-pause sebelum npm install / composer install berjalan. Folder .git hasil clone dihapus setelah audit (seperti perilaku lama) supaya project-mu bersih.
6. Pemeriksaan manual (copy-paste)#
Perintah di bawah bisa kamu jalankan sendiri kapan pun, tanpa CLI:
# 1. Lifecycle script npm (wajib dibaca satu per satu bila ada)
node -e "const p=require('./package.json'); console.log(p.scripts)"
# 2. Script Composer
composer validate --no-check-publish 2>&1 | head -20
node -e "const c=require('./composer.json'); console.log(c.scripts)"
# 3. Cari pola download lalu eksekusi (abaikan hasil di dokumentasi/*.md)
grep -rn --include="*.json" --include="*.js" --include="*.php" --include="*.yml" -E "curl[^|]*\|\s*(bash|sh)|powershell.*-e(ncodedCommand)?" . | grep -v node_modules | head -20
# 4. Konfigurasi git mencurigakan
git config --list --show-origin | grep -iE "hookspath|fsmonitor|pager|sshcommand|credential|alias|filter|diff.*external|merge.*driver" || echo "bersih"
# 5. Hook aktif (abaikan *.sample bawaan git)
ls .git/hooks/ | grep -v "\.sample$" || echo "tidak ada hook aktif"
# 6. Workflow CI yang menjalankan shell/download
grep -rn -A3 "^ *run:" .github/workflows/ 2>/dev/null | head -30 || echo "tidak ada workflow"
7. Batasan yang jujur#
Audit ini adalah static analysis. Ia tidak bisa mendeteksi logika jahat yang disamarkan rapi, dependensi transitive yang berubah setelah audit, atau serangan yang baru muncul kemudian. Istilah yang kami pakai:
- Dipakai:
Security Audit,Repository Safety Check,Static Security Analysis,No high-risk findings detected. - Tidak dipakai:
100% Safe,Malware Free,Virus Free,Guaranteed Safe.
Tetap perlakukan template asing seperti kode asing: baca diff-nya, jalankan dulu di environment sekali pakai bila ragu, dan laporkan temuan lewat halaman Lapor Bug.
