Hari 5: Trivy SCA Scan Nemukan 4 CVE di Golang API
4 min read

Hari 5: Trivy SCA Scan Nemukan 4 CVE di Golang API

Hari kelima 60 hari DevSecOps! Scan dependensi Go pakai Trivy dan nemukan 4 CVE termasuk 1 CRITICAL — termasuk library deprecated jwt-go.

devsecops
trivy
sca
golang
cve
60-days-challenge
Share

Dari Secret Scan ke Dependency Scan

Kemarin Gitleaks cuma ngecek secret yang bocor di kode. Hari ini langkahnya bergerak lebih jauh — bukan cuma kode yang kita tulis sendiri, tapi juga library orang lain yang kita pakai. Soalnya, menurut laporan industri, 70-80% kode di aplikasi modern itu berasal dari library open source. Kalau library punya celah, aplikasi kita ikut rentan.

Tools yang dipakai hari ini: Trivy — scanner SCA (Software Composition Analysis) gratis dari Aqua Security. Satu perintah dan langsung keluar daftar CVE yang ada di dependensi kita.

Install Trivy

brew install trivy

Untuk CI/CD nanti, bisa download binary langsung dari GitHub releases. Trivy support banyak bahasa — bukan cuma Go, tapi juga Node.js, Python, Docker image, bahkan Terraform.

Sengaja Tambah Library yang Rentan

Supaya bisa latihan mendeteksi CVE, kita tambah dua library yang memang sudah dikenal punya celah:

cd securebank-api
go get github.com/gin-gonic/gin@v1.9.0
go get github.com/dgrijalva/jwt-go@v3.2.0+incompatible

Kenapa dua ini?

  • gin v1.9.0 — bawa transitive dependencies (x/crypto, x/net) yang versinya udah tua dan punya CVE
  • jwt-go v3.2.0 — library JWT yang udah deprecated dan punya CVE tanpa fixed version

Satu trik yang kepakai: karena kedua library ini belum langsung dipakai di kode, go mod tidy bakal ngapus mereka. Makanya dibuat blank import supaya tetap kebaca:

package crypto

import (
    _ "github.com/gin-gonic/gin"
    _ "github.com/dgrijalva/jwt-go"
)

Trik blank import (_ "package") ini memastikan dependensi tetap ada di go.mod tanpa harus manggil fungsi apapun.

Hasil Trivy Scan: 4 CVE Ditemukan

trivy fs . --severity HIGH,CRITICAL

Satu perintah doang, langsung keluar hasilnya — 4 CVE ditemukan, termasuk 1 yang CRITICAL:

Library CVE Severity Fixed Version
dgrijalva/jwt-go CVE-2020-26160 HIGH — (deprecated)
golang.org/x/crypto CVE-2024-45337 CRITICAL 0.31.0
golang.org/x/crypto CVE-2025-22869 HIGH 0.35.0
golang.org/x/net CVE-2023-39325 HIGH 0.17.0

Yang menarik: 3 dari 4 CVE itu berasal dari transitive dependency — bukan library yang kita langsung pakai, tapi library yang dibawa oleh library lain (gin v1.9.0). Ini jadi reminder bahwa kita harus aware bukan cuma dependensi langsung, tapi juga dependensi dari dependensi.

Membuat .trivyignore: Dokumentasi Accepted Risk

Bukan berarti setiap CVE harus langsung di-fix. Kadang ada yang sengaja ditoleransi sementara, misalnya lagi nunggu migrasi ke library yang lebih baik.

Trivy nyediain file .trivyignore buat mendokumentasikan accepted risk ini:

# jwt-go deprecated — akan diganti golang-jwt/jwt/v5 di Day 07
CVE-2020-26160

# golang.org/x/crypto — transitive dari gin, akan di-fix di Day 07
CVE-2024-45337
CVE-2025-22869

# golang.org/x/net — transitive dari gin, akan di-fix di Day 07
CVE-2023-39325

File ini ditaruh di root repo supaya berlaku buat semua subdirectory. Yang penting: .trivyignore bukan tempat buat "sembunyi" masalah, tapi buat dokumentasi kenapa suatu CVE ditoleransi dan kapan rencana perbaikannya.

Simpan Report Buat Audit Trail

Buat keperluan dokumentasi dan audit, hasil scan disimpen dalam format JSON:

trivy fs . --severity HIGH,CRITICAL --format json \
  --output security/trivy-fs-report.json

File JSON ini nanti di Day 46-47 bisa di-upload ke DefectDojo buat vulnerability management yang lebih terstruktur.

Lesson Learned

1. SCA dan SAST itu beda dan saling melengkapi. SCA fokus ke dependensi pihak ketiga, SAST ke kode yang kita tulis sendiri. Keduanya harus jalan barengan — cuma scan salah satu aja ga cukup.

2. Transitive dependency itu bahaya tersembunyi. Kita cuma pakai gin, tapi otomatis dapat 3 CVE dari library yang dibawa gin. Harus aware sama rantai dependensi, bukan cuma apa yang kita langsung import.

3. Library deprecated itu ribet. jwt-go udah deprecated dan gak ada fixed version-nya. Satu-satunya jalan adalah migrasi total ke library pengganti (golang-jwt/jwt/v5). Ini bakal dilakuin di Day 07.

4. .trivyignore itu alat dokumentasi, bukan tempat sembunyi. Setiap CVE yang di-ignore harus ada justifikasi dan timeline kapan bakal diperbaiki. Tanpa itu, file ini cuma jadi cara buat menghiraukan masalah.

Kesimpulan

Satu perintah trivy fs . dan kita langsung bisa lihat bahwa 4 CVE ada di dependensi kita — termasuk 1 CRITICAL yang bisa bikin bypass autentikasi. Bayangin kalau ini gak di-scan dan langsung masuk production.

Ditemukan 4 CVE (1 CRITICAL, 3 HIGH), semua terkait library yang sengaja ditambahkan buat latihan. Di Day 07 nanti, kita akan remediasi semua: ganti jwt-go ke golang-jwt, upgrade gin ke versi terbaru, dan pastikan scan Trivy kembali bersih.

Besok lanjut ke Hari 6: SCA di Pipeline — masukkin Trivy ke CI/CD biar setiap push otomatis di-scan dan pipeline gagal kalau ada CVE CRITICAL.

Repo: github.com/stayrelevantid/chalange-devsecops

Enjoyed this article? Share it!

Share

Diskusi & Komentar

Artikel Terkait