Ringkasan Utama
Laporan Veracode 2026 GenAI Code Security menemukan model AI lolos tes keamanan 56% dari waktu, naik tipis dari 55% di laporan pertama, padahal kode yang dihasilkan hampir selalu bisa dikompilasi. Cross-site scripting (15%) dan log injection (12%) paling sering gagal, jadi scan dulu dua kelas itu.
Setiap rilis model sejak laporan Veracode pertama membawa benchmark coding yang lebih baik, dan setiap kali pertanyaannya tetap menggantung: apakah kodenya makin aman, atau hanya makin benar? Jawaban Veracode di Juli 2026: pass rate hanya bergeser satu poin dalam setahun.
Post ini membaca laporan itu lewat empat sumber publik: blog dan press release Veracode sendiri, liputan SD Times, dan blog 2025 sebagai pembanding. Saya tidak bisa membuka laporan lengkapnya, jadi setiap angka di bawah saya atribusikan ke salah satu halaman itu, dan metode serta batasnya dibahas di bagian tersendiri. Tidak satu pun angka ini independen: Veracode menjual scanner yang menghasilkannya.
Apa yang diukur Veracode, dan apa yang tidak
Press release menyebut programnya sudah melacak lebih dari 100 model dalam empat snapshot pengujian, dan leaderboard musim panas 2026 mencakup 11 di antaranya. Model diberi tugas code generation di beberapa bahasa dan kategori kerentanan dengan kondisi standar tanpa prompt khusus keamanan. Press release menambahkan bahwa yang diuji adalah model mentah, bukan agent atau setup produksi dengan tooling, guardrail, atau review manusia.
Blog dan press release tidak menyebut jumlah task, daftar lengkap bahasa, konfigurasi scanner, maupun kriteria lolos. Blog 2025 menguji Java, Python, C#, dan JavaScript, tetapi halaman 2026 yang saya baca tidak mengulang daftar itu, jadi saya tidak berasumsi. Anggap setiap angka sebagai hasil Veracode pada test set Veracode.
Headline: lolos 56%, syntax hampir 100%
Veracode melaporkan rata-rata security pass rate 56%, nyaris tidak berubah dari 55% di laporan pertama, dan menyebut sekitar 44% task code generation memunculkan kerentanan berisiko dalam pengujian. Di tes yang sama, kebenaran syntax kini mendekati 100%. Selisih keduanya adalah temuannya: model belajar menulis kode yang bisa dikompilasi, tetapi belum belajar menulis kode yang tahan serangan.
Blog 2025 sampai pada kesimpulan yang sama dengan angka berbeda. Blog itu melaporkan 45% sampel kode gagal tes keamanan dan model yang lebih baru dan lebih besar membaik dalam kebenaran fungsional tanpa membaik di keamanan. Jadi laporan 2026 adalah titik data kedua di garis datar, bukan temuan baru. Co-founder Chris Wysopal merumuskan aturan praktisnya di press release: perlakukan kode buatan AI seperti kode lain yang belum direview, scan dan perbaiki sebelum rilis.
Model, ukuran, dan gaya mana yang skornya berapa
Laporan memecah rata-rata menurut tipe model. Tabel ini mengumpulkan semua potongan yang bisa saya verifikasi dari press release Veracode dan SD Times, lengkap dengan komentar penulisnya bila ada.
| Potongan | Security pass rate | Konteks yang dilaporkan |
|---|---|---|
| Semua model, rata-rata | 56% | 55% di laporan pertama; sekitar 44% task memunculkan kerentanan |
| GPT-5.5 (OpenAI) | 68% | Tertinggi di leaderboard 11 model musim panas 2026; Veracode menyebutnya snapshot saat ini |
| Enam dari 11 model | 50 sampai 53% | Qwen3.7-max (Alibaba) terendah di 50%; Kimi-K2.6 dan MiMo-V2.5 mengungguli beberapa model Barat |
| Reasoning vs non-reasoning | 56% vs 51% | Penulis menduga reasoning internal bisa membantu menangkap konstruksi tidak aman sebelum output |
| Khusus coding vs general-purpose | 51% vs 52% | Model yang dibuat untuk menulis kode lebih cepat rata-rata tidak menulisnya lebih aman |
| Besar vs menengah vs kecil | 53% vs 51% vs 51% | Besar berarti di atas 100B parameter; ukuran hampir tidak membantu |
| Kebenaran syntax | Hampir 100% | Kode bisa dikompilasi; celah keamanan bukan soal kemampuan menulis kode |
Dua pembacaan yang aman. Pertama, selisih reasoning lima poin adalah efek struktural terbesar di tabel, dan penulisnya sendiri memberi catatan dengan kata bisa. Kedua, menjadi model coding atau model besar tidak otomatis lolos. Memilih model dari leaderboard bukan pengganti scan output-nya.
Kelas yang gagal: XSS dan log injection
Pass rate menyembunyikan satu pembelahan. Blog Veracode menyebut empat kelas, dan letaknya di dua ujung. Kolom terakhir adalah bacaan saya tentang alasannya, diambil dari entri CWE, bukan dari laporan.
| Kelas kerentanan | Pass rate | Fix-nya bergantung pada (bacaan saya) |
|---|---|---|
| Algoritma kriptografi | 87% | Pilihan di satu call site, dengan default aman yang sudah dikenal |
| SQL injection | 83% | Idiom lokal di pemanggilan query: parameterisasi, bukan concatenation |
| Cross-site scripting (CWE-80) | 15% | Output encoding yang bergantung di mana nilai mendarat: body HTML, attribute, atau script |
| Log injection (CWE-117) | 12% | Menetralkan nilai untuk pembaca downstream yang tidak disebut di prompt task |
Polanya cocok dengan apa yang diminta entri CWE. CWE-80 meminta output encoding yang bisa ditangani komponen downstream, dan cheat sheet OWASP menyebut encoder yang benar bergantung pada konteks: body HTML, attribute, atau JavaScript. CWE-117 menggambarkan pesan log yang dibangun dari input eksternal tanpa menetralkan elemen khusus. Di keduanya, kode tidak aman juga merupakan kode terpendek yang menyelesaikan tugas, dan deskripsi task tidak pernah bilang nilainya berbahaya.
Satu cek konsistensi dari saya: blog 2025 menyebut tool AI gagal mempertahankan diri dari cross-site scripting di 86% sampel relevan, yang kalau dibalik berarti pass rate 14%. Angka 2026 adalah 15%. Saya membalik angka kegagalan secara manual, dan kedua laporan mungkin tidak menghitung dengan cara sama, jadi baca ini sebagai petunjuk bahwa XSS tidak bergerak, bukan tren yang terukur.
Python 63%, Java 30%
SD Times dan press release sama-sama melaporkan sebaran bahasa: Python punya security pass rate tertinggi di 63% dan Java terendah di 30%. Java juga satu-satunya bahasa yang disebut Veracode membaik konsisten sepanjang setahun terakhir. Blog 2025 mencatat Java gagal 72% dari waktu, konsisten dengan Java di dasar dua laporan berturut-turut.
Sumber yang saya baca tidak memberi angka bahasa lain, jadi saya tidak bisa meranking JavaScript atau C#. Yang bisa saya katakan: selisih 33 poin antarbahasa lebih besar daripada perbedaan antarmodel mana pun di tabel di atas. Kalau stack Anda Java, efek bahasanya lebih besar daripada model yang Anda pilih.
Trade-off yang harus disebut: apa yang tidak bisa dijawab laporan ini
Sebelum mengutip 56% di rapat perencanaan, ini batasnya, masing-masing disebut oleh sumber atau langsung mengikutinya.
- Ini hasil vendor. Veracode menjual scanning dan produk fix, dan press release merekomendasikan tool-nya sendiri. Desain pengujiannya tidak diaudit independen di sumber mana pun yang saya baca.
- Hanya model mentah. Pengujian tanpa prompt keamanan dan tanpa tooling agent, jadi model yang disuruh berhati-hati, atau dibungkus reviewer, bisa berperilaku lain. Laporan tidak mengukur itu.
- Sebelas model di leaderboard 2026, satu di 68% dan sisanya bergerombol. Satu pemimpin adalah snapshot, seperti kata Veracode sendiri soal GPT-5.5.
- Pass rate menghitung task, bukan tingkat keparahan. Task log injection yang gagal dan task SQL injection yang gagal berbobot sama di rata-rata, padahal risikonya bagi Anda tidak sama.
Press release juga mengutip bahwa AI menulis sekitar separuh kode yang di-commit, dari newsletter pihak ketiga. Angka itu konteks di press release, bukan hasil ukur Veracode, jadi jangan disajikan sebagai temuan laporan ini.
Semua ini tidak membuat arahnya salah. Dua laporan berjarak setahun dari perusahaan yang sama sama-sama menunjukkan keamanan datar sementara kebenaran naik. Klaim yang jujur: metode ini tidak menemukan perbaikan, kalimat yang lebih lemah dan lebih bisa dipertahankan daripada bilang model makin buruk.
Pasang gate untuk dua kelas yang paling sering gagal
Karena kegagalannya mengelompok, kontrol termurah menyasar kelas itu. Di bawah ada dua bentuk yang akan saya cari di setiap diff berbantuan AI: baris log yang dibangun dengan string interpolation, dan escape hatch untuk injeksi HTML. Versi wrong adalah yang cenderung ditulis model tanpa prompt ketika tugasnya hanya bikin jalan.
// Wrong: the shape a model produces when nobody asks about security.
// A username of "bob\n2026-10-17T09:00:00Z INFO admin login ok" forges a
// second, fake log line (CWE-117, log forging).
logger.info(`login failed for ${req.body.username}`);
// Right: structured logging. The value travels as a JSON field, and
// JSON serialisation escapes the newline, so one event stays one line.
logger.info({ event: "login_failed", username: req.body.username });
// Wrong: React escapes text children, but this opts out of that.
// Untrusted HTML goes straight into the DOM (CWE-80).
<div dangerouslySetInnerHTML={{ __html: comment.body }} />;
// Right: render it as a text child and let the framework encode it.
<div>{comment.body}</div>;
// If you genuinely need rich HTML, sanitise first, then inject.
// import DOMPurify from "dompurify";
// <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(comment.body) }} />Lalu pasang scanner yang bukan model di depan tombol merge. Workflow CodeQL ini memakai suite security-extended, yang menurut dokumentasi GitHub adalah suite default ditambah query dengan severity dan precision lebih rendah. Harapkan lebih banyak noise daripada default dan tuning, jangan dimatikan.
# .github/workflows/codeql.yml
# Gate AI-assisted pull requests on a scanner that is not the model.
name: codeql
on:
pull_request:
branches: [main]
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write # needed to upload SARIF results
strategy:
matrix:
language: [javascript-typescript, python, java-kotlin]
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# security-extended = default suite plus lower severity and
# precision queries, per GitHub's docs. Noisier, catches more.
queries: security-extended
- uses: github/codeql-action/analyze@v4Kaitkan gate ke branch protection rule supaya check-nya wajib, bukan opsional. Scanner yang bisa dilewati saat deadline hanya melindungi hari-hari ketika Anda tidak membutuhkannya.
Yang dikerjakan hari Senin
Rekomendasi Veracode sendiri: pilih model dengan mempertimbangkan keamanan, verifikasi kode di workflow, fokuskan remediasi pada flaw yang bisa dieksploitasi, dan atur AI coding sebagai input software. Diterjemahkan jadi pekerjaan seminggu:
- Aktifkan code scanner untuk pull request di setiap repository tempat asisten menulis kode, dan jadikan check-nya wajib.
- Masukkan XSS dan log injection ke checklist review secara eksplisit, karena itu dua kelas dengan pass rate terendah di laporan.
- Cari escape hatch yang sudah ada di codebase seperti dangerouslySetInnerHTML dan pemanggilan log berbasis string, lalu perbaiki atau beri justifikasi satu per satu.
- Kalau memakai Java, scan lebih ketat. Celah bahasa di laporan lebih besar daripada celah antarmodel.
- Catat model dan tool mana yang menghasilkan tiap perubahan, supaya temuan di kemudian hari bisa dilacak. Saran governance Veracode meminta akuntabilitas persis seperti itu.
# A crude tripwire, not a scanner: list every XSS escape hatch and every
# string-built log call in the diff, so a human looks at them on purpose.
git diff origin/main...HEAD -U0 -- '*.tsx' '*.jsx' '*.ts' '*.js' \
| grep -nE 'dangerouslySetInnerHTML|innerHTML|logger\.(info|warn|error)\(`' \
|| echo "no escape hatches in this diff"Tripwire di atas sengaja kasar. Ia hanya mendaftar baris untuk dilihat manusia dan tidak menemukan apa pun yang tidak ditemukan analyzer sungguhan, tetapi bisa ditambahkan ke kebiasaan review dalam satu menit selagi scanner masih diproses persetujuannya.
Aturan yang saya bawa dari laporan ini: kebenaran bukan bukti keamanan. Model kini hampir selalu bisa dikompilasi dan lolos tes keamanan sedikit di atas separuh waktu, dan titik lemahnya adalah kelas yang bergantung konteks, XSS dan log injection. Perlakukan output AI sebagai kode belum direview, scan dengan sesuatu yang bukan model, dan baca pass rate vendor sebagai hasil sebuah metode, bukan hukum alam.
Sumber dan bacaan lanjutan
- Veracode: blog 2026 GenAI Code Security Report
- Veracode: press release, keamanan mentok di pass rate 56%
- SD Times: keamanan kode buatan AI nyaris tidak membaik sejak tahun lalu
- Veracode: blog 2025 GenAI Code Security Report
- MITRE CWE-117: Improper Output Neutralization for Logs
- MITRE CWE-80: Basic cross-site scripting
- OWASP: Cross Site Scripting Prevention Cheat Sheet
- GitHub Docs: customizing an advanced setup for code scanning

