Hari 14: Fake Secret, Gitleaks Gak Detect — Dan Fixnya
3 min read

Hari 14: Fake Secret, Gitleaks Gak Detect — Dan Fixnya

Hari keempat belas! Commit fake secret buat test pipeline — dan nemuin gap: Gitleaks gak detect file yang di-gitignore. Tambah --no-gitignore flag, sekarang catch semua leak.

devsecops
gitleaks
secret-scanning
intentional-vuln
pipeline-testing
60-days-challenge
Share

Kenapa Perlu Test Pipeline Secara Sengaja?

Hari ini kita lakuin sesuatu yang kontra-intuitif: sengaja commit secret ke repository. Kenapa? Karena pipeline secret scanning cuma berguna kalau benar-benar jalan. Kalau setup-nya salah tapi kita percaya jalan, itu lebih bahaya daripada gak punya sama sekali.

False sense of security itu musuh terbesar DevSecOps.

Eksperimen: Commit Fake Secret

Bikin branch test/intentional-leak, tambah file configs/.env.production:

STRIPE_SECRET_KEY=sk_live_abc123verysecretkey
AWS_ACCESS_KEY_ID=AKIA3E4Y5Z6X7W8Q9R0T
AWS_SECRET_ACCESS_KEY=7hGjKmNpQrStUvWxYz2B4C6D8E0F1G2H3J4K5L6M
DATABASE_URL=postgresql://prodadmin:Xk9mP2vR7nLqW4jF@db.securebank.internal:5432/securebank_prod

Hasil Lokal: ✅ DETECTED

$ gitleaks detect --source securebank-api/configs/.env.production -v --no-git

Finding: AWS_ACCESS_KEY_ID=AKIA3E4Y5Z6X7W8Q9R0T
RuleID:  aws-access-token

Finding: AWS_SECRET_ACCESS_KEY=7hGjKmNpQrStUvWxYz2B4C6D8E0F1G2H3J4K5L6M
RuleID:  generic-api-key

leaks found: 2 ✅

Gitleaks berhasil deteksi dua secret saat scan langsung ke file.

Hasil di CI: ❌ NOT DETECTED

$ gitleaks detect --source . -v --config .gitleaks.toml
34 commits scanned.
no leaks found ❌

Gitleaks di CI bilang "no leaks found"! Ini gap kritis.

Root Cause: .gitignore vs Gitleaks

Ada dua pertahanan yang bekerja:

  1. .gitignore mencegah accidental commit ✅ — git add configs/.env.production ditolak, butuh git add -f (force)
  2. Gitleaks men-scan semua file yang tracked di git — TAPI ternyata Gitleaks default menghormati .gitignore!

Ini artinya: kalau seseorang git add -f .env.production (force-add bypass .gitignore), Gitleaks tidak akan detect file tersebut karena .gitignore memfilternya.

Diagram Pertahanan

Developer coba commit .env.production
         │
         ▼
    ┌─────────────────┐
    │   .gitignore    │ ← Pertahanan 1: Block git add biasa ✅
    │   (git add -f   │
    │   bisa bypass)  │
    └────────┬────────┘
             │ force-add
             ▼
    ┌─────────────────┐
    │    Gitleaks     │ ← Pertahanan 2: SHOULD detect ✅
    │ (--gitignore    │
    │  flag default)  │ ← BUG: Skip file yang di-gitignore ❌
    └─────────────────┘

.gitignore itu convenience feature, bukan security boundary. Tapi Gitleaks default-nya memperlakukan .gitignore sebagai security boundary — skip semua file yang di-list di sana.

Fix: --no-gitignore Flag

Satu baris yang bikin pipeline benar-benar aman:

# SEBELUM (bisa bypass)
- name: Run Gitleaks
  run: gitleaks detect --source . -v --config .gitleaks.toml

# SESUDAH (catch everything)
- name: Run Gitleaks
  run: gitleaks detect --source . -v --config .gitleaks.toml --no-gitignore

Dengan --no-gitignore, Gitleaks scan SEMUA file yang tracked di git, regardless of .gitignore. Walau seseorang git add -f file .env, Gitleaks tetap detect.

Lesson Learned

1. .gitignore bukan security boundary. Ini cuma convenience feature yang mencegah accidental commit. git add -f bisa bypass. Pipeline secret scanning harus tetap work regardless of .gitignore.

2. Default Gitleaks config itu insufficient untuk CI. Tanpa --no-gitignore, ada gap antara "file yang di-scan" dan "file yang tracked di git". Flag ini WAJIB di CI pipeline.

3. Intentional vulnerability test itu penting. Tanpa hari ini, kita gak bakal tahu bahwa Gitleaks CI gak detect file yang di-gitignore. Ini false sense of security yang dangerous.

4. AWS example keys (AKIAIOSFODNN7EXAMPLE) di-recognize Gitleaks sebagai example keys. Jadi gak di-flag sebagai finding. Buat test, gunakan key pattern yang lebih random.

5. PR context vs branch push berbeda di CI. GitHub Actions workflow hanya trigger di main, develop, dan PR ke main. Untuk test security gate, buat PR lebih realistis.

Lanjut ke Hari 15

Pipeline sekarang punya 5 lapis pertahanan yang terverifikasi:

  • .gitignore (pertahanan pertama — convenience)
  • Gitleaks dengan --no-gitignore (pertahanan kedua — security)
  • SCA Scan (Trivy)
  • SAST Scan (Semgrep)
  • Build & Test

Besok: Hari 15 — Dokumentasi Fase 1, rangkum semua yang dipelajari.

Repo: github.com/stayrelevantid/chalange-devsecops

Enjoyed this article? Share it!

Share

Diskusi & Komentar

Artikel Terkait