Secret Scanning: Cara Mencegah API Key Bocor ke GitHub dengan Gitleaks dan Pre-commit Hook

Cara mencegah API key bocor ke GitHub dengan secret scanning. Tutorial Gitleaks, pre-commit hook, GitHub Actions, dan langkah darurat insiden

Secret scanning adalah proses memindai kode untuk menemukan data rahasia seperti API key, password, token, dan private key sebelum atau setelah tersimpan di repositori Git. Dengan tools gratis seperti Gitleaks dan pre-commit hook, API key bisa dicegat sebelum sempat ter-commit, apalagi ter-push ke GitHub. Artikel ini membahas kenapa kebocoran secret makin sering terjadi, cara memasang Gitleaks, membuat pre-commit hook, integrasi ke GitHub Actions, sampai langkah darurat kalau API key terlanjur bocor.

secret scanning gitleaks mencegah API key bocor ke GitHub

Kenapa API Key Bocor ke GitHub Makin Sering?

Laporan State of Secrets Sprawl 2026 dari GitGuardian menunjukkan masalah ini terus membesar:

Temuan (data tahun 2025)Angka
Secret baru yang bocor di GitHub publik29 juta (naik 34% dibanding tahun sebelumnya)
Secret milik layanan AI yang bocor1,27 juta (naik 81%)
Secret di file konfigurasi MCP (AI agent)24.008 unik, 2.117 terverifikasi masih valid
Repositori internal yang menyimpan minimal satu secret32,2% (vs 5,6% di repositori publik)
Secret dari 2022 yang masih bisa dipakai saat dites ulang64%

Ada tiga pelajaran penting dari data ini. Pertama, era vibe coding dan AI agent memunculkan banyak secret baru, seperti API key OpenAI, Anthropic, atau Supabase, yang sering ditulis langsung di kode atau file konfigurasi. Kedua, repositori private bukan jaminan aman; justru repositori internal jauh lebih sering menyimpan secret. Ketiga, secret yang bocor jarang diganti, sehingga tetap bisa dipakai penyerang bertahun-tahun kemudian.

Begitu API key ter-push ke repositori publik, bot penyerang bisa menemukannya dalam hitungan menit. Akibatnya bisa berupa tagihan cloud membengkak karena server dipakai menambang kripto, data pelanggan dicuri, atau kuota API AI dihabiskan orang lain.

Apa Itu Gitleaks?

Gitleaks adalah tools open-source (lisensi MIT) untuk mendeteksi secret di repositori Git, folder, file, atau input dari stdin. Gitleaks sudah membawa ratusan aturan deteksi bawaan untuk berbagai jenis secret, dari AWS access key dan GitHub token sampai API key layanan AI, dan bisa dikustomisasi lewat file .gitleaks.toml.

Gitleaks bisa dipakai di tiga titik:

  1. Di laptop developer, sebagai pre-commit hook yang memblokir commit berisi secret.
  2. Di pipeline CI/CD, sebagai lapisan kedua jika ada yang melewati hook.
  3. Untuk audit, memindai seluruh riwayat repositori yang sudah ada.

Cara Install Gitleaks

# macOS (Homebrew)
brew install gitleaks

# Docker
docker pull ghcr.io/gitleaks/gitleaks:latest

# Cek instalasi
gitleaks version

Untuk Linux dan Windows, unduh binary dari halaman rilis Gitleaks, ekstrak, lalu taruh di folder yang ada di PATH.

Cara Scan Repositori dengan Gitleaks

Scan seluruh riwayat Git

# Jalankan di dalam folder repositori
gitleaks git -v

# Simpan hasil ke file JSON
gitleaks git --report-path gitleaks-report.json

Perintah gitleaks git memindai semua commit, bukan hanya file saat ini. Ini penting karena secret yang sudah dihapus dari kode masih tersimpan di riwayat Git.

Scan folder biasa (bukan repositori Git)

gitleaks dir ./nama-folder -v

Sembunyikan nilai secret di output

gitleaks git -v --redact

Gunakan --redact saat menjalankan Gitleaks di CI atau saat berbagi hasil scan, supaya secret tidak ikut tercetak di log.

Catatan: perintah lama gitleaks detect dan gitleaks protect sudah deprecated sejak versi 8.19.0. Keduanya masih jalan, tetapi sebaiknya gunakan gitleaks git dan gitleaks dir.

Memasang Pre-commit Hook dengan Gitleaks

Pre-commit hook adalah skrip yang otomatis berjalan setiap kali Anda menjalankan git commit. Jika Gitleaks menemukan secret, commit dibatalkan sebelum masuk ke riwayat Git. Ini adalah lapisan pertahanan paling efektif karena mencegah masalah dari awal.

Cara 1: Menggunakan framework pre-commit (direkomendasikan)

Install framework pre-commit:

pip install pre-commit

Buat file .pre-commit-config.yaml di root repositori:

repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.24.2
    hooks:
      - id: gitleaks

Lalu aktifkan hook dan perbarui ke versi Gitleaks terbaru:

pre-commit autoupdate
pre-commit install

Commit file .pre-commit-config.yaml ke repositori supaya semua anggota tim memakai konfigurasi yang sama. Setiap anggota tim cukup menjalankan pre-commit install sekali setelah clone.

Cara 2: Git hook manual tanpa framework

Kalau tidak ingin memasang Python, buat file .git/hooks/pre-commit:

#!/bin/sh
gitleaks git --pre-commit --staged --redact -v
if [ $? -ne 0 ]; then
  echo "Commit dibatalkan: Gitleaks menemukan secret."
  exit 1
fi

Jadikan file tersebut executable:

chmod +x .git/hooks/pre-commit

Kelemahan cara ini, folder .git/hooks tidak ikut ter-commit, jadi setiap developer harus memasangnya sendiri.

Uji coba hook

echo 'AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"' > test.env
git add test.env
git commit -m "test"

Jika hook bekerja, commit akan ditolak dan Gitleaks menampilkan baris yang mengandung secret. Jangan lupa hapus file tes tersebut setelahnya.

Integrasi Gitleaks ke GitHub Actions

Pre-commit hook bisa dilewati, baik sengaja maupun tidak. Karena itu, pasang Gitleaks juga di CI sebagai lapisan kedua. Buat file .github/workflows/gitleaks.yml:

name: secret-scan
on:
  pull_request:
  push:
  workflow_dispatch:
jobs:
  gitleaks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - uses: gitleaks/gitleaks-action@v3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}

fetch-depth: 0 memastikan seluruh riwayat commit ikut dipindai. Untuk repositori milik akun personal, GITLEAKS_LICENSE tidak diperlukan. Untuk repositori milik organisasi, Anda perlu license key gratis yang bisa didaftarkan di gitleaks.io, lalu disimpan sebagai secret di repositori atau organisasi.

Mengatasi False Positive

Kadang Gitleaks menandai sesuatu yang bukan secret asli, misalnya contoh key di dokumentasi atau data dummy untuk testing. Ada beberapa cara untuk mengecualikannya:

1. Komentar inline

EXAMPLE_KEY = "contoh-bukan-secret-asli" # gitleaks:allow

2. File .gitleaksignore

Salin nilai Fingerprint dari hasil scan, lalu tambahkan ke file .gitleaksignore di root repositori.

3. Konfigurasi .gitleaks.toml

[extend]
useDefault = true

[[allowlists]]
description = "Abaikan folder test dan dokumentasi"
paths = ['''tests/fixtures/''', '''docs/examples/''']

Gunakan pengecualian seperlunya. Terlalu banyak allowlist justru membuka celah bagi secret asli untuk lolos.

Bagaimana Jika API Key Terlanjur Bocor?

Urutan langkahnya penting. Banyak orang langsung menghapus file atau commit, padahal itu bukan prioritas pertama.

  1. Revoke dan rotate secret saat itu juga. Nonaktifkan API key lama di dashboard penyedia layanan, lalu buat yang baru. Anggap secret yang pernah ter-push sudah diketahui penyerang, walaupun repositori langsung dihapus.
  2. Periksa log penggunaan. Cek apakah ada aktivitas mencurigakan di akun cloud atau layanan API sejak secret bocor.
  3. Hapus secret dari riwayat Git menggunakan git filter-repo atau BFG Repo-Cleaner, lalu force push. Ingat bahwa fork, clone, dan cache pihak lain mungkin masih menyimpan salinannya, karena itulah langkah pertama paling penting.
  4. Pindahkan secret ke tempat yang benar, seperti environment variable, GitHub Actions secrets, atau secret manager (HashiCorp Vault, AWS Secrets Manager, dan sejenisnya).
  5. Catat sebagai insiden. Jika secret memberi akses ke data pribadi, perusahaan mungkin punya kewajiban notifikasi sesuai UU PDP.

Fitur Bawaan GitHub: Secret Scanning dan Push Protection

GitHub juga punya fitur secret scanning dan push protection yang memblokir push berisi secret yang dikenali. Fitur ini gratis untuk repositori publik. Untuk repositori private di akun organisasi, fitur ini menjadi bagian dari layanan berbayar GitHub Secret Protection.

Fitur GitHub dan Gitleaks saling melengkapi. Push protection bekerja di server GitHub saat push, sedangkan Gitleaks bekerja lebih awal di laptop developer, bisa dikustomisasi, dan tetap berjalan di platform lain seperti GitLab, Gitea, atau Bitbucket.

Best Practice Mencegah Secret Bocor

  • Jangan pernah hardcode secret di kode. Gunakan environment variable atau secret manager.
  • Tambahkan file sensitif ke .gitignore, seperti .env, *.pem, *.key, dan file konfigurasi MCP yang berisi token.
  • Sediakan file contoh seperti .env.example berisi nama variabel tanpa nilai asli.
  • Pasang Gitleaks di pre-commit dan CI, dua lapisan lebih aman daripada satu.
  • Hati-hati dengan AI coding agent. Agen sering membaca dan menulis file .env atau konfigurasi; pastikan hasil kerjanya tetap melewati pre-commit hook.
  • Rotasi secret secara berkala dan gunakan token dengan masa berlaku serta izin seminimal mungkin.
  • Scan juga tempat lain, seperti wiki internal, Slack, dan tiket Jira. Laporan GitGuardian mencatat 28% insiden secret di 2025 sepenuhnya terjadi di luar source code.

Baca juga artikel seputar keamanan supply chain software di kategori DevSecOps dan Cyber Security.

FAQ Seputar Secret Scanning

Apa itu secret scanning?

Secret scanning adalah proses memindai kode dan riwayat Git untuk menemukan data rahasia seperti API key, password, token, dan private key, agar bisa dicegah atau segera ditangani sebelum disalahgunakan.

Apakah Gitleaks gratis?

Ya. Gitleaks open-source dengan lisensi MIT. Untuk GitHub Action di repositori milik organisasi, dibutuhkan license key yang juga gratis dan bisa didaftarkan di gitleaks.io.

Apakah menghapus file sudah cukup jika API key bocor?

Tidak. Secret tetap tersimpan di riwayat Git, dan bisa sudah disalin oleh bot atau orang lain. Langkah pertama yang wajib dilakukan adalah me-revoke dan mengganti secret tersebut.

Apakah repositori private aman dari kebocoran secret?

Tidak sepenuhnya. Laporan GitGuardian 2026 menemukan 32,2% repositori internal menyimpan minimal satu secret. Repositori private bisa bocor lewat akun yang diretas, karyawan yang keluar, atau repositori yang tidak sengaja diubah menjadi publik.

Apa beda Gitleaks dengan GitHub push protection?

Push protection bekerja di server GitHub saat push. Gitleaks bekerja lebih awal di laptop developer sebagai pre-commit hook, bisa dikustomisasi, dan bisa dipakai di platform Git mana pun. Keduanya sebaiknya dipakai bersamaan.

Kesimpulan

API key yang bocor ke GitHub adalah salah satu penyebab insiden keamanan yang paling mudah dicegah. Cukup pasang Gitleaks sebagai pre-commit hook, tambahkan scan di GitHub Actions, dan biasakan menyimpan secret di environment variable atau secret manager.

Kalau secret terlanjur bocor, ingat urutannya: revoke dan rotate dulu, baru bersihkan riwayat Git. Beberapa menit untuk setup hari ini jauh lebih murah daripada tagihan cloud yang membengkak atau data pelanggan yang dicuri.

Sumber

NextGen Digital... Welcome to WhatsApp chat
Howdy! How can we help you today?
Type here...