Tutorial Semgrep: Setup SAST di CI/CD Pipeline
FA
Faris Aksa

Dipublikasikan 27 Juni 2026

Tutorial Semgrep: Setup SAST di CI/CD Pipeline

Keamanan aplikasi dimulai dari kode itu sendiri. Semgrep adalah static application security testing (SAST) tool yang mampu mendeteksi vulnerability di first-party code dengan cepat dan akurat. Artikel ini akan membahas cara mengintegrasikan Semgrep ke dalam CI/CD pipeline agar setiap commit terscan secara otomatis.

Mengapa SAST Penting di CI/CD?

Menemukan bug keamanan di production sudah terlalu terlambat. Dengan SAST, tim developer bisa mengidentifikasi issue seperti SQL injection, XSS, dan broken authentication sejak di tahap development. Semgrep menonjol karena rule-nya transparan, mudah dikustomisasi, dan mendukung banyak bahasa pemrograman populer.

Prasyarat

  • Repository yang menggunakan Git (GitHub, GitLab, atau Bitbucket)

  • Akun Semgrep (bisa gratis dengan Semgrep Community Edition)

  • CI/CD runner yang aktif

  • Node.js atau Python di environment lokal (opsional, untuk test)

Langkah 1: Install Semgrep Secara Lokal

Untuk eksplorasi awal, install Semgrep di komputer lokal menggunakan pip:

pip install semgrep

Atau via Homebrew untuk macOS:

brew install semgrep

Verifikasi instalasi:

semgrep --version

Langkah 2: Menjalankan Scan Pertama

Pindah ke direktori project dan jalankan scan dengan rule dari Semgrep Registry:

cd my-project
semgrep --config=auto .

Flag --config=auto akan otomatis mendeteksi bahasa dan menjalankan rule yang paling relevan. Output akan menampilkan file, baris, dan severity dari setiap finding.

Langkah 3: Membuat Custom Rule

Semgrep menggunakan pola yang ditulis dalam YAML. Contoh rule untuk mendeteksi penggunaan eval di JavaScript:

rules:
  - id: detect-eval
    pattern: eval(...)
    languages: [javascript]
    message: "Avoid using eval() due to security risks"
    severity: ERROR

Simpan file di .semgrep/custom-rules.yml dan jalankan:

semgrep --config .semgrep/custom-rules.yml .

Kamu juga bisa menambahkan data flow analysis untuk menangkap vulnerability yang lebih kompleks, seperti input user yang tidak tersanitasi sebelum masuk ke query database.

Langkah 4: Integrasi ke GitHub Actions

Buat file .github/workflows/semgrep.yml:

name: Semgrep SAST Scan
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  semgrep:
    runs-on: ubuntu-latest
    container:
      image: semgrep/semgrep
    steps:
      - uses: actions/checkout@v4
      - run: semgrep ci

Workflow di atas akan menjalankan Semgrep setiap kali ada push atau pull request ke branch utama. Jika ingin upload hasil ke dashboard Semgrep AppSec Platform, tambahkan environment variable SEMGREP_APP_TOKEN.

Langkah 5: Triase dan Remediasi Finding

Setelah scan berjalan, kamu akan mendapatkan daftar finding dengan kategori severity: ERROR, WARNING, atau INFO. Lakukan triase dengan tim:

  • ERROR: Wajib diperbaiki sebelum merge

  • WARNING: Dievaluasi berdasarkan konteks bisnis

  • INFO: Dokumentasikan sebagai technical debt

Gunakan fitur // nosemgrep comment di kode jika sebuah finding adalah false positive, tapi pastikan ada approval dari security lead.

Tips Optimasi Scan

Untuk project besar, scan bisa dilambatkan oleh banyak file yang tidak relevan. Tambahkan file .semgrepignore:

node_modules/
dist/
*.test.js
vendor/

Semgrep juga mendukung differential scan yang hanya memeriksa file yang berubah dalam satu commit, menghemat waktu CI secara signifikan. Dokumentasi lengkap dan source code tersedia di repository GitHub Semgrep.

Kesimpulan

Mengintegrasikan Semgrep ke CI/CD adalah langkah konkret untuk mengamankan software development lifecycle. Dengan scan otomatis di setiap commit, tim bisa menemukan dan memperbaiki vulnerability lebih awal. Bagi tim developer Indonesia yang ingin meningkatkan security posture tanpa mengorbankan velocity, Semgrep adalah tool yang patut dicoba.