FixVibe

// docs / security guides / ai-code scanner

Pemindaian keamanan kode buatan AI: DAST untuk aplikasi vibe-coded

Aplikasi yang dibuat dengan Cursor, Claude Code, Lovable, Bolt, v0, Replit, dan Windsurf dikirimkan lebih cepat dibandingkan perangkat lunak web generasi sebelumnya — dan aplikasi tersebut dikirimkan dengan serangkaian celah keamanan yang dapat diprediksi. Halaman ini menjelaskan mengapa aplikasi yang dihasilkan AI- memerlukan pemindaian yang berbeda dibandingkan alat pentest tradisional, kelas kerentanan mana yang terlalu banyak terwakili, perbedaan DAST dengan SAST ketika basis kode dibuat setengah mesin, dan apa yang harus dicari dalam pemindai yang dibuat untuk beban kerja ini.

Mengapa AI- kode yang dihasilkan memerlukan pemindaian keamanan yang berbeda

AI alat pengkodean dilatih pada repositori sumber terbuka dalam skala besar. Data pelatihan tersebut condong ke make it work daripada make it secure. Beberapa pola struktural mengikuti dari itu:

  • Autocomplete bias. Impor pencocokan terdekat menang. Menempelkan cuplikan Supabase yang menggunakan kunci service_role di satu file akan menjadikan kunci tersebut sebagai saran pelengkapan otomatis di file berikutnya — bahkan di komponen React sisi klien yang tidak pernah menjadi bagiannya.
  • No long-term context. LLM tidak memiliki ingatan tentang bypass RLS terakhir Anda atau insiden postmortem tim Anda. Setiap file yang dihasilkan masih segar, sering kali tidak ada pola pertahanan yang dibawa manusia ke seluruh file.
  • Speed as the rewarded metric. Pengguna memuji kecepatan; LLM pelatihan memperkuatnya. "Hasilkan Next.js auth" tercepat mengalahkan "hasilkan Next.js auth paling aman" pada sinyal umpan balik latensi.
  • Training data gaps. Basis kode lama mendominasi data pelatihan dan mendahului default keamanan modern (ketat CSP, SameSite=Lax, HSTS, RLS). Kode yang dihasilkan mencerminkan pola yang normal pada tahun 2019 tetapi tidak aman saat ini.
  • Implicit platform trust. Ketika Cursor membuat aplikasi Vercel maka diasumsikan default Vercel aman. Beberapa di antaranya (auto-HTTPS, cookie bertanda tangan). Banyak yang tidak (tidak ada CSP secara default, permisif CORS, rute debug default Next.js).

Sepuluh kelas kerentanan terwakili secara berlebihan dalam aplikasi berkode getaran

The same finding classes show up disproportionately in AI-generated apps:

  1. Exposed Supabase service-role keys. service_role JWT (dimulai eyJ) yang berkomitmen pada paket klien mengabaikan setiap kebijakan RLS pada proyek. Cursor melengkapinya secara otomatis di sisi batas yang salah; kunci dikirimkan dalam /_next/static/....
  2. Missing Row-Level Security (RLS). Model melihat CREATE TABLE public.items dan melanjutkan tanpa mengaktifkan RLS. Pengguna anonim kemudian dapat membaca atau menulis baris apa pun melalui kunci publik segera. Lihat Supabase Row-Level Security.
  3. Open Firebase / Firestore rules. Generated rules files often read allow read, write: if true; or skip the rules file entirely. Test-mode rules let anyone read and overwrite data until someone replaces them.
  4. Hardcoded API keys in bundles. Stripe kunci langsung, kunci Antropik sk-ant-*, OpenAI sk-*, Google AIza*, dan AWS AKIA* akhirnya dimasukkan ke dalam muatan JS ketika disiplin env-var hilang. Secrets in JavaScript Bundles menandainya pada tingkat halaman yang dirender.
  5. Missing Content Security Policy. Tidak ada Content-Security-Policy header respons berarti setiap skrip inline XSS hanya berjarak satu klik untuk pengambilalihan akun penuh. CSP bersifat abstrak; codegen secara rutin melewatkannya. HTTP Security Headers melaporkan kesenjangan dengan panduan perbaikan khusus platform penerapan.
  6. Next.js middleware misplacement. Dengan tata letak src/, Next.js hanya mengambil src/middleware.ts — tingkat akar middleware.ts diabaikan secara diam-diam. Auth tampaknya masih berfungsi karena halaman memanggil requireAuth(), tetapi header, CSP, dan batas kecepatan tidak masuk.
  7. IDOR via unsigned IDs. Penangan GET /api/items/[id] yang dihasilkan memercayai parameter jalur dan tidak pernah memverifikasi kepemilikan. Berjalan di bilangan bulat atau ruang UUID akan mengekspos setiap data penyewa.
  8. Broken auth flows. Token tautan ajaib tanpa expires_at; JWT verifikasi yang melewati aud dan exp; panggilan sisi klien getSession() (yang membaca cookie yang belum diverifikasi) alih-alih sisi server getUser().
  9. Debug endpoints in production. Generated /api/debug, /api/health, /api/__nextjs_original-stack-frame, or /.next/trace routes leak internals. FixVibe reports them only with evidence that they really are exposed (Vercel-Specific Exposure).
  10. Plaintext sensitive fields. Kata sandi, kunci API, dan PII disimpan sebagai teks biasa di Postgres karena migrasi tidak menjangkau pgcrypto atau brankas eksternal.

DAST vs SAST: mengapa keduanya penting untuk kode yang dihasilkan AI-

Analisis statis (SAST) dan analisis dinamis (DAST) merupakan pelengkap, bukan pengganti. Pembagian ini lebih penting untuk kode yang dihasilkan AI- dibandingkan kode tulisan tangan.

SAST membaca kode sumber pada disk. Ia menangkap rahasia dalam file sumber, panggilan fungsi berbahaya, dan pola berisiko sebelum build dijalankan. Itu tidak dapat melihat konfigurasi runtime, variabel lingkungan yang diterapkan, atau bagaimana bundler mengubah kode Anda.

DAST mengenai aplikasi yang diterapkan seperti pengguna. Ia melihat respons yang dikirimkan, dijalankan pada bundel produksi, dan menangkap penyimpangan konfigurasi antara repo dan penerapan. Ia menemukan kunci hardcode dalam JavaScript yang ditranspilasi yang SAST tidak pernah dilihat karena dimasukkan melalui tugas process.env pada waktu pembuatan.

For AI-generated code, DAST is essential karena kapalnya berbeda dengan yang ditulis modelnya. Bundling, pengguncangan pohon, transpilasi, dan inlining variabel lingkungan semuanya menciptakan permukaan baru. SAST pada sumber dapat melewatkan seluruh rahasia yang tertanam dalam bundel. DAST menangkap kedua lapisan. Pipeline yang matang berjalan SAST di CI dan DAST terhadap pratinjau yang diterapkan — itulah pola FixVibe.

Apa yang harus dicari dalam pemindai kode AI-

Sebagian besar pemindai DAST untuk tujuan umum (Burp Suite, OWASP ZAP, Nessus) dirancang untuk aplikasi monolitik dan alur autentikasi tradisional. Memindai aplikasi yang dihasilkan Vercel + Supabase + Stripe AI- memerlukan:

  • BaaS coverage. Pemeriksaan nyata terhadap Supabase RLS, Firebase / aturan Firestore, konfigurasi Clerk, AWS Amplify, dan bentuk JWT yang dihasilkan layanan tersebut. Aturan umum OWASP tidak tahu apa yang harus ditandai.
  • JS bundle inspection. Recognising real API-key formats — Stripe sk_live_, Anthropic sk-ant-, Supabase service-role keys — and telling a secret key from a publishable one. Generic pattern matching throws too many false positives.
  • Passive + active split. Pemeriksaan pasif (header, cookie, rahasia, konfigurasi BaaS, DNS) dijalankan dengan aman terhadap URL apa pun. Probe aktif (SQLi, XSS, SSTI, IDOR berjalan) memerlukan batas otorisasi karena mereka menembakkan muatan bergaya serangan.
  • Framework awareness. Recognising Next.js App Router vs Pages Router, Vite SPA rewrites, Vercel deployment-protection, Cloudflare Pages routing. A scanner that doesn't understand how these platforms answer unknown paths generates noise.
  • Rate-limit safety. Bounded request budgets per scan, and findings that require positive evidence — a blanket 403 from a WAF is not proof a file exists.
  • Authorization gating for intrusive payloads. Mengirim SQLi atau OS- muatan perintah ke domain yang bukan milik Anda adalah ilegal di sebagian besar yurisdiksi. Pemindai sebenarnya memerlukan DNS atau HTTP- verifikasi kepemilikan file sebelum membiarkan Anda menjalankan mode aktif terhadap target.

Pendekatan FixVibe: pemindaian berbasis bukti, muatan positif palsu yang rendah

FixVibe is a DAST built specifically for AI-generated web apps. The passive phase runs 230+ checks on the rendered page (headers, CSP, cookies, leaked secrets, BaaS misconfiguration, tech fingerprinting, DNS, attack-surface discovery). The active phase adds payload-firing probes (SQLi, XSS, SSTI, CORS, redirects, IDOR walking, CSRF, account enumeration, blind-SSRF) gated behind verified-domain ownership. Repo scans add code-phase checks against connected GitHub repositories. Every finding includes evidence, a CWE link, a remediation recipe, and either a coding-agent prompt or operator steps depending on who can actually apply the fix. The scan engine is open in the changelog — every new check, accuracy improvement, and false-positive fix is logged publicly.

FixVibe vs Burp Suite, ZAP, dan Nessus: ketika masing-masing alat menang

No single tool covers every workflow. For a sourced side-by-side of FixVibe, Burp Suite, ZAP, Snyk, Semgrep and Aikido, with a decision matrix, see choosing a security scanner for AI-built apps.

Dimana alat-alat tersebut saling melengkapi

  • Start with FixVibe passive as a free baseline against any deploy preview — it usually finishes in under a minute. If nothing surfaces, you have a fast confidence signal.
  • Pindah ke FixVibe active pada domain terverifikasi bila Anda menginginkan cakupan aktif penuh (SQLi/SSTI/IDOR/etc.) terhadap infrastruktur Anda sendiri.
  • Layer SAST (Semgrep, CodeQL, Snyk) pada kode sumber di CI. SAST menangkap apa yang tidak dapat dilihat oleh runtime — pola berisiko dalam jalur kode yang tidak pernah mencapai penerapan.
  • Reach for Burp Suite ketika Anda memerlukan rantai serangan khusus (bypass autentikasi spesifik, skenario IDOR yang rumit, kelemahan logika bisnis). Bersendawa adalah meja kerja manual terdalam yang tersedia; FixVibe adalah baseline otomatis tercepat.

Langkah selanjutnya

Continue dengan Vibe coding security checklist untuk audit pra-pengiriman 51 item, atau lompat ke How to secure an app built with AI coding tools untuk pengerasan langkah demi langkah dengan cuplikan kode.

// scan your app

Cukup membaca. Saatnya temukan celah di aplikasimu.

Drop in a URL — FixVibe runs every passive check from this guide plus the rest of its 230+ passive checks, usually in under a minute. Free, no install, no card.

  • Free tingkat — 3 pemindaian / bulan, tanpa kartu.
  • Pemindaian pasif terhadap URL apa pun — tidak memerlukan verifikasi domain.
  • Disetel untuk Cursor, Claude Code, Lovable, Bolt, v0, Replit.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
Jalankan scan gratis →

tanpa pendaftaran

Pemindaian keamanan kode buatan AI: DAST untuk aplikasi vibe-coded · FixVibe