Cycode

resmi

Tingkatkan keamanan dalam siklus hidup pengembangan Anda melalui pemindaian SAST, SCA, Secrets, dan IaC dengan Cycode.

Dokumentasi

Panduan Pengguna Cycode CLI

Antarmuka Baris Perintah (CLI) Cycode adalah aplikasi yang dapat Anda instal secara lokal untuk memindai repositori Anda terhadap rahasia, kesalahan konfigurasi infrastruktur sebagai kode, kerentanan analisis komposisi perangkat lunak, dan masalah pengujian keamanan aplikasi statis.

Panduan ini memandu Anda melalui instalasi dan penggunaan.

Daftar Isi

  1. Prasyarat
  2. Instalasi
    1. Instal Cycode CLI
      1. Menggunakan Perintah Auth
      2. Menggunakan Perintah Configure
      3. Tambahkan ke Variabel Lingkungan
        1. Di Unix/Linux
        2. Di Windows
    2. Instal Pre-Commit Hook
  3. Perintah Cycode CLI
  4. Perintah MCP
    1. Memulai Server MCP
    2. Opsi yang Tersedia
    3. Alat MCP
    4. Contoh Penggunaan
    5. Konfigurasi Lanjutan
  5. Perintah Platform
    1. Menemukan Perintah
    2. Contoh
    3. Catatan & Batasan
  6. Perintah Scan
    1. Menjalankan Pemindaian
      1. Opsi
        1. Ambang Keparahan
        2. Monitor
        3. Laporan Cycode
        4. Kerentanan Paket
        5. Kepatuhan Lisensi
        6. Pemulihan Kunci
        7. Berhenti saat Error
      2. Pemindaian Repositori
        1. Opsi Branch
      3. Pemindaian Path
        1. Pemindaian Rencana Terraform
      4. Pemindaian Riwayat Commit
        1. Opsi Rentang Commit (Pemindaian Diff)
      5. Pemindaian Pre-Commit
      6. Pemindaian Pre-Push
    2. Hasil Pemindaian
      1. Tampilkan/Sembunyikan Rahasia
      2. Soft Fail
      3. Contoh Hasil Pemindaian
        1. Contoh Hasil Rahasia
        2. Contoh Hasil IaC
        3. Contoh Hasil SCA
        4. Contoh Hasil SAST
      4. Panduan Remediasi Kustom Perusahaan
    3. Mengabaikan Hasil Pemindaian
      1. Mengabaikan Nilai Rahasia
      2. Mengabaikan Nilai SHA Rahasia
      3. Mengabaikan Path
      4. Mengabaikan Aturan Rahasia, IaC, atau SCA
      5. Mengabaikan Paket
      6. Mengabaikan melalui file konfigurasi
  7. Perintah Report
    1. Menghasilkan Laporan SBOM
  8. Perintah Import
  9. Log Pemindaian
  10. Bantuan Sintaks

Prasyarat

  • Aplikasi Cycode CLI memerlukan Python versi 3.9 atau lebih baru. Perintah MCP hanya tersedia untuk Python 3.10 ke atas. Jika Anda menggunakan versi Python yang lebih lama, perintah ini tidak akan tersedia.
  • Gunakan perintah cycode auth untuk mengautentikasi ke Cycode dengan CLI
    • Atau, Anda bisa mendapatkan Client ID dan Client Secret Key Cycode dengan mengikuti langkah-langkah yang dijelaskan di halaman Token Akun Layanan dan Token Akses Pribadi, yang berisi detail tentang cara mendapatkan nilai-nilai ini.

Instalasi

Langkah-langkah instalasi berikut berlaku untuk sistem operasi Windows dan UNIX / Linux.

[!NOTE] Langkah-langkah berikut mengasumsikan penggunaan python3 dan pip3 untuk perintah terkait Python; namun, beberapa sistem mungkin menggunakan perintah python dan pip, tergantung pada konfigurasi lingkungan Python Anda.

Instal Cycode CLI

Untuk menginstal aplikasi Cycode CLI di mesin lokal Anda, lakukan langkah-langkah berikut:

  1. Buka aplikasi baris perintah atau terminal Anda.

  2. Jalankan salah satu perintah berikut:

    • Untuk menginstal dari PyPI:

      pip3 install cycode
      
    • Untuk menginstal dari Homebrew:

      brew install cycode
      
    • Untuk menginstal dari GitHub Releases navigasikan dan unduh executable untuk sistem operasi dan arsitektur Anda, lalu jalankan perintah berikut:

    cd /path/to/downloaded/cycode-cli
    chmod +x cycode
    ./cycode
    
  3. Terakhir, autentikasi CLI. Ada tiga metode untuk mengatur client ID dan kredensial Cycode (client secret atau token OIDC ID):

Menggunakan Perintah Auth

[!NOTE] Ini adalah metode yang direkomendasikan untuk menyiapkan mesin lokal Anda agar terautentikasi dengan Cycode CLI.

  1. Ketik perintah berikut ke jendela terminal/baris perintah Anda:

    cycode auth

  2. Jendela browser akan muncul, meminta Anda untuk masuk ke Cycode (seperti yang terlihat di bawah):

    Cycode login
  3. Masukkan kredensial login Anda di halaman ini dan masuk.

  4. Anda akhirnya akan dibawa ke halaman di bawah, di mana Anda akan diminta untuk memilih grup bisnis yang ingin Anda otorisasi dengan Cycode (jika berlaku):

    authorize CLI

    [!NOTE] Ini akan menjadi metode default untuk mengautentikasi dengan Cycode CLI.

  5. Klik tombol Allow untuk mengotorisasi Cycode CLI pada grup bisnis yang dipilih.

    allow CLI
  6. Setelah selesai, Anda akan melihat layar berikut jika berhasil dipilih:

    successfully auth
  7. Di layar terminal/baris perintah, Anda akan melihat yang berikut saat keluar dari jendela browser:

    Successfully logged into cycode

Menggunakan Perintah Configure

[!NOTE] Jika Anda sudah mengatur Client ID dan Client Secret Cycode melalui variabel lingkungan Linux atau Windows, kredensial tersebut akan diutamakan daripada metode ini.

  1. Ketik perintah berikut ke jendela terminal/baris perintah Anda:

    cycode configure
    
  2. Masukkan nilai URL API Cycode Anda (Anda dapat mengosongkan untuk menggunakan nilai default).

    Cycode API URL [https://api.cycode.com]: https://api.onpremise.com

  3. Masukkan nilai URL APP Cycode Anda (Anda dapat mengosongkan untuk menggunakan nilai default).

    Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com

  4. Masukkan nilai Client ID Cycode Anda.

    Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d

  5. Masukkan nilai Client Secret Cycode Anda (lewati jika Anda berencana menggunakan token OIDC ID).

    Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e

  6. Masukkan nilai Token OIDC ID Cycode Anda (opsional).

    Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

  7. Jika nilai berhasil dimasukkan, Anda akan melihat pesan berikut:

    Successfully configured CLI credentials!

    atau/dan

    Successfully configured Cycode URLs!

Jika Anda masuk ke folder .cycode di bawah folder pengguna Anda, Anda akan menemukan kredensial ini dibuat dan ditempatkan di file credentials.yaml di folder tersebut. URL ditempatkan di file config.yaml di folder tersebut.

Tambahkan ke Variabel Lingkungan

Di Unix/Linux:

export CYCODE_CLIENT_ID={your Cycode ID}

dan

export CYCODE_CLIENT_SECRET={your Cycode Secret Key}

Jika organisasi Anda menggunakan autentikasi OIDC, Anda dapat memberikan token ID sebagai gantinya (atau sebagai tambahan):

export CYCODE_ID_TOKEN={your Cycode OIDC ID token}

Di Windows

  1. Dari Panel Kontrol, navigasikan ke menu System:

    system menu
  2. Selanjutnya, klik Advanced system settings:

    advanced system setting
  3. Di jendela System Properties yang terbuka, klik tombol Environment Variables:

    environments variables button
  4. Buat variabel CYCODE_CLIENT_ID dan CYCODE_CLIENT_SECRET dengan nilai yang cocok dengan ID dan Secret Key Anda. Jika Anda mengautentikasi melalui OIDC, tambahkan CYCODE_ID_TOKEN dengan nilai token OIDC ID Anda juga:

    environment variables window
  5. Masukkan cycode.exe ke dalam path untuk menyelesaikan instalasi.

Instal Pre-Commit Hook

Pre-commit dan pre-push hook Cycode dapat diatur dalam repositori lokal Anda sehingga aplikasi Cycode CLI akan mengidentifikasi masalah apa pun dengan kode Anda secara otomatis sebelum Anda melakukan commit atau push ke basis kode Anda.

[!NOTE] Pre-commit dan pre-push hook tidak tersedia untuk pemindaian IaC.

Lakukan langkah-langkah berikut untuk menginstal pre-commit hook:

Menginstal Pre-Commit Hook

  1. Instal framework pre-commit (Python 3.9 atau lebih tinggi harus diinstal):

    pip3 install pre-commit
    
  2. Navigasikan ke direktori teratas repositori Git lokal yang ingin Anda konfigurasi.

  3. Buat file YAML baru bernama .pre-commit-config.yaml (sertakan awalan .) di direktori teratas repositori yang berisi berikut ini:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
    
  4. Ubah file yang dibuat sesuai kebutuhan spesifik Anda. Gunakan hook ID cycode untuk mengaktifkan pemindaian Rahasia. Gunakan hook ID cycode-sca untuk mengaktifkan pemindaian SCA. Gunakan hook ID cycode-sast untuk mengaktifkan pemindaian SAST. Jika Anda ingin mengaktifkan semua jenis pemindaian, gunakan konfigurasi ini:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
          - id: cycode-sca
            stages: [pre-commit]
          - id: cycode-sast
            stages: [pre-commit]
    
  5. Instal hook Cycode:

    pre-commit install
    

    Instalasi hook yang berhasil akan menghasilkan pesan: Pre-commit installed at .git/hooks/pre-commit.

  6. Jaga pre-commit hook tetap terbarui:

    pre-commit autoupdate
    

    Ini akan secara otomatis menaikkan rev di .pre-commit-config.yaml ke versi terbaru Cycode CLI yang tersedia.

[!NOTE] Pemicu terjadi pada perintah git commit. Hook hanya terpicu pada file yang di-staging untuk commit.

Menginstal Pre-Push Hook

Untuk menginstal pre-push hook sebagai tambahan atau pengganti pre-commit hook:

  1. Tambahkan pre-push hook ke file .pre-commit-config.yaml Anda:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  2. Instal pre-push hook:

    pre-commit install --hook-type pre-push
    
  3. Untuk kedua pre-commit dan pre-push hook, gunakan:

    pre-commit install
    pre-commit install --hook-type pre-push
    

[!NOTE] Pre-push hook terpicu pada perintah git push dan hanya memindai commit yang akan di-push.

Perintah Cycode CLI

Berikut adalah opsi dan perintah yang tersedia dengan aplikasi Cycode CLI:

OpsiDeskripsi
-v, --verboseTampilkan log detail.
--no-progress-meterJangan tampilkan pengukur kemajuan.
--no-update-notifierJangan periksa pembaruan CLI.
-o, --output [rich|text|json|table]Tentukan jenis output. Defaultnya adalah rich.
--client-id TEXTTentukan client ID Cycode untuk eksekusi pemindaian spesifik ini.
--client-secret TEXTTentukan client secret Cycode untuk eksekusi pemindaian spesifik ini.
--id-token TEXTTentukan token OIDC ID Cycode untuk eksekusi pemindaian spesifik ini.
--install-completionInstal completion untuk shell saat ini..
--show-completion [bash|zsh|fish|powershell|pwsh]Tampilkan completion untuk shell yang ditentukan, untuk menyalinnya atau menyesuaikan instalasi.
-h, --helpTampilkan opsi untuk perintah yang diberikan.
PerintahDeskripsi
authAutentikasi mesin Anda untuk mengaitkan CLI dengan akun Cycode Anda.
configurePerintah awal untuk mengonfigurasi autentikasi klien CLI Anda.
ignoreAbaikan nilai, path, atau ID aturan tertentu.
mcpMulai server Model Context Protocol (MCP) untuk mengaktifkan integrasi AI dengan kemampuan pemindaian Cycode.
scanPindai konten untuk pelanggaran Rahasia/IaC/SCA/SAST. Anda perlu menentukan jenis pemindaian yang akan dilakukan: commit-history/path/repository/dll.
reportHasilkan laporan. Anda perlu menentukan jenis laporan yang akan dilakukan sebagai SBOM.
statusTampilkan status CLI dan keluar.

Perintah MCP [EKSPERIMENTAL]

[!WARNING] Perintah MCP hanya tersedia untuk Python 3.10 ke atas. Jika Anda menggunakan versi Python yang lebih lama, perintah ini tidak akan tersedia.

Perintah Model Context Protocol (MCP) memungkinkan Anda memulai server MCP yang mengekspos kemampuan pemindaian Cycode ke sistem dan aplikasi AI. Ini memungkinkan model AI untuk berinteraksi dengan alat Cycode CLI melalui protokol standar.

[!TIP] Untuk pengalaman terbaik, instal Cycode CLI secara global di sistem Anda menggunakan pip install cycode atau brew install cycode, lalu autentikasi sekali dengan cycode auth. Setelah instalasi dan autentikasi global, Anda tidak perlu mengonfigurasi variabel lingkungan CYCODE_CLIENT_ID dan CYCODE_CLIENT_SECRET di file konfigurasi MCP Anda.

Add MCP Server to Cursor using UV

Memulai Server MCP

Untuk memulai server MCP, gunakan perintah berikut:

cycode mcp

Secara default, ini memulai server menggunakan transport stdio, yang cocok untuk integrasi lokal dan aplikasi AI yang dapat memunculkan subproses.

Opsi yang Tersedia

OpsiDeskripsi
-t, --transportJenis transport untuk server MCP: stdio, sse, atau streamable-http (default: stdio)
-H, --hostAlamat host untuk mengikat server (hanya digunakan untuk transport non stdio) (default: 127.0.0.1)
-p, --portNomor port untuk mengikat server (hanya digunakan untuk transport non stdio) (default: 8000)
--helpTampilkan pesan bantuan dan opsi yang tersedia

Alat MCP

Server MCP menyediakan alat berikut yang dapat digunakan sistem AI:

Nama AlatDeskripsi
cycode_secret_scanPindai rahasia yang di-hardcode
cycode_sca_scanPindai Analisis Komposisi Perangkat Lunak (SCA) - kerentanan dan masalah lisensi
cycode_iac_scanPindai kesalahan konfigurasi Infrastruktur sebagai Kode (IaC)
cycode_sast_scanPindai Pengujian Keamanan Aplikasi Statis (SAST) - kualitas kode dan kelemahan keamanan
cycode_statusDapatkan versi Cycode CLI, status autentikasi, dan informasi konfigurasi

Setiap alat pemindaian menerima dua mode input yang saling eksklusif:

  • paths (lebih disukai) — satu atau lebih path file atau direktori yang ada di disk. Direktori dipindai secara rekursif. Mesin Cycode menangani penemuan dan pemfilteran file, seperti yang dilakukan cycode scan -t <type> path ./src dari CLI.
  • files (fallback) — kamus yang memetakan path file ke konten lengkapnya sebagai string. Gunakan ini hanya ketika file tidak tersedia di disk (mis. pengeditan dalam memori yang belum disimpan).

[!TIP] Gunakan paths bila memungkinkan. Melewatkan file besar (seperti package-lock.json) sebagai konten inline dapat melebihi batas token dan memperlambat klien AI. Dengan paths, mesin Cycode membaca file langsung dari disk.

Semua alat pemindaian mengembalikan objek JSON yang menyertakan field "summary" dengan jumlah pelanggaran yang dapat dibaca manusia (mis. "Cycode found 3 violations: 1 CRITICAL, 2 HIGH.") selain array "detections" lengkap.

Contoh Penggunaan

Contoh Perintah Dasar

Mulai server MCP dengan pengaturan default (transport stdio):

cycode mcp

Mulai server MCP dengan transport stdio eksplisit:

cycode mcp -t stdio

Mulai server MCP dengan transport Server-Sent Events (SSE):

cycode mcp -t sse -p 8080

Mulai server MCP dengan transport HTTP streamable pada host dan port kustom:

cycode mcp -t streamable-http -H 0.0.0.0 -p 9000

Pelajari lebih lanjut tentang jenis Transport MCP di Spesifikasi Protokol MCP – Transport.

Contoh Konfigurasi

Menggunakan MCP dengan Cursor/VS Code/Claude Desktop/dll (mcp.json)

[!NOTE] Untuk lingkungan Cycode EU, pastikan untuk mengatur nilai CYCODE_API_URL dan CYCODE_APP_URL yang sesuai di variabel lingkungan (mis., https://api.eu.cycode.com dan https://app.eu.cycode.com).

Ikuti panduan ini untuk mengonfigurasi server MCP di VS Code/GitHub Copilot Anda. Perlu diingat bahwa di settings.json, ada objek mcp yang berisi sub-objek servers bersarang, bukan objek mcpServers mandiri.

Untuk transport stdio (eksekusi langsung):

{
  "mcpServers": {
    "cycode": {
      "command": "cycode",
      "args": ["mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

Untuk transport stdio dengan instalasi pipx:

{
  "mcpServers": {
    "cycode": {
      "command": "pipx",
      "args": ["run", "cycode", "mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

Untuk transport stdio dengan instalasi uvx:

{
  "mcpServers": {
    "cycode": {
      "command": "uvx",
      "args": ["cycode", "mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

Untuk transport SSE (Server-Sent Events):

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

Untuk transport SSE pada port kustom:

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8080/sse"
    }
  }
}

Untuk transport HTTP streamable:

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}
Menjalankan Server MCP di Latar Belakang

Untuk transport SSE (mulai server terlebih dahulu, lalu konfigurasi klien):

# Start the MCP server in the background
cycode mcp -t sse -p 8000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

Untuk transport HTTP streamable:

# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.2:9000/mcp"
    }
  }
}

Konfigurasi Lanjutan

Sertifikat Kustom dan Timeout (Lingkungan Proxy)

Jika organisasi Anda menggunakan proxy perusahaan atau bundel CA kustom untuk inspeksi HTTPS, Anda perlu memberi tahu Cycode CLI (dan tumpukan TLS Python yang mendasarinya) di mana menemukan bundel sertifikat tepercaya. Anda juga dapat meningkatkan timeout panggilan alat MCP jika pemindaian terpotong.

Variabel LingkunganDeskripsi
REQUESTS_CA_BUNDLEPath ke file bundel CA kustom (.pem atau .crt). Digunakan oleh pustaka requests untuk semua panggilan HTTPS yang dilakukan oleh Cycode CLI.
SSL_CERT_FILEPath ke file bundel CA kustom. Digunakan oleh modul ssl tingkat rendah Python. Atur ini bersama REQUESTS_CA_BUNDLE untuk cakupan penuh.
MCP_TOOL_TIMEOUTTimeout (dalam detik) yang ditunggu klien MCP seperti Claude dan GitHub Copilot untuk panggilan alat selesai. Tingkatkan ini jika pemindaian yang berjalan lama terpotong sebelum selesai.

[!TIP] Atur REQUESTS_CA_BUNDLE dan SSL_CERT_FILE ke path bundel CA yang sama. REQUESTS_CA_BUNDLE mencakup lapisan HTTP; SSL_CERT_FILE mencakup lapisan TLS tingkat rendah. Hanya menggunakan salah satu mungkin masih menyebabkan kesalahan sertifikat di beberapa lingkungan.

Contoh konfigurasi mcp.json dengan sertifikat kustom dan timeout yang lebih lama:

{
  "mcpServers": {
    "cycode": {
      "command": "cycode",
      "args": ["mcp"],
      "env": {
        "REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
        "SSL_CERT_FILE": "/path/to/your/corporate-ca-bundle.pem",
        "MCP_TOOL_TIMEOUT": "1800"
      }
    }
  }
}

[!NOTE] Server MCP memerlukan autentikasi Cycode CLI yang tepat untuk berfungsi. Pastikan Anda telah mengautentikasi menggunakan cycode auth atau mengonfigurasi kredensial Anda sebelum memulai server MCP.

Pra-otorisasi Alat untuk Subagen (Claude Code)

Ketika Claude Code mendelegasikan pekerjaan ke subagen latar belakang (mis. untuk menjalankan pemindaian secara paralel), subagen tersebut tidak dapat menampilkan prompt izin interaktif. Jika alat Cycode belum disetujui sebelumnya, pemindaian akan gagal secara diam-diam dalam konteks subagen.

Untuk pra-otorisasi alat MCP Cycode agar berfungsi di semua konteks termasuk subagen, tambahkan ke daftar allowedTools di pengaturan Claude Code Anda (~/.claude/settings.json):

{
  "allowedTools": [
    "mcp__cycode__cycode_secret_scan",
    "mcp__cycode__cycode_sca_scan",
    "mcp__cycode__cycode_iac_scan",
    "mcp__cycode__cycode_sast_scan",
    "mcp__cycode__cycode_status"
  ]
}

Setelah ditambahkan, Claude Code tidak akan meminta persetujuan saat alat ini dipanggil, dan mereka akan bekerja dengan benar di dalam subagen.

Pemecahan Masalah MCP

Jika Anda mengalami masalah dengan server MCP, Anda dapat mengaktifkan pencatatan debug untuk mendapatkan informasi lebih rinci tentang apa yang terjadi. Ada dua cara untuk mengaktifkan pencatatan debug:

  1. Menggunakan flag -v atau --verbose:
cycode -v mcp
  1. Menggunakan variabel lingkungan CYCODE_CLI_VERBOSE:
CYCODE_CLI_VERBOSE=1 cycode mcp

Log debug akan menampilkan informasi rinci tentang:

  • Startup dan konfigurasi server
  • Percobaan dan status koneksi
  • Eksekusi alat dan hasilnya
  • Setiap kesalahan atau peringatan yang terjadi

Informasi ini dapat membantu ketika:

  • Mendiagnosis masalah koneksi
  • Memahami mengapa alat tertentu tidak berfungsi
  • Mengidentifikasi masalah autentikasi
  • Men-debug masalah spesifik transport

Konfigurasi MCP

Perintah Platform [BETA]

[!WARNING] Perintah platform dalam status beta. Perintah, argumen, dan format output dihasilkan secara dinamis dari spesifikasi API Cycode dan dapat berubah antar rilis tanpa pemberitahuan. Jangan mengandalkannya dalam otomatisasi produksi dulu.

Perintah cycode platform mengekspos API baca platform Cycode sebagai perintah CLI. Ini mengelompokkan endpoint berdasarkan sumber daya (mis. projects, violations, workflows) dan mengubah parameter setiap endpoint menjadi argumen CLI bertipe dan flag --option.

cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>

Spesifikasi OpenAPI diambil dari API Cycode pada penggunaan pertama dan di-cache di ~/.cycode/openapi-spec.json selama 24 jam. Perintah yang tidak terkait (cycode scan, cycode status, dll.) tidak memicu pengambilan.

[!NOTE] Anda harus terautentikasi (cycode auth atau variabel lingkungan CYCODE_CLIENT_ID / CYCODE_CLIENT_SECRET) agar cycode platform dapat menemukan dan menjalankan perintah. Perintah Cycode CLI lainnya berfungsi tanpa autentikasi.

Menemukan Perintah

Karena perintah dihasilkan dari spesifikasi, sumber kebenaran untuk apa yang tersedia adalah --help:

cycode platform --help                  # list all resource groups
cycode platform projects --help         # list actions on a resource
cycode platform projects list --help    # list options/arguments for an action

Contoh Platform

# List projects with pagination
cycode platform projects list --page-size 25

# View a single project by ID
cycode platform projects view <project-id>

# Count violations across the tenant
cycode platform violations count

# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL

Semua output adalah JSON secara default — salurkan melalui jq untuk pemfilteran ad-hoc:

cycode platform projects list --page-size 100 | jq '.items[].name'

Catatan & Batasan Platform

  • Hanya-baca saat ini. Hanya endpoint GET yang diekspos dalam beta ini.
  • Didorong oleh spesifikasi. Menambahkan endpoint baru ke API akan memunculkannya secara otomatis saat cache berikutnya disegarkan.
  • Tidak ada spesifikasi yang dibundel. Pemanggilan cycode platform pertama setelah instalasi (atau setelah cache 24 jam kedaluwarsa) melakukan pengambilan jaringan. Pada koneksi lambat, panggilan pertama ini mungkin memakan waktu beberapa detik; panggilan berikutnya hampir instan hingga cache kedaluwarsa.
  • Timpa TTL cache dengan CYCODE_SPEC_CACHE_TTL=<seconds>.

Perintah Scan

Menjalankan Pemindaian

Aplikasi Cycode CLI menawarkan beberapa jenis pemindaian sehingga Anda dapat memilih opsi yang paling sesuai dengan kasus Anda. Berikut adalah opsi dan perintah yang tersedia saat ini:

OpsiDeskripsi
-t, --scan-type [secret|iac|sca|sast]Tentukan pemindaian yang ingin Anda jalankan (secret/iac/sca/sast), defaultnya adalah secret.
--show-secret BOOLEANTampilkan rahasia dalam teks biasa. Lihat bagian Tampilkan/Sembunyikan Rahasia untuk detail lebih lanjut.
--soft-fail BOOLEANJalankan pemindaian tanpa gagal, selalu kembalikan kode status non-error. Lihat bagian Soft Fail untuk detail lebih lanjut.
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL]Hanya tampilkan pelanggaran pada level yang ditentukan atau lebih tinggi.
--sca-scanTentukan pemindaian SCA yang ingin Anda jalankan (package-vulnerabilities/license-compliance). Defaultnya adalah keduanya.
--monitorJika ditentukan, hasil pemindaian akan dicatat di Cycode.
--cycode-reportTampilkan tautan ke laporan pemindaian di platform Cycode di output konsol.
--no-restoreJika ditentukan, Cycode tidak akan menjalankan perintah restore. Ini HANYA akan memindai dependensi langsung!
--stop-on-errorBatalkan pemindaian jika terjadi kegagalan pengumpulan file atau pemulihan dependensi, alih-alih melewatkan file yang gagal dan melanjutkan.
--gradle-all-sub-projectsJalankan perintah restore gradle untuk semua sub proyek. Ini harus dijalankan dari
--maven-settings-fileHanya untuk Maven, memungkinkan penggunaan file settings.xml kustom saat memindai dependensi
--helpTampilkan opsi untuk perintah yang diberikan.
PerintahDeskripsi
commit-historyPindai riwayat commit atau lakukan pemindaian diff antara commit tertentu
pathPindai file di path yang diberikan dalam perintah
pre-commitGunakan perintah ini untuk memindai konten yang belum di-commit
repositoryPindai repositori git termasuk riwayatnya

Opsi

Opsi Severity

Untuk membatasi hasil pemindaian ke ambang keparahan tertentu, argumen --severity-threshold dapat ditambahkan ke perintah scan.

Misalnya, perintah berikut akan memindai repositori untuk pelanggaran kebijakan yang memiliki keparahan Medium atau lebih tinggi:

cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase

Opsi Monitor

[!NOTE] Opsi ini hanya tersedia untuk pemindaian SCA.

Untuk mendorong hasil pemindaian yang terkait dengan kebijakan SCA yang ditemukan dalam pemindaian tipe SCA ke Cycode, tambahkan argumen --monitor ke perintah scan.

Misalnya, perintah berikut akan memindai repositori untuk pelanggaran kebijakan SCA dan mendorongnya ke platform Cycode:

cycode scan -t sca --monitor repository ~/home/git/codebase

Opsi Laporan Cycode

Untuk setiap pemindaian yang dilakukan menggunakan Cycode CLI, laporan dibuat secara otomatis dan hasilnya dikirim ke Cycode. Hasil ini terkait dengan kebijakan yang relevan (mis., kebijakan SCA untuk pemindaian Repositori) dalam platform Cycode.

Untuk mencetak URL langsung ke laporan Cycode ini di output CLI Anda setelah pemindaian selesai, tambahkan argumen --cycode-report ke perintah scan Anda.

cycode scan --cycode-report repository ~/home/git/codebase

Semua hasil pemindaian dari CLI akan muncul di bagian Log CLI Cycode. Jika Anda menyertakan flag --cycode-report dalam perintah Anda, tautan langsung ke laporan spesifik akan ditampilkan di terminal Anda setelah hasil pemindaian.

[!WARNING] Anda harus memiliki peran owner atau admin di Cycode untuk melihat halaman ini.

cli-report

Halaman laporan akan terlihat seperti di bawah ini:

Opsi Kerentanan Paket

[!NOTE] Opsi ini hanya tersedia untuk pemindaian SCA.

Untuk memindai kerentanan paket tertentu dari repositori lokal Anda, tambahkan argumen --sca-scan package-vulnerabilities setelah opsi -t sca atau --scan-type sca.

Pada contoh sebelumnya, jika Anda hanya ingin menjalankan pemindaian SCA pada kerentanan paket, Anda dapat menjalankan yang berikut:

cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase

Opsi Kepatuhan Lisensi

[!NOTE] Opsi ini hanya tersedia untuk pemindaian SCA.

Untuk memindai cabang tertentu dari repositori lokal Anda, tambahkan argumen --sca-scan license-compliance diikuti dengan nama cabang yang ingin Anda pindai.

Pada contoh sebelumnya, jika Anda hanya ingin memindai cabang bernama dev, Anda dapat menjalankan yang berikut:

cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev

Opsi Pemulihan Kunci

[!NOTE] Opsi ini hanya tersedia untuk pemindaian SCA.

Saat menjalankan pemindaian SCA, Cycode CLI secara otomatis mencoba memulihkan (menghasilkan) file kunci dependensi untuk setiap file manifes yang didukung yang ditemukannya. Ini memungkinkan pemindaian dependensi transitif, bukan hanya yang tercantum langsung di manifes. Untuk melewatkan langkah ini dan hanya memindai dependensi langsung, gunakan flag --no-restore.

Ekosistem berikut mendukung pemulihan file kunci otomatis:

EkosistemFile ManifesFile Kunci yang DihasilkanAlat yang Dipanggil (ketika file kunci tidak ada)
npmpackage.jsonpackage-lock.jsonnpm install --package-lock-only --ignore-scripts --no-audit
Yarnpackage.jsonyarn.lockyarn install --ignore-scripts
pnpmpackage.jsonpnpm-lock.yamlpnpm install --ignore-scripts
Denodeno.json / deno.jsoncdeno.lock(hanya baca file kunci yang ada)
Gogo.modgo.mod.graphgo list -m -json all + go mod graph
Mavenpom.xmlbcde.mvndepsmvn dependency:tree
Gradlebuild.gradle / build.gradle.ktsgradle-dependencies-generated.txtgradle dependencies -q --console plain
SBTbuild.sbtbuild.sbt.locksbt dependencyLockWrite
NuGet*.csprojpackages.lock.jsondotnet restore --use-lock-file
RubyGemfileGemfile.lockbundle --quiet
Poetrypyproject.tomlpoetry.lockpoetry lock
PipenvPipfilePipfile.lockpipenv lock
PHP Composercomposer.jsoncomposer.lockcomposer update --no-cache --no-install --no-scripts --ignore-platform-reqs

Jika file kunci sudah ada bersama manifes, Cycode membacanya langsung tanpa menjalankan perintah instalasi apa pun.

Prasyarat SBT: Plugin sbt-dependency-lock harus diinstal. Tambahkan baris berikut ke project/plugins.sbt:

addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")

Opsi Berhenti saat Error

Secara default, Cycode terus memindai meskipun file tidak dapat dibaca (mis. karena kesalahan izin) atau file kunci dependensi tidak dapat dihasilkan selama pemindaian SCA. Item yang gagal dilewati dengan peringatan dan pemindaian dilanjutkan dengan file yang tersisa.

Gunakan --stop-on-error untuk mengubah perilaku ini: pemindaian dibatalkan segera pada kegagalan pertama tersebut dan melaporkan kesalahan.

cycode scan -t sca --stop-on-error path ~/home/git/codebase

Ini berguna dalam pipeline CI di mana kegagalan diam-diam akan menghasilkan hasil pemindaian yang tidak lengkap. Ketika --stop-on-error dipicu, Anda dapat memperbaiki masalah yang mendasarinya atau, untuk kegagalan pemulihan SCA secara khusus, tambahkan --no-restore untuk melewatkan pembuatan file kunci dan hanya memindai dependensi langsung.

Ketika --stop-on-error digunakan, CLI membedakan antara kesalahan pemindaian dan pelanggaran kebijakan melalui kode keluar:

Kode KeluarArti
0Pemindaian selesai tanpa pelanggaran
1Pemindaian selesai dan ditemukan pelanggaran
2Pemindaian dibatalkan karena kesalahan (hanya ketika --stop-on-error diatur)

Pemindaian Repositori

Pemindaian repositori memeriksa seluruh repositori lokal untuk setiap rahasia yang terbuka atau kesalahan konfigurasi yang tidak aman. Jenis pemindaian yang lebih holistik ini melihat semuanya: status repositori Anda saat ini dan riwayat commit-nya. Ini akan mencari tidak hanya rahasia yang saat ini terbuka di dalam repositori tetapi juga rahasia yang sebelumnya dihapus.

Untuk menjalankan pemindaian repositori penuh, jalankan yang berikut:

cycode scan repository {{path}}

Misalnya, jika Anda ingin memindai repositori yang disimpan di ~/home/git/codebase, Anda dapat menjalankan yang berikut:

cycode scan repository ~/home/git/codebase

Opsi berikut tersedia untuk digunakan dengan perintah ini:

OpsiDeskripsi
-b, --branch TEXTCabang untuk dipindai, jika tidak diatur, memindai cabang default

Opsi Branch

Untuk memindai cabang tertentu dari repositori lokal Anda, tambahkan argumen -b (sebagai alternatif, --branch) diikuti dengan nama cabang yang ingin Anda pindai.

Berdasarkan contoh sebelumnya, jika Anda hanya ingin memindai cabang bernama dev, Anda dapat menjalankan yang berikut:

cycode scan repository ~/home/git/codebase -b dev

Pemindaian Path

Pemindaian path memeriksa direktori lokal tertentu dan semua konten di dalamnya, alih-alih hanya berfokus pada repositori GIT.

Untuk menjalankan pemindaian direktori, jalankan yang berikut:

cycode scan path {{path}}

Misalnya, pertimbangkan skenario di mana Anda ingin memindai direktori yang terletak di ~/home/git/codebase. Anda kemudian dapat menjalankan yang berikut:

cycode scan path ~/home/git/codebase

Pemindaian Rencana Terraform

Cycode CLI mendukung pemindaian rencana Terraform (mendukung Terraform 0.12 dan yang lebih baru)

File rencana Terraform harus dalam format JSON (memiliki ekstensi .json)

Jika Anda hanya memiliki file konfigurasi, Anda dapat menghasilkan rencana dengan melakukan hal berikut:

  1. Inisialisasi direktori kerja yang berisi file konfigurasi Terraform:

    terraform init

  2. Buat rencana eksekusi Terraform dan simpan output biner:

    terraform plan -out={tfplan_output}

  3. Ubah file output biner menjadi JSON yang dapat dibaca:

    terraform show -json {tfplan_output} > {tfplan}.json

  4. Pindai {tfplan}.json Anda dengan Cycode CLI:

    cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json

Pemindaian Riwayat Commit

[!NOTE] Pemindaian Riwayat Commit tidak tersedia untuk pemindaian IaC.

Perintah pemindaian riwayat commit menyediakan dua kemampuan utama:

  1. Pemindaian Riwayat Penuh: Analisis semua commit dalam riwayat repositori
  2. Pemindaian Diff: Pindai hanya perubahan antara commit tertentu

Pemindaian rahasia dapat menganalisis semua commit dalam riwayat repositori karena rahasia yang diperkenalkan dan kemudian dihapus masih bisa bocor atau terbuka. Untuk pemindaian SCA dan SAST, perintah riwayat commit berfokus pada pemindaian perbedaan/perubahan antara commit, menjadikannya sempurna untuk tinjauan pull request dan pemindaian inkremental.

Pemindaian riwayat commit memeriksa riwayat commit repositori Git Anda dan dapat digunakan baik untuk analisis historis komprehensif maupun pemindaian diff yang ditargetkan dari perubahan tertentu.

Untuk menjalankan pemindaian riwayat commit, jalankan yang berikut:

cycode scan commit-history {{path}}

Misalnya, pertimbangkan skenario di mana Anda ingin memindai riwayat commit untuk repositori yang disimpan di ~/home/git/codebase. Anda kemudian dapat menjalankan yang berikut:

cycode scan commit-history ~/home/git/codebase

Opsi berikut tersedia untuk digunakan dengan perintah ini:

OpsiDeskripsi
-r, --commit-range TEXTPindai rentang commit di repositori git ini, secara default cycode memindai semua riwayat commit (contoh: HEAD~1)

Opsi Rentang Commit (Pemindaian Diff)

Opsi rentang commit memungkinkan pemindaian diff – hanya memindai perubahan antara commit tertentu alih-alih seluruh riwayat repositori. Ini sangat berguna untuk:

  • Validasi pull request: Pindai hanya perubahan yang diperkenalkan dalam PR
  • Pemindaian CI/CD inkremental: Fokus pada perubahan terbaru daripada seluruh basis kode
  • Tinjauan cabang fitur: Bandingkan perubahan terhadap cabang main/master
  • Optimasi kinerja: Pemindaian lebih cepat dengan membatasi ruang lingkup ke perubahan yang relevan

Sintaks Rentang Commit

Opsi --commit-range (-r) mendukung sintaks revisi Git standar:

SintaksDeskripsiContoh
commit1..commit2Perubahan dari commit1 ke commit2abc123..def456
commit1...commit2Perubahan di commit2 tidak di commit1main...feature-branch
commitPerubahan dari commit ke HEADHEAD~1
branch1..branch2Perubahan dari branch1 ke branch2main..feature-branch

Contoh Pemindaian Diff

Pindai perubahan di commit terakhir:

cycode scan commit-history -r HEAD~1 ~/home/git/codebase

Pindai perubahan antara dua commit tertentu:

cycode scan commit-history -r abc123..def456 ~/home/git/codebase

Pindai perubahan di cabang fitur Anda dibandingkan dengan main:

cycode scan commit-history -r main..HEAD ~/home/git/codebase

Pindai perubahan antara main dan cabang fitur:

cycode scan commit-history -r main..feature-branch ~/home/git/codebase

Pindai semua perubahan dalam 3 commit terakhir:

cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase

[!TIP] Untuk pipeline CI/CD, Anda dapat menggunakan variabel lingkungan seperti ${{ github.event.pull_request.base.sha }}..${{ github.sha }} (GitHub Actions) atau $CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA (GitLab CI) untuk hanya memindai perubahan PR/MR.

Pemindaian Pre-Commit

Pemindaian pre-commit secara otomatis mengidentifikasi masalah apa pun sebelum Anda melakukan commit perubahan ke repositori Anda. Tidak perlu menjalankan pemindaian ini secara manual; konfigurasikan pre-commit hook seperti yang dijelaskan di bagian Instalasi panduan ini.

Setelah menginstal pre-commit hook, Anda mungkin sesekali ingin melewatkan pemindaian selama commit tertentu. Untuk melakukan ini, tambahkan yang berikut ke perintah git Anda untuk melewatkan pemindaian untuk satu commit:

SKIP=cycode git commit -m <your commit message>`

Pemindaian Pre-Push

Pemindaian pre-push secara otomatis mengidentifikasi masalah apa pun sebelum Anda mendorong perubahan ke repositori jarak jauh. Hook ini berjalan di sisi klien dan hanya memindai commit yang akan di-push, menjadikannya efisien untuk menangkap masalah sebelum mencapai repositori jarak jauh.

[!NOTE] Pre-push hook tidak tersedia untuk pemindaian IaC.

Pre-push hook terintegrasi dengan framework pre-commit dan dapat dikonfigurasi untuk berjalan sebelum operasi git push apa pun.

Menginstal Pre-Push Hook

Untuk mengatur pre-push hook menggunakan framework pre-commit:

  1. Instal framework pre-commit (jika belum diinstal):

    pip3 install pre-commit
    
  2. Buat atau perbarui file .pre-commit-config.yaml Anda untuk menyertakan pre-push hook:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  3. Untuk beberapa jenis pemindaian, gunakan konfigurasi ini:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push          # Secrets scan
            stages: [pre-push]
          - id: cycode-sca-pre-push      # SCA scan
            stages: [pre-push]
          - id: cycode-sast-pre-push     # SAST scan
            stages: [pre-push]
    
  4. Instal pre-push hook:

    pre-commit install --hook-type pre-push
    

    Instalasi yang berhasil akan menghasilkan pesan: Pre-push installed at .git/hooks/pre-push.

  5. Jaga pre-push hook tetap terbarui:

    pre-commit autoupdate
    

Cara Kerja Pemindaian Pre-Push

Pre-push hook:

  • Menerima informasi tentang commit apa yang sedang di-push
  • Menghitung rentang commit yang sesuai untuk dipindai
  • Untuk cabang baru: memindai semua commit dari dasar penggabungan dengan cabang default
  • Untuk cabang yang ada: hanya memindai commit baru sejak push terakhir
  • Menjalankan pemindaian komprehensif yang sama seperti mode pemindaian Cycode lainnya

Deteksi Cabang Default Cerdas

Pre-push hook secara cerdas mendeteksi cabang default untuk perhitungan dasar penggabungan menggunakan urutan prioritas ini:

  1. Variabel Lingkungan: CYCODE_DEFAULT_BRANCH - memungkinkan penggantian manual
  2. Git Remote HEAD: Menggunakan git symbolic-ref refs/remotes/origin/HEAD untuk mendeteksi cabang default jarak jauh yang sebenarnya
  3. Git Remote Info: Jatuh kembali ke git remote show origin jika symbolic-ref gagal
  4. Fallback Hardcoded: Menggunakan nama cabang default umum (origin/main, origin/master, main, master)

Mengatur Cabang Default Kustom:

export CYCODE_DEFAULT_BRANCH=origin/develop

Deteksi cerdas ini memastikan pre-push hook bekerja dengan benar terlepas dari apakah repositori Anda menggunakan main, master, develop, atau nama cabang default lainnya.

Melewatkan Pemindaian Pre-Push

Untuk melewatkan pemindaian pre-push untuk operasi push tertentu, gunakan:

SKIP=cycode-pre-push git push

Atau untuk melewatkan semua pre-push hook:

git push --no-verify

[!TIP] Pre-push hook dipicu pada perintah git push dan hanya memindai commit yang akan di-push, menjadikannya lebih efisien daripada memindai seluruh repositori.

Mengecualikan Path Dari Pemindaian

Anda dapat menggunakan file .cycodeignore untuk memberi tahu Cycode CLI file dan direktori mana yang akan dikecualikan dari pemindaian. Ini bekerja seperti file .gitignore. Ini membantu Anda memfokuskan pemindaian pada kode yang relevan dan mencegah path tertentu memicu pelanggaran secara lokal.

Cara Kerjanya

  1. Buat file bernama .cycodeignore di folder kerja Anda.
  2. Daftarkan file dan direktori yang ingin Anda kecualikan, menggunakan pola yang sama seperti .gitignore.
  3. Tempatkan file ini di direktori tempat Anda berencana menjalankan perintah cycode scan.

[!WARNING]

  • File tidak valid: Jika file .cycodeignore berisi kesalahan sintaks, pemindaian CLI akan gagal dan mengembalikan kesalahan.
  • Mengabaikan path vs. pelanggaran: File ini untuk mengecualikan path. Ini berbeda dari kemampuan CLI untuk mengabaikan pelanggaran tertentu (misalnya, dengan menggunakan flag --ignore-violation).

Pemindai yang Didukung

  • SAST
  • IaC (segera hadir)
  • SCA (segera hadir)

Hasil Pemindaian

Setiap pemindaian akan selesai dengan pesan yang menyatakan apakah ada masalah yang ditemukan atau tidak.

Jika tidak ada masalah yang ditemukan, pemindaian berakhir dengan pesan sukses berikut:

Good job! No issues were found!!! 👏👏👏

Jika masalah ditemukan, kartu pelanggaran muncul setelah selesai. Dalam hal ini Anda harus meninjau file yang dimaksud untuk baris spesifik yang disorot oleh pesan hasil. Terapkan perubahan apa pun yang diperlukan untuk menyelesaikan masalah, lalu jalankan pemindaian lagi.

Tampilkan/Sembunyikan Rahasia

Dalam contoh di bawah, sebuah rahasia ditemukan di file secret_test, yang terletak di subfolder cli. Bagian kedua dari pesan menunjukkan baris spesifik tempat rahasia muncul, yang dalam hal ini adalah nilai yang ditetapkan ke googleApiKey.

Perhatikan bagaimana contoh tersebut mengaburkan nilai rahasia sebenarnya, mengganti sebagian besar rahasia dengan tanda bintang. Pemindaian mengaburkan rahasia secara default, tetapi Anda dapat menonaktifkan fitur ini secara opsional untuk melihat rahasia lengkap (dengan asumsi mesin tempat Anda melihat hasil pemindaian cukup aman dari mata-mata).

Untuk menonaktifkan pengaburan rahasia, tambahkan argumen --show-secret ke jenis pemindaian apa pun.

Dalam contoh berikut, Pemindaian Path dijalankan terhadap subdirektori cli dengan opsi diaktifkan untuk menampilkan rahasia apa pun yang ditemukan secara lengkap:

cycode scan --show-secret path ./cli

Hasilnya kemudian tidak akan dikaburkan.

Soft Fail

Dalam operasi normal, CLI akan mengembalikan kode keluar 1 ketika masalah ditemukan dalam hasil pemindaian. Tergantung pada pengaturan CI/CD Anda, ini biasanya akan mengakibatkan kegagalan keseluruhan. Jika Anda tidak ingin ini terjadi, Anda dapat menggunakan fitur soft fail.

Dengan menambahkan opsi --soft-fail ke jenis pemindaian apa pun, kode keluar akan dipaksa menjadi 0 terlepas dari apakah ada hasil yang ditemukan.

Contoh Hasil Pemindaian

Contoh Hasil Rahasia

╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│                                                                                                                                               Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity    🟠 MEDIUM                             │ │   34 };                                                                                               │ │
│ │  In file     /Users/cycodemacuser/NodeGoat/test/s  │ │   35                                                                                                  │ │
│ │              ecurity/profile-test.js               │ │   36 var sutUserName = "user1";                                                                       │ │
│ │  Secret SHA  b4ea3116d868b7c982ee6812cce61727856b  │ │ ❱ 37 var sutUserPassword = "Us*****23";                                                               │ │
│ │              802b3063cd5aebe7d796988552e0          │ │   38                                                                                                  │ │
│ │  Rule ID     68b6a876-4890-4e62-9531-0e687223579f  │ │   39 chrome.setDefaultService(service);                                                               │ │
│ ╰────────────────────────────────────────────────────╯ │   40                                                                                                  │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable.                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Contoh Hasil IaC

╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│                                                                                                                                              Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity      🟠 MEDIUM                           │ │   20 BinaryMediaTypes:                                                                                │ │
│ │  In file       ...ads-copy/iac/cft/api-gateway/ap  │ │   21   - !Ref binaryMediaType1                                                                        │ │
│ │                i-gateway-rest-api/deploy.yml       │ │   22   - !Ref binaryMediaType2                                                                        │ │
│ │  IaC Provider  CloudFormation                      │ │ ❱ 23 MinimumCompressionSize: -1                                                                       │ │
│ │  Rule ID       33c4b90c-3270-4337-a075-d3109c141b  │ │   24 EndpointConfiguration:                                                                           │ │
│ │                53                                  │ │   25   Types:                                                                                         │ │
│ ╰────────────────────────────────────────────────────╯ │   26     - EDGE                                                                                       │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute                     │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes.                                                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Contoh Hasil SCA

╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│                                                                                                                                             Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity               🟠 MEDIUM                  │ │   26758   "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",                                           │ │
│ │  In file                /Users/cycodemacuser/Node  │ │   26759   "dev": true                                                                                 │ │
│ │                         Goat/package-lock.json     │ │   26760 },                                                                                            │ │
│ │  CVEs                   CVE-2019-10795             │ │ ❱ 26761 "undefsafe": {                                                                                │ │
│ │  Package                undefsafe                  │ │   26762   "version": "2.0.2",                                                                         │ │
│ │  Version                2.0.2                      │ │   26763   "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",                   │ │
│ │  First patched version  Not fixed                  │ │   26764   "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",                                           │ │
│ │  Dependency path        nodemon 1.19.1 ->          │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                         undefsafe 2.0.2            │                                                                                                           │
│ │  Rule ID                9c6a8911-e071-4616-86db-4  │                                                                                                           │
│ │                         943f2e1df81                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload.                                                                                                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Contoh Hasil SAST

╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│                                                                                                                                               Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity       🟠 MEDIUM                          │ │   173         " including numbers, lowercase and uppercase letters.";                                 │ │
│ │  In file        /Users/cycodemacuser/NodeGoat/app  │ │   174     return false;                                                                               │ │
│ │                 /routes/session.js                 │ │   175 }                                                                                               │ │
│ │  CWE            CWE-208                            │ │ ❱ 176 if (password !== verify) {                                                                      │ │
│ │  Subcategory    Security                           │ │   177     errors.verifyError = "Password must match";                                                 │ │
│ │  Language       js                                 │ │   178     return false;                                                                               │ │
│ │  Security Tool  Bearer (Powered by Cycode)         │ │   179 }                                                                                               │ │
│ │  Rule ID        19fbca07-a8e7-4fa6-92ac-a36d15509  │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                 fa9                                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long   │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk.                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Panduan Remediasi Kustom Perusahaan

Jika perusahaan Anda telah menetapkan panduan remediasi kustom dalam kebijakan yang relevan melalui portal Cycode, Anda akan melihat bidang untuk "Panduan Perusahaan" yang berisi panduan remediasi yang Anda tambahkan. Perhatikan bahwa jika Anda belum menambahkan panduan perusahaan apa pun, bidang ini tidak akan muncul di alat CLI.

Mengabaikan Hasil Pemindaian

Aturan pengabaian dapat ditambahkan untuk mengabaikan nilai rahasia tertentu, nilai SHA512 tertentu, path tertentu, dan ID aturan rahasia dan IaC Cycode tertentu. Ini akan menyebabkan pemindaian tidak memperingatkan nilai-nilai ini. Aturan pengabaian ditulis dan disimpan secara lokal di file ./.cycode/config.yaml.

[!WARNING] Menambahkan nilai untuk diabaikan harus dilakukan dengan pertimbangan cermat terhadap nilai, path, dan kebijakan untuk memastikan bahwa pemindaian akan menangkap positif benar.

Berikut adalah opsi yang tersedia untuk perintah cycode ignore:

OpsiDeskripsi
--by-value TEXTAbaikan nilai tertentu saat memindai rahasia. Lihat Mengabaikan Nilai Rahasia untuk detail lebih lanjut.
--by-sha TEXTAbaikan representasi SHA512 tertentu dari string saat memindai rahasia. Lihat Mengabaikan Nilai SHA Rahasia untuk detail lebih lanjut.
--by-path TEXTHindari memindai path tertentu. Perlu menentukan jenis pemindaian. Lihat Mengabaikan Path untuk detail lebih lanjut.
--by-rule TEXTAbaikan pemindaian ID aturan rahasia/ID aturan IaC/ID aturan SCA tertentu. Lihat Mengabaikan Aturan Rahasia atau IaC untuk detail lebih lanjut.
--by-package TEXTAbaikan pemindaian versi paket tertentu saat menjalankan pemindaian SCA. Pola yang diharapkan - name@version. Lihat Mengabaikan Paket untuk detail lebih lanjut.
--by-cve TEXTAbaikan pemindaian CVE tertentu saat menjalankan pemindaian SCA. Pola yang diharapkan: CVE-YYYY-NNN.
-t, --scan-type [secret|iac|sca|sast]Tentukan pemindaian yang ingin Anda jalankan (secret/iac/sca/sast). Nilai defaultnya adalah secret.
-g, --globalTambahkan aturan pengabaian dan perbarui di file konfigurasi global .cycode.

Mengabaikan Nilai Rahasia

Untuk mengabaikan nilai rahasia tertentu, Anda perlu menggunakan flag --by-value. Ini akan mengabaikan nilai rahasia yang diberikan dari semua pemindaian mendatang. Gunakan perintah berikut untuk menambahkan nilai rahasia yang akan diabaikan:

cycode ignore --by-value {{secret-value}}

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan nilai rahasia tertentu adalah sebagai berikut:

cycode ignore --by-value h3110w0r1d!@#$350

Dalam contoh di atas, ganti nilai h3110w0r1d!@#$350 dengan nilai rahasia Anda yang tidak ditutupi. Lihat opsi pemindaian Cycode untuk detail tentang cara melihat nilai rahasia dalam hasil pemindaian.

Mengabaikan Nilai SHA Rahasia

Untuk mengabaikan nilai SHA rahasia tertentu, Anda perlu menggunakan flag --by-sha. Ini akan mengabaikan nilai SHA rahasia yang diberikan dari semua pemindaian mendatang. Gunakan perintah berikut untuk menambahkan nilai SHA rahasia yang akan diabaikan:

cycode ignore --by-sha {{secret-sha-value}}

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan nilai SHA rahasia tertentu adalah sebagai berikut:

cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0

Dalam contoh di atas, ganti nilai a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0 dengan nilai SHA rahasia Anda.

Mengabaikan Path

Untuk mengabaikan path tertentu untuk pemindaian rahasia, IaC, atau SCA, Anda perlu menggunakan flag --by-path bersama dengan flag -t, --scan-type (Anda harus menentukan jenis pemindaian). Ini akan mengabaikan path yang diberikan dari semua pemindaian mendatang untuk jenis pemindaian yang diberikan. Gunakan perintah berikut untuk menambahkan path yang akan diabaikan:

cycode ignore -t {{scan-type}} --by-path {{path}}

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan path tertentu untuk rahasia adalah sebagai berikut:

cycode ignore -t secret --by-path ~/home/my-repo/config

Dalam contoh di atas, ganti nilai ~/home/my-repo/config dengan nilai path Anda.

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan path tertentu dari pemindaian IaC adalah sebagai berikut:

cycode ignore -t iac --by-path ~/home/my-repo/config

Dalam contoh di atas, ganti nilai ~/home/my-repo/config dengan nilai path Anda.

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan path tertentu dari pemindaian SCA adalah sebagai berikut:

cycode ignore -t sca --by-path ~/home/my-repo/config

Dalam contoh di atas, ganti nilai ~/home/my-repo/config dengan nilai path Anda.

Mengabaikan Aturan Rahasia, IaC, SCA, atau SAST

Untuk mengabaikan aturan rahasia, IaC, SCA, atau SAST tertentu, Anda perlu menggunakan flag --by-rule bersama dengan flag -t, --scan-type (Anda harus menentukan jenis pemindaian). Ini akan mengabaikan nilai ID aturan yang diberikan dari semua pemindaian mendatang. Gunakan perintah berikut untuk menambahkan nilai ID aturan yang akan diabaikan:

cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan ID aturan rahasia tertentu adalah sebagai berikut:

cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710

Dalam contoh di atas, ganti nilai ce3a4de0-9dfc-448b-a004-c538cf8b4710 dengan ID aturan yang ingin Anda abaikan.

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan ID aturan IaC tertentu adalah sebagai berikut:

cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c

Dalam contoh di atas, ganti nilai bdaa88e2-5e7c-46ff-ac2a-29721418c59c dengan ID aturan yang ingin Anda abaikan.

Dalam contoh di bagian atas bagian ini, perintah untuk mengabaikan ID aturan SCA tertentu adalah sebagai berikut:

cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b

Dalam contoh di atas, ganti nilai dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b dengan ID aturan yang ingin Anda abaikan.

Mengabaikan Paket

[!NOTE] Opsi ini hanya tersedia untuk pemindaian SCA.

Untuk mengabaikan paket tertentu dalam pemindaian SCA, Anda perlu menggunakan flag --by-package bersama dengan flag -t, --scan-type (Anda harus menentukan jenis pemindaian sca). Ini akan mengabaikan paket yang diberikan, menggunakan format {{package_name}}@{{package_version}}, dari semua pemindaian mendatang. Gunakan perintah berikut untuk menambahkan paket dan versi yang akan diabaikan:

cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}}

ATAU

cycode ignore -t sca --by-package {{package_name}}@{{package_version}}

Dalam contoh di bawah, perintah untuk mengabaikan paket SCA tertentu adalah sebagai berikut:

cycode ignore --scan-type sca --by-package [email protected]

Dalam contoh di atas, ganti pyyaml dengan nama paket dan 5.3.1 dengan versi paket yang ingin Anda abaikan.

Mengabaikan melalui file konfigurasi

Aturan pengabaian yang diterapkan disimpan dalam file konfigurasi yang disebut config.yaml. File ini dapat dengan mudah dibagikan antar pengembang atau bahkan di-commit ke Git jarak jauh. File-file ini selalu terletak di folder .cycode. Folder dimulai dengan titik (.), dan Anda harus mengaktifkan tampilan file tersembunyi untuk melihatnya.

Path file konfigurasi

Secara default, semua perintah cycode ignore menyimpan aturan pengabaian ke direktori saat ini dari mana CLI dijalankan.

Contoh: menjalankan perintah CLI pengabaian dari /Users/name/projects/backend akan membuat config.yaml di /Users/name/projects/backend/.cycode

➜  backend  pwd
/Users/name/projects/backend
➜  backend  cycode ignore --by-value test-value
➜  backend  tree -a
.
└── .cycode
    └── config.yaml

2 directories, 1 file

Opsi kedua adalah menyimpan aturan pengabaian ke file konfigurasi global. Path konfigurasi global adalah ~/.cycode/config.yaml, di mana ~ berarti users home directory, for example, /Users/name` di macOS.

Menyimpan ke ruang global dapat dilakukan dengan flag -g dari perintah cycode ignore. Misalnya: cycode ignore -g --by-value test-value.

Direktori kerja yang tepat

Sangat penting untuk menempatkan folder .cycode dan menjalankan CLI dari tempat yang sama. Anda harus memeriksa ulang saat bekerja dengan lingkungan yang berbeda seperti CI/CD (GitHub Actions, Jenkins, dll.).

Anda dapat meng-commit folder .cycode ke root repositori Anda. Dalam skenario ini, Anda harus menjalankan pemindaian CLI dari root repositori. Jika itu tidak sesuai dengan kebutuhan Anda, Anda dapat menyalin sementara folder .cycode ke mana pun Anda inginkan dan melakukan pemindaian CLI dari folder ini.

Struktur aturan pengabaian dalam konfigurasi

Penting untuk memahami bagaimana CLI menyimpan aturan yang diabaikan agar dapat membaca file konfigurasi ini atau bahkan memodifikasinya tanpa CLI.

Struktur YAML abstrak:

exclusions:
  {scanTypeName}:
    {ignoringType}:
    - someIgnoringValue1
    - someIgnoringValue2

Nilai yang mungkin dari scanTypeName: iac, sca, sast, secret.

Nilai yang mungkin dari ignoringType: paths, values, rules, packages, shas, cves.

[!WARNING] Nilai untuk "abaikan berdasarkan nilai" tidak disimpan sebagai teks biasa! CLI menyimpan hash sha256 dari nilai tersebut. Anda harus meletakkan hash dari string saat memodifikasi file konfigurasi secara manual.

Contoh config.yaml nyata:

exclusions:
  iac:
    rules:
    - bdaa88e2-5e7c-46ff-ac2a-29721418c59c
  sca:
    packages:
    - [email protected]
  secret:
    paths:
    - /Users/name/projects/build
    rules:
    - ce3a4de0-9dfc-448b-a004-c538cf8b4710
    shas:
    - a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
    values:
    - a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
    - 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752

Perintah Report

Menghasilkan Laporan SBOM

Tagihan bahan perangkat lunak (SBOM) adalah inventaris semua komponen penyusun dan dependensi perangkat lunak yang terlibat dalam pengembangan dan pengiriman aplikasi. Menggunakan perintah ini, Anda dapat membuat laporan SBOM untuk proyek lokal Anda atau untuk URI repositori Anda.

Opsi berikut tersedia untuk digunakan dengan perintah ini:

OpsiDeskripsiDiperlukanDefault
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4]Format SBOMYa
-o, --output-format [JSON]Tentukan format file outputTidakjson
--output-file PATHFile outputTidaknama file yang dihasilkan otomatis disimpan ke direktori saat ini
--include-vulnerabilitiesSertakan kerentananTidakFalse
--include-dev-dependenciesSertakan dependensi devTidakFalse

Perintah berikut tersedia untuk digunakan dengan perintah ini:

PerintahDeskripsi
pathHasilkan laporan SBOM untuk path yang diberikan dalam perintah
repository-urlHasilkan laporan SBOM untuk URI repositori yang diberikan dalam perintah

Repositori

Untuk membuat laporan SBOM untuk URI repositori:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <repository url>

Misalnya:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git

Proyek Lokal

Untuk membuat laporan SBOM untuk path:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>

Misalnya:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project

Subperintah path mendukung opsi tambahan berikut:

OpsiDeskripsi
--no-restoreLewati pemulihan file kunci dan hanya pindai dependensi langsung. Lihat Opsi Pemulihan Kunci untuk detail.
--gradle-all-sub-projectsJalankan perintah restore Gradle untuk semua sub-proyek (gunakan dari root build Gradle multi-proyek).
--maven-settings-fileHanya untuk Maven, memungkinkan penggunaan file settings.xml kustom saat membangun pohon dependensi.

Perintah Import

Mengimpor SBOM

Tagihan bahan perangkat lunak (SBOM) adalah inventaris semua komponen penyusun dan dependensi perangkat lunak yang terlibat dalam pengembangan dan pengiriman aplikasi. Menggunakan perintah ini, Anda dapat mengimpor file SBOM dari sistem file Anda ke Cycode.

Opsi berikut tersedia untuk digunakan dengan perintah ini:

OpsiDeskripsiDiperlukanDefault
-n, --name TEXTNama tampilan SBOMYa
-v, --vendor TEXTNama entitas yang menyediakan SBOMYa
-l, --label TEXTLampirkan label ke SBOMTidak
-o, --owner TEXTAlamat email pengguna Cycode yang berfungsi sebagai titik kontak untuk SBOM iniTidak
-b, --business-impact [High | Medium | Low]Dampak BisnisTidakMedium

Misalnya:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner [email protected] /path/to/local/project

Log Pemindaian

Semua pemindaian CLI dicatat di Cycode. Log dapat ditemukan di Settings > CLI Logs.

Bantuan Sintaks

Anda dapat menambahkan argumen --help ke perintah apa pun kapan saja untuk melihat pesan bantuan yang akan menampilkan opsi yang tersedia dan sintaksnya.

Untuk melihat bantuan umum, cukup masukkan perintah:

cycode --help

Untuk melihat opsi pemindaian, masukkan:

cycode scan --help

Untuk melihat opsi yang tersedia untuk jenis pemindaian tertentu, masukkan:

cycode scan {{option}} --help

Misalnya, untuk melihat opsi yang tersedia untuk Pemindaian Path, Anda akan memasukkan:

cycode scan path --help

Untuk melihat opsi yang tersedia untuk fungsi pengabaian pemindaian, gunakan perintah ini:

cycode ignore --help

Untuk melihat opsi yang tersedia untuk laporan, gunakan perintah ini:

cycode report --help

Untuk melihat opsi yang tersedia untuk jenis laporan tertentu, masukkan:

cycode scan {{option}} --help