Cycode
resmiTingkatkan 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
- Prasyarat
- Instalasi
- Perintah Cycode CLI
- Perintah MCP
- Perintah Platform
- Perintah Scan
- Perintah Report
- Perintah Import
- Log Pemindaian
- 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 authuntuk 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
python3danpip3untuk perintah terkait Python; namun, beberapa sistem mungkin menggunakan perintahpythondanpip, tergantung pada konfigurasi lingkungan Python Anda.
Instal Cycode CLI
Untuk menginstal aplikasi Cycode CLI di mesin lokal Anda, lakukan langkah-langkah berikut:
-
Buka aplikasi baris perintah atau terminal Anda.
-
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 -
-
Terakhir, autentikasi CLI. Ada tiga metode untuk mengatur client ID dan kredensial Cycode (client secret atau token OIDC ID):
- cycode auth (Direkomendasikan)
- cycode configure
- Tambahkan ke variabel lingkungan Anda
Menggunakan Perintah Auth
[!NOTE] Ini adalah metode yang direkomendasikan untuk menyiapkan mesin lokal Anda agar terautentikasi dengan Cycode CLI.
-
Ketik perintah berikut ke jendela terminal/baris perintah Anda:
cycode auth -
Jendela browser akan muncul, meminta Anda untuk masuk ke Cycode (seperti yang terlihat di bawah):
-
Masukkan kredensial login Anda di halaman ini dan masuk.
-
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):
[!NOTE] Ini akan menjadi metode default untuk mengautentikasi dengan Cycode CLI.
-
Klik tombol Allow untuk mengotorisasi Cycode CLI pada grup bisnis yang dipilih.
-
Setelah selesai, Anda akan melihat layar berikut jika berhasil dipilih:
-
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.
-
Ketik perintah berikut ke jendela terminal/baris perintah Anda:
cycode configure -
Masukkan nilai URL API Cycode Anda (Anda dapat mengosongkan untuk menggunakan nilai default).
Cycode API URL [https://api.cycode.com]: https://api.onpremise.com -
Masukkan nilai URL APP Cycode Anda (Anda dapat mengosongkan untuk menggunakan nilai default).
Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com -
Masukkan nilai Client ID Cycode Anda.
Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d -
Masukkan nilai Client Secret Cycode Anda (lewati jika Anda berencana menggunakan token OIDC ID).
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e -
Masukkan nilai Token OIDC ID Cycode Anda (opsional).
Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -
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
-
Dari Panel Kontrol, navigasikan ke menu System:
-
Selanjutnya, klik Advanced system settings:
-
Di jendela System Properties yang terbuka, klik tombol Environment Variables:
-
Buat variabel
CYCODE_CLIENT_IDdanCYCODE_CLIENT_SECRETdengan nilai yang cocok dengan ID dan Secret Key Anda. Jika Anda mengautentikasi melalui OIDC, tambahkanCYCODE_ID_TOKENdengan nilai token OIDC ID Anda juga:
-
Masukkan
cycode.exeke 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
-
Instal framework pre-commit (Python 3.9 atau lebih tinggi harus diinstal):
pip3 install pre-commit -
Navigasikan ke direktori teratas repositori Git lokal yang ingin Anda konfigurasi.
-
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] -
Ubah file yang dibuat sesuai kebutuhan spesifik Anda. Gunakan hook ID
cycodeuntuk mengaktifkan pemindaian Rahasia. Gunakan hook IDcycode-scauntuk mengaktifkan pemindaian SCA. Gunakan hook IDcycode-sastuntuk 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] -
Instal hook Cycode:
pre-commit installInstalasi hook yang berhasil akan menghasilkan pesan:
Pre-commit installed at .git/hooks/pre-commit. -
Jaga pre-commit hook tetap terbarui:
pre-commit autoupdateIni akan secara otomatis menaikkan
revdi.pre-commit-config.yamlke 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:
-
Tambahkan pre-push hook ke file
.pre-commit-config.yamlAnda:repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push stages: [pre-push] -
Instal pre-push hook:
pre-commit install --hook-type pre-push -
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 pushdan hanya memindai commit yang akan di-push.
Perintah Cycode CLI
Berikut adalah opsi dan perintah yang tersedia dengan aplikasi Cycode CLI:
| Opsi | Deskripsi |
|---|---|
-v, --verbose | Tampilkan log detail. |
--no-progress-meter | Jangan tampilkan pengukur kemajuan. |
--no-update-notifier | Jangan periksa pembaruan CLI. |
-o, --output [rich|text|json|table] | Tentukan jenis output. Defaultnya adalah rich. |
--client-id TEXT | Tentukan client ID Cycode untuk eksekusi pemindaian spesifik ini. |
--client-secret TEXT | Tentukan client secret Cycode untuk eksekusi pemindaian spesifik ini. |
--id-token TEXT | Tentukan token OIDC ID Cycode untuk eksekusi pemindaian spesifik ini. |
--install-completion | Instal completion untuk shell saat ini.. |
--show-completion [bash|zsh|fish|powershell|pwsh] | Tampilkan completion untuk shell yang ditentukan, untuk menyalinnya atau menyesuaikan instalasi. |
-h, --help | Tampilkan opsi untuk perintah yang diberikan. |
| Perintah | Deskripsi |
|---|---|
| auth | Autentikasi mesin Anda untuk mengaitkan CLI dengan akun Cycode Anda. |
| configure | Perintah awal untuk mengonfigurasi autentikasi klien CLI Anda. |
| ignore | Abaikan nilai, path, atau ID aturan tertentu. |
| mcp | Mulai server Model Context Protocol (MCP) untuk mengaktifkan integrasi AI dengan kemampuan pemindaian Cycode. |
| scan | Pindai konten untuk pelanggaran Rahasia/IaC/SCA/SAST. Anda perlu menentukan jenis pemindaian yang akan dilakukan: commit-history/path/repository/dll. |
| report | Hasilkan laporan. Anda perlu menentukan jenis laporan yang akan dilakukan sebagai SBOM. |
| status | Tampilkan 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 cycodeataubrew install cycode, lalu autentikasi sekali dengancycode auth. Setelah instalasi dan autentikasi global, Anda tidak perlu mengonfigurasi variabel lingkunganCYCODE_CLIENT_IDdanCYCODE_CLIENT_SECRETdi file konfigurasi MCP Anda.
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
| Opsi | Deskripsi |
|---|---|
-t, --transport | Jenis transport untuk server MCP: stdio, sse, atau streamable-http (default: stdio) |
-H, --host | Alamat host untuk mengikat server (hanya digunakan untuk transport non stdio) (default: 127.0.0.1) |
-p, --port | Nomor port untuk mengikat server (hanya digunakan untuk transport non stdio) (default: 8000) |
--help | Tampilkan pesan bantuan dan opsi yang tersedia |
Alat MCP
Server MCP menyediakan alat berikut yang dapat digunakan sistem AI:
| Nama Alat | Deskripsi |
|---|---|
cycode_secret_scan | Pindai rahasia yang di-hardcode |
cycode_sca_scan | Pindai Analisis Komposisi Perangkat Lunak (SCA) - kerentanan dan masalah lisensi |
cycode_iac_scan | Pindai kesalahan konfigurasi Infrastruktur sebagai Kode (IaC) |
cycode_sast_scan | Pindai Pengujian Keamanan Aplikasi Statis (SAST) - kualitas kode dan kelemahan keamanan |
cycode_status | Dapatkan 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 dilakukancycode scan -t <type> path ./srcdari 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
pathsbila memungkinkan. Melewatkan file besar (sepertipackage-lock.json) sebagai konten inline dapat melebihi batas token dan memperlambat klien AI. Denganpaths, 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_URLdanCYCODE_APP_URLyang sesuai di variabel lingkungan (mis.,https://api.eu.cycode.comdanhttps://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 Lingkungan | Deskripsi |
|---|---|
REQUESTS_CA_BUNDLE | Path ke file bundel CA kustom (.pem atau .crt). Digunakan oleh pustaka requests untuk semua panggilan HTTPS yang dilakukan oleh Cycode CLI. |
SSL_CERT_FILE | Path ke file bundel CA kustom. Digunakan oleh modul ssl tingkat rendah Python. Atur ini bersama REQUESTS_CA_BUNDLE untuk cakupan penuh. |
MCP_TOOL_TIMEOUT | Timeout (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_BUNDLEdanSSL_CERT_FILEke path bundel CA yang sama.REQUESTS_CA_BUNDLEmencakup lapisan HTTP;SSL_CERT_FILEmencakup 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 authatau 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:
- Menggunakan flag
-vatau--verbose:
cycode -v mcp
- 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
platformdalam 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 authatau variabel lingkunganCYCODE_CLIENT_ID/CYCODE_CLIENT_SECRET) agarcycode platformdapat 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
GETyang 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 platformpertama 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:
| Opsi | Deskripsi |
|---|---|
-t, --scan-type [secret|iac|sca|sast] | Tentukan pemindaian yang ingin Anda jalankan (secret/iac/sca/sast), defaultnya adalah secret. |
--show-secret BOOLEAN | Tampilkan rahasia dalam teks biasa. Lihat bagian Tampilkan/Sembunyikan Rahasia untuk detail lebih lanjut. |
--soft-fail BOOLEAN | Jalankan 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-scan | Tentukan pemindaian SCA yang ingin Anda jalankan (package-vulnerabilities/license-compliance). Defaultnya adalah keduanya. |
--monitor | Jika ditentukan, hasil pemindaian akan dicatat di Cycode. |
--cycode-report | Tampilkan tautan ke laporan pemindaian di platform Cycode di output konsol. |
--no-restore | Jika ditentukan, Cycode tidak akan menjalankan perintah restore. Ini HANYA akan memindai dependensi langsung! |
--stop-on-error | Batalkan pemindaian jika terjadi kegagalan pengumpulan file atau pemulihan dependensi, alih-alih melewatkan file yang gagal dan melanjutkan. |
--gradle-all-sub-projects | Jalankan perintah restore gradle untuk semua sub proyek. Ini harus dijalankan dari |
--maven-settings-file | Hanya untuk Maven, memungkinkan penggunaan file settings.xml kustom saat memindai dependensi |
--help | Tampilkan opsi untuk perintah yang diberikan. |
| Perintah | Deskripsi |
|---|---|
| commit-history | Pindai riwayat commit atau lakukan pemindaian diff antara commit tertentu |
| path | Pindai file di path yang diberikan dalam perintah |
| pre-commit | Gunakan perintah ini untuk memindai konten yang belum di-commit |
| repository | Pindai 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
owneratauadmindi Cycode untuk melihat halaman ini.

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:
| Ekosistem | File Manifes | File Kunci yang Dihasilkan | Alat yang Dipanggil (ketika file kunci tidak ada) |
|---|---|---|---|
| npm | package.json | package-lock.json | npm install --package-lock-only --ignore-scripts --no-audit |
| Yarn | package.json | yarn.lock | yarn install --ignore-scripts |
| pnpm | package.json | pnpm-lock.yaml | pnpm install --ignore-scripts |
| Deno | deno.json / deno.jsonc | deno.lock | (hanya baca file kunci yang ada) |
| Go | go.mod | go.mod.graph | go list -m -json all + go mod graph |
| Maven | pom.xml | bcde.mvndeps | mvn dependency:tree |
| Gradle | build.gradle / build.gradle.kts | gradle-dependencies-generated.txt | gradle dependencies -q --console plain |
| SBT | build.sbt | build.sbt.lock | sbt dependencyLockWrite |
| NuGet | *.csproj | packages.lock.json | dotnet restore --use-lock-file |
| Ruby | Gemfile | Gemfile.lock | bundle --quiet |
| Poetry | pyproject.toml | poetry.lock | poetry lock |
| Pipenv | Pipfile | Pipfile.lock | pipenv lock |
| PHP Composer | composer.json | composer.lock | composer 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 Keluar | Arti |
|---|---|
0 | Pemindaian selesai tanpa pelanggaran |
1 | Pemindaian selesai dan ditemukan pelanggaran |
2 | Pemindaian 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:
| Opsi | Deskripsi |
|---|---|
-b, --branch TEXT | Cabang 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:
-
Inisialisasi direktori kerja yang berisi file konfigurasi Terraform:
terraform init -
Buat rencana eksekusi Terraform dan simpan output biner:
terraform plan -out={tfplan_output} -
Ubah file output biner menjadi JSON yang dapat dibaca:
terraform show -json {tfplan_output} > {tfplan}.json -
Pindai
{tfplan}.jsonAnda 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:
- Pemindaian Riwayat Penuh: Analisis semua commit dalam riwayat repositori
- 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:
| Opsi | Deskripsi |
|---|---|
-r, --commit-range TEXT | Pindai 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:
| Sintaks | Deskripsi | Contoh |
|---|---|---|
commit1..commit2 | Perubahan dari commit1 ke commit2 | abc123..def456 |
commit1...commit2 | Perubahan di commit2 tidak di commit1 | main...feature-branch |
commit | Perubahan dari commit ke HEAD | HEAD~1 |
branch1..branch2 | Perubahan dari branch1 ke branch2 | main..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:
-
Instal framework pre-commit (jika belum diinstal):
pip3 install pre-commit -
Buat atau perbarui file
.pre-commit-config.yamlAnda 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] -
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] -
Instal pre-push hook:
pre-commit install --hook-type pre-pushInstalasi yang berhasil akan menghasilkan pesan:
Pre-push installed at .git/hooks/pre-push. -
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:
- Variabel Lingkungan:
CYCODE_DEFAULT_BRANCH- memungkinkan penggantian manual - Git Remote HEAD: Menggunakan
git symbolic-ref refs/remotes/origin/HEADuntuk mendeteksi cabang default jarak jauh yang sebenarnya - Git Remote Info: Jatuh kembali ke
git remote show originjika symbolic-ref gagal - 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 pushdan 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
- Buat file bernama
.cycodeignoredi folder kerja Anda. - Daftarkan file dan direktori yang ingin Anda kecualikan, menggunakan pola yang sama seperti
.gitignore. - Tempatkan file ini di direktori tempat Anda berencana menjalankan perintah cycode scan.
[!WARNING]
- File tidak valid: Jika file
.cycodeignoreberisi 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:
| Opsi | Deskripsi |
|---|---|
--by-value TEXT | Abaikan nilai tertentu saat memindai rahasia. Lihat Mengabaikan Nilai Rahasia untuk detail lebih lanjut. |
--by-sha TEXT | Abaikan representasi SHA512 tertentu dari string saat memindai rahasia. Lihat Mengabaikan Nilai SHA Rahasia untuk detail lebih lanjut. |
--by-path TEXT | Hindari memindai path tertentu. Perlu menentukan jenis pemindaian. Lihat Mengabaikan Path untuk detail lebih lanjut. |
--by-rule TEXT | Abaikan pemindaian ID aturan rahasia/ID aturan IaC/ID aturan SCA tertentu. Lihat Mengabaikan Aturan Rahasia atau IaC untuk detail lebih lanjut. |
--by-package TEXT | Abaikan pemindaian versi paket tertentu saat menjalankan pemindaian SCA. Pola yang diharapkan - name@version. Lihat Mengabaikan Paket untuk detail lebih lanjut. |
--by-cve TEXT | Abaikan 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, --global | Tambahkan 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:
| Opsi | Deskripsi | Diperlukan | Default |
|---|---|---|---|
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4] | Format SBOM | Ya | |
-o, --output-format [JSON] | Tentukan format file output | Tidak | json |
--output-file PATH | File output | Tidak | nama file yang dihasilkan otomatis disimpan ke direktori saat ini |
--include-vulnerabilities | Sertakan kerentanan | Tidak | False |
--include-dev-dependencies | Sertakan dependensi dev | Tidak | False |
Perintah berikut tersedia untuk digunakan dengan perintah ini:
| Perintah | Deskripsi |
|---|---|
path | Hasilkan laporan SBOM untuk path yang diberikan dalam perintah |
repository-url | Hasilkan 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:
| Opsi | Deskripsi |
|---|---|
--no-restore | Lewati pemulihan file kunci dan hanya pindai dependensi langsung. Lihat Opsi Pemulihan Kunci untuk detail. |
--gradle-all-sub-projects | Jalankan perintah restore Gradle untuk semua sub-proyek (gunakan dari root build Gradle multi-proyek). |
--maven-settings-file | Hanya 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:
| Opsi | Deskripsi | Diperlukan | Default |
|---|---|---|---|
-n, --name TEXT | Nama tampilan SBOM | Ya | |
-v, --vendor TEXT | Nama entitas yang menyediakan SBOM | Ya | |
-l, --label TEXT | Lampirkan label ke SBOM | Tidak | |
-o, --owner TEXT | Alamat email pengguna Cycode yang berfungsi sebagai titik kontak untuk SBOM ini | Tidak | |
-b, --business-impact [High | Medium | Low] | Dampak Bisnis | Tidak | Medium |
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