Dalam beberapa tahun terakhir, penggunaan AI dalam software development meningkat secara signifikan. Model AI kini mampu membantu menulis kode dengan cepat dan bahkan menyelesaikan berbagai tugas programming dengan tingkat keberhasilan yang tinggi.
Namun, pertanyaan yang mulai muncul adalah: apakah kode yang dihasilkan benar-benar aman untuk digunakan di production?
Artikel ini membahas analisis terhadap ribuan kode hasil AI, dengan fokus pada kualitas dan potensi risiko yang tersembunyi, mulai dari vulnerability hingga bug kompleks yang sering luput dari perhatian.
Latar Belakang
SonarQube saat ini memproses lebih dari 300 miliar lines of code (LOC) setiap hari untuk dilakukan scanning. Tim SonarQube secara aktif mengumpulkan dan menganalisis data untuk mengidentifikasi jenis masalah yang paling sering muncul pada berbagai codebase. Pada pembahasan ini, fokus utama adalah pada security issues.
Meskipun dalam proses pengembangan aplikasi modern sudah banyak memanfaatkan AI, aspek security justru menjadi semakin krusial. Hal ini disebabkan karena model AI dilatih menggunakan existing source code, yang tidak selalu bebas dari vulnerabilities. Dengan kata lain, AI dapat secara tidak langsung mewarisi atau bahkan mereproduksi pola kode yang tidak aman jika tidak dikontrol dengan baik.
Teori Mengenai Sonarqube
SonarQube mengevaluasi dampak code issues pada setiap project atau codebase menggunakan tiga metrik utama, yaitu:
- Reliability
- Security
- Maintainability
Ketiga metrik ini saling berkaitan erat. Codebase yang tidak terjaga pemeliharannnya cenderung akan mengalami peningkatan reliability issues serta security vulnerabilities seiring waktu.
Oleh karena itu, ketiga metrik ini tidak hanya berfungsi untuk mengukur kualitas aplikasi pada tahap awal pengembangan, tetapi juga berperan penting dalam menjaga kualitas jangka panjang (long-term sustainability), termasuk:
- Value (nilai bisnis aplikasi)
- Adaptability (kemudahan untuk dimodifikasi atau dikembangkan)
- Total cost of ownership sepanjang software development lifecycle
Sebagai bagian dari mekanisme tersebut, SonarQube juga menetapkan issue prioritization untuk membantu tim dalam menentukan tingkat urgensi perbaikan.
SonarQube mengelompokkan security issues menjadi dua kategori utama:
- Vulnerabilities
Merupakan temuan yang telah terverifikasi sebagai celah keamanan (confirmed issues) dan harus segera diperbaiki karena berpotensi langsung dieksploitasi. - Security Hotspots
Merupakan area yang mengandung potensi risiko (sensitive or ambiguous code), namun masih memerlukan proses manual review untuk menentukan apakah benar-benar berbahaya atau tidak (false positive vs real risk).
Selain itu, terdapat aspek penting lain yaitu Secret Detection.
Secrets (seperti API keys, tokens, credentials) tidak seharusnya disimpan langsung di dalam source code repository. Praktik yang direkomendasikan adalah menyimpan secrets di dalam:
- File.env
- Secure vaults
- Secret management pada pipeline CI/CD
Kebocoran secrets dapat menyebabkan berbagai dampak serius, seperti:
- Akses yang tidak sah (unauthorized access)
- Peningkatan biaya (unexpected billing)
- Gangguan layanan (service disruption)
SonarQube menggunakan kombinasi semantic analysis dan regular expressions (regex) untuk mendeteksi potensi kebocoran secrets secara otomatis.
Metode Pengambilan Data
Data yang digunakan dalam analisis ini dikumpulkan dengan parameter sebagai berikut:
- Periode: 1 Juli – 31 Desember 2024
- Sumber: Project di SonarQube Cloud
- Bahasa pemrograman yang dianalisis:
- Java
- JavaScript
- TypeScript
- Python
- C#
- C++
- PHP
Dari total sekitar 7.9 miliar LOC, ditemukan sekitar 445 juta issues, yang tersebar dalam lebih dari 5,300 quality dan security rules yang berbeda.
Analisis Temuan Terbanyak Terkait Vulnerability
Dari total 445 juta issues, sekitar 1.3 juta dikategorikan sebagai security vulnerabilities, yang setara dengan sekitar 170 vulnerabilities per 1 juta LOC.
| Temuan/Issues | Bahasa | Frekuensi | Penjelasan |
| Logging should not be vulnerable to injection attacks | C++, Java, PHP, Python | ▢▢▢▢▢▢▢▢ | Log injection terjadi ketika aplikasi tidak melakukan sanitization terhadap input yang dicatat ke dalam log. Penyerang dapat memanipulasi isi log untuk:
Mitigasi: |
| Exceptions should not be thrown from servlet methods | Java | ▢▢▢ | Pada arsitektur berbasis servlet, exception handling yang tidak terkontrol dapat menyebabkan:
Mitigasi: |
| Endpoints should not be vulnerable to reflected cross-site scripting (XSS) attacks | C#, Java, JavaScript, TypeScript, PHP, Python | ▢▢ | Reflected XSS terjadi ketika input user langsung dimasukkan ke dalam HTTP response tanpa encoding yang tepat.
Dampak:
Mitigasi: |
| Database queries should not be vulnerable to injection attacks | C#, Java, JavaScript, PHP | ▢ | Contoh paling umum adalah SQL Injection, yang memungkinkan penyerang:
Mitigasi: |
| Weak SSL/TLS protocols should not be used | C#, Java, Python | ▢ | Penggunaan protokol SSL/TLS yang sudah deprecated membuka risiko:
Mitigasi: |
Analisis Temuan Terbanyak Terkait Security Hotspots
Dari total 445 juta issues, sekitar 8.4 juta dikategorikan sebagai security hotspots, atau sekitar 1,100 temuan per 1 juta LOC.
| Temuan/Issues | Bahasa | Frekuensi | Penjelasan |
| Hard-coded credentials are security-sensitive | C#, JavaScript, TypeScript, PHP, Python | ▢▢▢▢▢ | Penyimpanan kredensial langsung di source code meningkatkan risiko kebocoran.
Mitigasi: |
| Using hard-coded IP addresses is security-sensitive | Python, TypeScript, JavaScript, C#, PHP, Java, Python | ▢▢▢ | Hardcoded IP mengurangi fleksibilitas dan dapat menimbulkan risiko saat deployment.
Mitigasi: |
| Using slow regular expressions is security-sensitive | JavaScript, TypeScript, Java, Python | ▢▢▢ | Regex yang tidak efisien dapat menyebabkan catastrophic backtracking.
Dampak:
Mitigasi: |
| Delivering code in production with debug features activated is security-sensitive | Java, Python, C# | ▢▢ | Fitur debugging yang aktif di production dapat:
Mitigasi: |
| Not specifying a timeout for regular expressions is security-sensitive | C# | ▢▢ | Regex tanpa timeout dapat menyebabkan proses berjalan tanpa batas.
Dampak:
Mitigasi: |
Analisis Temuan Terbanyak Terkait Hardcoded Secrets
Pada periode 1 Oktober – 31 Desember 2024, terdeteksi sekitar 465 ribu hardcoded secrets yang secara otomatis dikategorikan sebagai blocker issues. Sekitar 50% di antaranya merupakan database passwords.
| Temuan/Issues |
| Database passwords should not be disclosed |
| Azure Storage Account Keys should not be disclosed |
| MongoDB database passwords should not be disclosed |
| Amazon Web Services credentials should not be disclosed |
| OVH keys should not be disclosed |
Implikasi:
- Unauthorized system access.
- Financial loss akibat misuse resource.
- Service disruption.
Penutup
Laporan ini menunjukkan bahwa security issues masih banyak ditemukan bahkan pada active codebase yang sedang dikembangkan dan diperlihara. Pola temuan yang berulang mengindikasikan bahwa sebagian besar masalah berasal dari praktik pengembangan yang kurang konsisten dalam menerapkan secure coding standards.
Hal ini menegaskan kebutuhan akan:
- Automated code review.
- Continuous security scanning.
- Integrasi keamanan dalam pipeline CI/CD (shift-left security).
SonarQube berperan penting dalam proses ini, khususnya dalam mendeteksi dan mengelola:
- Vulnerabilities.
- Security Hotspots.
- Secret Detection.
Dengan implementasi yang tepat, tools seperti SonarQube dapat membantu mencegah critical issues agar tidak lolos ke production environment, sekaligus meningkatkan kualitas dan keamanan aplikasi secara keseluruhan dalam jangka panjang. Mari diskusikan lebih lanjut dengan tim i3 bagaimana mengelola risiko pada AI-generated code.
Written by: Owen Aloysius, Consultant DevOps
Edited by: Pipit Pirda Damayanti, Marketing