Article

State of Code Security Pada Source Code

4 min Read

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:

  1. Vulnerabilities
    Merupakan temuan yang telah terverifikasi sebagai celah keamanan (confirmed issues) dan harus segera diperbaiki karena berpotensi langsung dieksploitasi.
  2. 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:

  • Menyembunyikan aktivitas berbahaya.
  • Memalsukan jejak audit (log forgery).
  • Merusak integritas sistem monitoring.

Mitigasi:
Gunakan validasi dan sanitasi input sebelum logging, serta batasi format dan tipe data yang dicatat.

Exceptions should not be thrown from servlet methods Java ▢▢▢ Pada arsitektur berbasis servlet, exception handling yang tidak terkontrol dapat menyebabkan:

  • Denial-of-Service (DoS) akibat crash berulang.
  • Exposure terhadap sensitive information melalui stack trace.
  • Ketidakstabilan response handling.

Mitigasi:
Implementasikan try-catch secara eksplisit dan gunakan centralized error handling.

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:

  • Eksekusi script berbahaya di browser user.
  • Session hijacking.
  • Data exfiltration.

Mitigasi:
Gunakan output encoding, library keamanan standar, dan pastikan template engine melakukan auto-escaping.

Database queries should not be vulnerable to injection attacks C#, Java, JavaScript, PHP Contoh paling umum adalah SQL Injection, yang memungkinkan penyerang:

  • Memodifikasi query logic.
  • Mengakses atau menghapus data.
  • Melakukan remote code execution.

Mitigasi:
Gunakan prepared statements atau parameterized queries.

Weak SSL/TLS protocols should not be used C#, Java, Python Penggunaan protokol SSL/TLS yang sudah deprecated membuka risiko:

  • Cryptographic attacks.
  • Kebocoran data dalam bentuk plaintext.

Mitigasi:
Gunakan versi TLS modern dan algoritma kriptografi yang kuat.

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:
Gunakan secret management system atau vault, dan lakukan rotasi kredensial.

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:
Gunakan environment variables, configuration files, atau domain abstraction.

Using slow regular expressions is security-sensitive JavaScript, TypeScript, Java, Python ▢▢▢ Regex yang tidak efisien dapat menyebabkan catastrophic backtracking.

Dampak:

  • Penurunan performa.
  • Potensi ReDoS (Regular Expression Denial of Service).

Mitigasi:
Optimalkan pola regex dan hindari unbounded repetition.

Delivering code in production with debug features activated is security-sensitive Java, Python, C# ▢▢ Fitur debugging yang aktif di production dapat:

  • Membocorkan data sensitif.
  • Mengekspos internal logic aplikasi.

Mitigasi:
Pastikan semua fitur debug dinonaktifkan sebelum deployment.

Not specifying a timeout for regular expressions is security-sensitive C# ▢▢ Regex tanpa timeout dapat menyebabkan proses berjalan tanpa batas.

Dampak:

  • Resource exhaustion
  • Potensi DoS

Mitigasi:
Tentukan matchTimeout dan validasi input yang tidak terpercaya.

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

Table of Contents

Share this article
Scroll to Top