"No matter la kau ada fundamental ke tidak, as long as you use AI to code, you are a vibe coder."
Professional Negligence
From pembacaan aku dari Threads ni, kefahaman aku apa yang berlaku adalah penulis thread ni dia jadi salah seorang saksi untuk kes mahkamah yang melibatkan seorang developer system yang disaman sebab kecuaian profesional. Kecuaian developer ni adalah, dia gagal make sure system yang dia buat tu selamat and stabil untuk digunakan oleh client atau pengguna akhir system yang dia buat tu. Berlaku kebocoran data peribadi sebab dia punya code tu tak secure enough at which ini adalah satu kes jenayah sebab melibatkan data sensitif pengguna.
My intakes on this issue adalah walaupun wxy.codex ni mention pasal vibe coder, isu ni not necessarily happen sebab developer just vibe code all the way system yang dia buat tu. Benda ni happen sebab dia just tak responsible enough untuk make sure code system dia selamat, and dia tak tahu apa yang AI buat untuk build the system tu.
The Eight Issues
Aku outlinekan 8 isu yang wxy.codex cerita dalam thread dia dekat table bawah ni. Aku minta bantuan Gemini 3.5 Flash untuk explain dekat aku kenapa semua ni menjadi issue dalam kes developer yang tengah kena saman sebab kecuaian profesional ni.
| No | Digital Forensics Point | Explaination | Impact / Risk to the System & Data | Why It Constitutes Professional Negligence |
|---|---|---|---|---|
| 1 | SQL Injection (SQLi) Vulnerability | Using DB::raw, whereRaw, or orderByRaw with direct user input via string concatenation | Attackers can bypass the login/authentication system entirely to read, modify, or completely delete the underlying production database. | The developer intentionally bypassed parameterized queries / placeholder bindings (?) provided securely by default by the Laravel framework. |
| 2 | Path Traversal / Arbitrary File Download | Concatenating raw path parameters with storage_path without validation | Attackers can manipulate URL parameters (e.g., ../../../../.env) to escape the intended directory and download sensitive system configuration files. | The developer failed to sanitize user file input using the basename() function and refused to use the Laravel Storage Facade (Flysystem), which has built-in directory restriction protections. |
| 3 | Race Conditions / Missing Transaction Locks | Handling large-scale concurrent data inputs linearly without database transaction controls | Data can become corrupted, overwritten, or suffer from severe integrity errors (such as mismatched financial balances or double submissions) under high traffic. | The developer failed to implement proper data locking mechanisms like lockForUpdate(), sharedLock(), or a Redis-based Atomic Lock required for high-concurrency systems. |
| 4 | Hardcoded Credentials in a Public Repository | Writing production database passwords, API keys, and the APP_KEY directly into the source code and pushing it to public GitHub | Anyone on the internet can view the code repository, extract the secret keys, and infiltrate the production server to breach user data or abuse paid APIs. | This violates the absolute most fundamental rule of IT security by exposing live system cryptographic keys and credentials to the general public. |
| 5 | Absence of Audit Logs / Digital Trail | System logging functions were entirely disabled or incorrectly configured | System owners are left completely "blind" during a data breach, making it impossible to investigate who, when, and how the data was compromised. | The developer neglected to record or store digital audit logs to monitor sensitive database transactions, which is critical for cybersecurity incident response. |
| 6 | Lack of Testing & Vulnerability Scanning | Deploying the system live without any automated testing or code analysis | The application remains exposed to critical bugs, architectural flaws, and basic security oversights that should have been caught before production. | There was zero documentation or log history showing that the system underwent Unit Testing, Integration Testing, or automated vulnerability scans prior to going live. |
| 7 | Inclusion of Malicious Third-Party Packages | Using unverified dependencies containing backdoors within composer.json or package.json | A malicious backdoor script is embedded directly into the application core, allowing remote attackers to gain unauthorized access or control over the server. | The developer blindly copied third-party package suggestions from a Large Language Model (AI) without conducting a manual dependency verification, falling victim to AI hallucination or malicious package typosquatting. |
| 8 | Open-Source License Violation & Copyright Infringement | Using GNU GPL-licensed code snippets generated by AI and deleting the original author comments | The system owner and client can face severe civil and criminal liabilities under copyright laws for unauthorized code modification and piracy. | The developer intentionally engaged in Copyright Notice Removal by deleting the original licensing and authorship comments at the top of the open-source code files. |
Point 1 - SQL Injection (SQLi) Vulnerability
Dalam industri IT, SQL Injection adalah salah satu lubang keselamatan (vulnerability) yang paling tua, paling terkenal, dan paling mudah untuk dihalang. Isu ini sudah difahami oleh komuniti teknologi di seluruh dunia selama lebih 25 tahun. Memandangkan framework moden seperti Laravel sudah pun menghalang perkara ini secara automatik (secara default), seseorang pembangun terpaksa "bersusah-payah" menulis kod yang salah (DB::raw()) untuk membolehkan lubang keselamatan ini wujud. Di dalam mahkamah, saksi pakar akan berhujah bahawa mana-mana pembangun yang bertauliah sepatutnya tahu perkara asas ini. Kegagalan menjaga pintu log masuk utama adalah sama seperti seorang kontraktor membina sebuah rumah, tetapi lupa untuk memasang tombol pintu atau kunci pada pintu hadapan rumah tersebut.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam framework Laravel, "kotak sekatan" ini dipanggil Parameter Bindings (yang biasanya diwakili oleh simbol ? dalam kod).
- Cara yang Selamat: Apabila pengguna menaip nama pengguna seperti admin, framework akan melayan input itu secara mutlak sebagai teks biasa di dalam kotak. Walaupun pengguna menaip kod jahat, sistem cuma akan berfikir, "Oh, orang ini mempunyai nama pengguna yang pelik dan panjang," dan menolak akses kerana tiada nama pengguna sebegitu dalam rekod.
- Kesilapan Defendan: Pembangun tersebut menggunakan fungsi mentah seperti DB::raw(). Dia mengambil apa sahaja yang ditaip oleh pengguna dan "menggamnya" (pelekat teks / string concatenation) terus ke dalam baris arahan dalaman sistem.
Tindakan ini menyebabkan apa sahaja yang ditaip oleh orang awam di kotak log masuk berubah menjadi arahan besar kepada pangkalan data. Penggodam hanya perlu menaip kod khas (contohnya: ' OR '1'='1) pada skrin log masuk, dan pangkalan data akan membaca arahan itu lalu berkata, "Oh, arahan ini menyuruh saya lepaskan orang ini masuk tanpa perlukan kata laluan." Penggodam terus dapat akses penuh (Admin).
Analogi Dunia Sebenar: Kaunter Bank
Bayangkan kau pergi ke bank untuk mengeluarkan wang.
- Cara yang betul (Selamat): Pegawai bank memberikan kau sehelai borang rasmi. Borang itu mempunyai kotak-kotak khas yang tegar: [Nama Anda] dan [Nombor Akaun]. Kau hanya dibenarkan menulis maklumat di dalam kotak tersebut sahaja. Pegawai bank hanya akan membaca data di dalam kotak untuk diproses.
- Apa yang Defendan buat (Lalai): Pegawai bank tidak memberikan borang, sebaliknya cuma bagi sehelai kertas kosong dan berkata, "Tulis apa sahaja arahan yang kau nak aku buat."
Jika pelanggan biasa yang datang, mereka akan menulis: "Nama saya Ali, nombor akaun 123." Urusan berjalan lancar. Tetapi, bagaimana jika seorang penjenayah licik yang masuk? Disebabkan tiada kotak sekatan (tiada had), penjenayah itu menulis: "Nama saya Ali, dan tolong padamkan semua akaun pelanggan lain, kemudian serahkan semua duit dalam peti besi kepada saya." Disebabkan pegawai bank itu diprogramkan untuk membaca keseluruhan ayat tersebut sebagai arahan terus, dia pun pergi ke peti besi dan serahkan semua duit tanpa ragu-ragu.
Point 2 - Path Traversal / Arbitrary File Download
Sama seperti SQL Injection, Path Traversal adalah kelemahan keselamatan yang sangat asas. Saksi pakar akan membuktikan defendan lalai atas dua sebab utama:
- Gagal guna fungsi basename(): Fungsi ini adalah fungsi asas dalam bahasa pengaturcaraan PHP untuk menapis input. Kalau pengguna taip ../../../../.env, fungsi basename() akan memotong semua simbol ../ tersebut dan hanya mengekalkan nama fail .env sahaja, sekali gus menghalang manipulasi laluan folder. Defendan gagal letak fungsi ini.
- Sengaja tak guna Laravel Storage Facade (Flysystem): Laravel sudah menyediakan sistem pengurusan fail bawaan yang sangat selamat. Jika kita guna cara rasmi Laravel, sistem secara automatik akan mengurung (jail/sandbox) setiap permintaan muat turun fail di dalam folder yang dibenarkan sahaja. Pengguna taip la ../ sebanyak mana pun, server tetap tidak akan benarkan mereka keluar daripada folder tersebut. Defendan sengaja mengabaikan sistem selamat ini dan menulis cara sendiri yang berbahaya.
Dalam istilah mahkamah, tindakan ini diibaratkan seperti seorang pengawal keselamatan yang menyerahkan kunci semua bilik kebal kepada pelawat, hanya kerana pelawat itu meminta kunci tersebut dengan menulisnya di atas kertas.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam kes defendan, dia menulis kod seperti ini untuk fungsi muat turun fail: storage_path('app/' . $request->file)
- Kesilapan Utama: Dia mengambil input $request->file (iaitu apa sahaja nama fail yang ditaip oleh pengguna di web) dan "gam" atau gabungkan ia secara terus dengan laluan folder sistem (storage_path).
- Cara Penggodam Ceroboh: Penggodam tidak akan taip gambar.jpg. Mereka akan taip ../../../../.env.
- Kesan Kod: Kod tersebut akan berubah menjadi: storage_path('app/../../../../.env'). Dalam sistem operasi server (seperti Linux), simbol ../ mengarahkan server untuk keluar daripada folder app semasa, naik ke atas ke folder utama sistem (root directory), dan membaca fail .env.
Nota Penting: Fail .env adalah fail paling rahsia dalam Laravel kerana di situlah tempat pembangun menyimpan kata laluan pangkalan data (database password), kunci rahsia enkripsi (APP_KEY), dan API keys pihak ketiga (seperti Stripe atau AWS). Sekali fail ini bocor, penggodam sudah memiliki "kunci induk" untuk mengawal keseluruhan sistem dan server.
Analogi Dunia Sebenar: Kaunter Fail Pejabat Kerajaan
Bayangkan sebuah pejabat kerajaan yang menyimpan beribu fail sulit. Di hadapan pejabat itu, ada sebuah kaunter kecil untuk orang awam meminta dokumen yang dibenarkan (contohnya: borang lesen atau risalah awam).
- Cara yang betul (Selamat): Kau pergi ke kaunter dan berkata, "Saya nak Borang A." Pegawai kaunter masuk ke dalam, cari rak yang dilabel [Borang Awam], ambil Borang A, dan serahkan kepada kau. Kau langsung tidak dibenarkan masuk ke bilik belakang atau menyentuh rak fail.
- Apa yang Defendan buat (Lalai): Pegawai kaunter memberikan kau satu borang kosong dan berkata, "Tulis laluan/lokasi fail yang kau nak aku ambil dari bilik belakang."
Pelanggan biasa akan tulis: Borang_A.pdf. Pegawai bank ambil dan bagi. Selesai. Tetapi, datang seorang penggodam yang tahu seluk-beluk bangunan tersebut. Dia menulis arahan seperti ini pada kertas tersebut: ..\..\Bilik_Rahsia\Gaji_Kakitangan.xlsx
Simbol ..\ itu bermaksud "undur satu langkah ke belakang" (keluar dari bilik borang awam), masuk ke koridor utama, dan jalan terus ke bilik rahsia untuk ambil fail slip gaji kakitangan. Oleh kerana pegawai kaunter itu lurus bendul dan hanya mengikut arahan teks mentah tersebut bulat-bulat, dia pun pergi ke bilik rahsia, ambil fail sulit itu, dan serahkan kepada penggodam.
Point 3 - Race Conditions / Missing Transaction Locks
Di mahkamah, peguam defendan mungkin akan pertahankan diri dengan berkata, "Sistem saya tak rosak, kod saya jalan elok masa saya test." Namun, saksi pakar akan mematahkan hujah tersebut dengan membuktikan Kecuaian Standard Kejuruteraan:
- Gagal reka bentuk untuk skala besar: Apabila sesebuah syarikat IT menerima kontrak untuk membina sistem berskala besar atau sistem yang menguruskan transaksi bernilai tinggi, pembangun wajib mengambil kira faktor trafik serentak (concurrency).
- Mengabaikan Integriti Data: Membina sistem tanpa fungsi Transaction Locking pada modul kritikal membuktikan pembangun tidak mempunyai pengetahuan tentang ACID properties (prinsip asas integriti pangkalan data).
Dalam istilah mudah, tindakan defendan ini ibarat membina sebuah lampu isyarat di persimpangan jalan yang sibuk, tetapi membiarkan lampu hijau menyala dari semua arah secara serentak dengan harapan "pemandu pandai-pandai la elak sendiri". Apabila kemalangan (data rosak) berlaku, pereka lampu isyarat itu yang akan disalahkan kerana lalai.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam kes sistem skala besar yang dibina oleh defendan, dia membiarkan sistem memproses kemasukan data (seperti transaksi kewangan, pendaftaran, atau kemas kini stok) secara linear biasa tanpa sebarang kawalan transaksi (Concurrency Control).
- Kesilapan Kod: Apabila dua permintaan (request) masuk ke server pada milisaat yang sama, kedua-duanya membaca nilai pangkalan data yang sama (contohnya: Baki Akaun = RM100). Kedua-duanya meluluskan pengeluaran wang RM100 secara serentak. Baki akaun sepatutnya menjadi negatif (-RM100), tetapi disebabkan tiada sistem kunci, pangkalan data dikemas kini secara salah dan baki akhir hanya menunjukkan RM0. Klien kerugian wang.
- Cara Penyelesaian yang Betul: Laravel menyediakan fungsi seperti lockForUpdate() atau sharedLock() semasa membuat pertanyaan pangkalan data (database query). Sesiapa yang sampai dahulu akan "mengunci" baris data tersebut, dan pengguna kedua akan diletakkan dalam barisan (queue) sehinggalah transaksi pertama selesai (commit). Untuk sistem berskala sangat besar, pembangun biasanya menggunakan Atomic Lock berasaskan Redis untuk menguruskan giliran trafik dengan sangat pantas. Defendan langsung tidak memasang semua ini.
Analogi Dunia Sebenar: Pembelian Tiket Konsert (Sistem Manual)
Bayangkan kau sedang beratur untuk membeli tiket konsert yang tinggal hanya 1 tiket terakhir. Kaunter tiket ada dua (Kaunter A dan Kaunter B), dan kedua-dua kaunter ini merujuk kepada sebuah buku rekod log yang sama di atas meja tengah.
- Cara yang betul (Selamat / Berkuasa): Apabila pelanggan di Kaunter A mahu beli tiket terakhir itu, pekerja Kaunter A akan pergi ke meja tengah, ambil pen dan letak tangan di atas buku tersebut (mengunci buku/Lock). Pekerja Kaunter B yang datang kemudian terpaksa tunggu sehingga Kaunter A selesai. Kaunter A semak, tiket ada, tulis "SOLD", bayar, dan lepaskan kunci buku. Apabila Kaunter B buka buku tersebut, dia nampak tiket sudah habis. Pembelian berganda berjaya dihalang.
- Apa yang Defendan buat (Lalai): Sistem tidak mempunyai fungsi mengunci buku (Tiada Locking Mechanism). Proses berlaku secara serentak seperti ini:
- Minit 10:00 – Pelanggan Kaunter A nak beli tiket. Pekerja Kaunter A pandang buku dari jauh: "Ok, ada 1 tiket lagi."
- Minit 10:00 (Saat yang sama) – Pelanggan Kaunter B juga nak beli. Pekerja Kaunter B pun pandang buku yang sama dari jauh: "Ok, ada 1 tiket lagi."
- Minit 10:01 – Kaunter A proses bayaran, tulis "SOLD" dalam buku.
- Minit 10:01 (Saat yang sama) – Kaunter B juga proses bayaran, dan tindih (overwrite) tulisan tadi, tulis "SOLD" untuk pelanggannya.
Hasilnya: Bank atau penganjur konsert telah menjual 1 tiket yang sama kepada 2 orang yang berbeza. Ini dinamakan Race Condition (Sistem berlumba-lumba memproses data tanpa giliran yang sah).
Point 4 - Hardcoded Credentials in a Public Repository
Di mahkamah, peguam defendan mungkin akan cuba berhujah, "Syarikat saya akaun GitHub kecil sahaja, tak sangka ada orang terjumpa fail tu." Hujah itu langsung tidak akan diterima oleh hakim kerana saksi pakar akan membuktikan:
- Pelanggaran Protokol Keselamatan Paling Asas: Mengasingkan kredensial rahsia daripada kod utama adalah silibus minggu pertama dalam mana-mana pembelajaran IT atau keselamatan siber. Malah, fail .gitignore yang disediakan secara lalai (default) oleh Laravel sudah pun diprogramkan untuk menghalang fail rahsia daripada ter-upload ke GitHub. Defendan terpaksa memintas sistem amaran ini untuk membolehkan fail itu bocor.
- Membuka Ruang Pencerobohan Tanpa Halangan: Tindakan membiarkan APP_KEY terdedah di GitHub awam membolehkan penggodam memecah masuk (decrypt) sesi pengguna (user sessions) dan menipu sistem pengesahan log masuk dengan sangat mudah.
Dalam istilah undang-undang kecuaian, tindakan defendan ini adalah sama seperti seorang peguam yang mahu keluar makan tengah hari, lalu dia tinggalkan dokumen sulit kes pelanggan di atas meja kedai mamak dan membiarkan sesiapa sahaja menyalin dokumen tersebut.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam pembangunan aplikasi menggunakan Laravel atau mana-mana framework moden, ada satu fail khas bernama .env (Environment file).
- Sistem Semak & Imbang yang Betul: Fail .env ini berfungsi sebagai "peti rahsia" di dalam server. Di sinilah kita letak kata laluan database, rahsia sistem (APP_KEY), dan kunci API perkhidmatan berbayar. Kod utama sistem pula (fail .php) diprogramkan untuk membaca rahsia ini dari fail .env tanpa menulis teks kata laluan itu secara terus di dalam kod. Fail .env ini wajib disorok dan diharamkan sama sekali daripada dimuat naik ke GitHub.
- Kesilapan Defendan (Hardcoding): Defendan tidak menggunakan fail .env dengan betul. Dia menaip terus teks kata laluan pangkalan data produksi dan kunci API berbayar di dalam baris-baris kod utamanya (hardcoded).
- Kebocoran ke GitHub: Apabila dia memuat naik (push) kod sumber sistem tersebut ke GitHub di bawah tetapan "Public Repository", keseluruhan fail kod tersebut boleh dibaca, dicari, dan dimuat turun oleh sesiapa sahaja di internet secara percuma.
Fakta Menakutkan: Di internet, terdapat beribu-ribu bot pengaut data otomatik (automated scrapers) yang dibina oleh penggodam. Bot ini bekerja 24 jam sehari mengimbas setiap kod baharu yang dimuat naik ke GitHub awam. Jika bot ini terjumpa perkataan seperti DB_PASSWORD atau AWS_SECRET_KEY, ia akan mencuri kunci tersebut dalam masa beberapa saat sahaja untuk menceroboh server atau menggunakan API berbayar sehingga klien kerugian beribu ringgit.
Analogi Dunia Sebenar: Kunci Induk Rumah di Papan Kenyataan Awam
Bayangkan kau membina sebuah bangunan apartmen yang sangat mewah untuk klien kau. Di dalam bangunan itu ada bilik kebal, data peribadi penghuni, dan peti besi berisi duit.
- Cara yang betul (Selamat): Kau (pembangun) memegang kunci pendua secara rahsia. Kunci-kunci bilik penting disimpan di dalam peti besi khas yang berkunci, dan hanya pekerja tertentu yang tahu kod rahsianya.
- Apa yang Defendan buat (Lalai):
- Dia mengambil semua kunci induk bangunan tersebut—kunci pintu depan, kunci bilik kebal, kunci CCTV—lalu dia lekatkan label nama pada setiap kunci itu (contoh: "Kunci Bilik Kebal" atau "Kata Laluan Database").
- Kemudian, dia pergi ke sebuah papan kenyataan awam di tepi jalan besar yang semua orang lalu-lalang boleh tengok (GitHub Awam). Dia gantung semua kunci-kunci berlabel tadi di situ.
Sesiapa sahaja yang berjalan di kaki lima boleh nampak kunci itu, ambil, pergi ke bangunan apartmen tersebut, dan buka bilik kebal tanpa perlu memecah masuk.
Point 5 - Absence of Audit Logs / Digital Trail
Di mahkamah, isu ini amat kritikal kerana tindakan defendan telah menghancurkan rantaian bukti (chain of custody / digital evidence). Saksi pakar akan mengemukakan hujah-hujah berikut terhadap defendan:
- Menggagalkan Proses Tindak Balas Insiden (Incident Response): Apabila sistem diceroboh, perkara pertama yang diperlukan oleh pakar forensik digital untuk menyelamatkan data klien adalah fail log. Tanpa log, klien menjadi "buta" sepenuhnya—mereka tidak tahu fail apa yang telah dicuri, berapa banyak data yang bocor, dan adakah penggodam itu masih berada di dalam server mereka sekarang.
- Pelanggaran Mandat Akta Perlindungan Data Peribadi (PDPA): Di bawah prinsip keselamatan data, mana-mana organisasi yang menguruskan data sensitif wajib mempunyai mekanisme untuk memantau pencerobohan. Kegagalan menyediakan log audit bermakna sistem itu dibina tanpa mempedulikan undang-undang perlindungan data negara.
Dalam istilah perundangan, mematikan fungsi logging pada sistem yang memegang data penting orang awam adalah sama seperti seorang pengawal keselamatan yang sengaja mematikan lampu penggera (alarm system) bangunan sewaktu dia pergi tidur. Apabila rompakan berlaku, pengawal itu akan didakwa atas kecuaian tugas yang berat.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam sistem perisian profesional, Logging (Log Sistem) berfungsi seperti kotak hitam (black box) dalam kapal terbang atau sistem CCTV digital.
- Sistem Semak & Imbang yang Betul: Setiap kali berlaku aktiviti sensitif—contohnya seperti pengguna menukar kata laluan, Admin memadam data pelanggan, atau berlaku cubaan log masuk yang gagal sebanyak 50 kali—sistem secara automatik akan menulis satu baris nota rahsia di dalam fail log (di Laravel, biasanya disimpan di folder storage/logs/laravel.log).
- Kesilapan Defendan: Defendan telah mematikan (disabled) fungsi logging ini, atau membiarkan konfigurasinya rosak. Apabila berlaku insiden kebocoran data (data breach) yang melibatkan pemindahan data peribadi berskala besar, sistem langsung tidak menyimpan sebarang bukti digital.
Analogi Dunia Sebenar: Kedai Emas Tanpa Kamera CCTV
Bayangkan kau memiliki sebuah kedai emas yang besar. Di dalam kedai tersebut, setiap hari berlaku urusan jual beli emas bernilai ratusan ribu ringgit, dan ada sebuah bilik kebal yang menyimpan barangan berharga.
- Cara yang betul (Selamat): Kau memasang sistem CCTV 24 jam di setiap sudut kedai. Setiap kali ada pekerja membuka peti besi, ada log atau buku rekod yang mencatat: Siapa yang buka, pukul berapa, dan apa barang yang diambil.
- Apa yang Defendan buat (Lalai): Pembangun tersebut sengaja menutup suis kamera CCTV tersebut atau langsung tidak memasang kad memori untuk merakam. Buku log di kaunter pula dibuang ke dalam tong sampah. Alasan dia: "Sebab nak jimat elektrik dan jimat ruang simpanan (storage)."
Satu hari, kedai emas itu pecah rumah dan separuh daripada barangan kemas hilang. Apabila pihak polis (PDRM) datang untuk membuat siasatan, mereka bertanya, "Bagi kami rakaman CCTV atau buku log pekerja." Pemilik kedai terpaksa menjawab, "Kami tak ada rakaman sebab sistem CCTV sengaja dimatikan." Pihak polis tidak dapat menangkap pencuri, dan syarikat insurans pula enggan membayar ganti rugi kerana premis itu gagal mematuhi standard keselamatan asas.
Point 6 - Lack of Testing & Vulnerability Scanning
Di mahkamah, peguam defendan mungkin akan berhujah, "Sistem terlepas pandang lubang keselamatan itu perkara biasa, tiada sistem yang 100% selamat di dunia ini." Saksi pakar akan mematahkan hujah tersebut bukan disebabkan wujudnya pepijat (bug), tetapi disebabkan ketiadaan proses (absence of process):
- Gagal Memenuhi Standard Penjagaan (Standard of Care): Dalam kes saman kecuaian (negligence), mahkamah akan melihat sama ada defendan telah melakukan tugasnya mengikut standard industri yang munasabah. Melancarkan sistem berskala besar tanpa dokumentasi ujian membuktikan defendan telah mengabaikan langkah keselamatan yang paling asas.
- Bukti Ketidakkompetenan: Ketiadaan fail ujian (test suites) menunjukkan pembangun tidak mempunyai kepakaran atau disiplin kejuruteraan untuk menguruskan projek kritikal, sebaliknya hanya bergantung kepada "vibe" bahawa sistem itu akan berjalan lancar dengan sendiri.
Dalam istilah undang-undang, tindakan ini dipanggil gross negligence (kecuaian melampau). Ia sama seperti seorang doktor bedah yang melakukan pembedahan besar ke atas pesakit tanpa membuat sebarang ujian darah atau semakan rekod kesihatan pesakit terlebih dahulu.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam dunia kejuruteraan perisian profesional, sebelum sesuatu sistem dilepaskan untuk kegunaan orang ramai (go-live / production), ia wajib melalui fasa Pematuhan Kualiti (Quality Assurance - QA):
- Unit Testing: Kod komputer khas yang ditulis untuk menguji setiap fungsi kecil sistem secara automatik (contohnya: memastikan borang pembayaran hanya menerima nombor positif, bukan nombor negatif).
- Integration Testing: Ujian untuk memastikan semua modul sistem (seperti modul log masuk, modul pembayaran, dan pangkalan data) boleh "bercakap" antara satu sama lain dengan harmoni tanpa ralat.
- Automated Vulnerability Scanning: Menggunakan perisian khas (seperti SonarQube, Snyk, atau OWASP ZAP) untuk mengimbas kod sumber bagi mencari lubang keselamatan (seperti SQL Injection dan Path Traversal dalam Poin 1 & 2) sebelum aplikasi dilancarkan.
Berdasarkan hantaran forensik dekat thread tu, defendan langsung tidak mempunyai sebarang log, rekod, atau dokumentasi yang membuktikan sistem itu pernah melalui mana-mana proses ujian di atas. Dia membina sistem, dan terus melancarkannya untuk kegunaan hidup (live).
Analogi Dunia Sebenar: Menyerahkan Kereta Baharu Tanpa Ujian Brek
Bayangkan sebuah syarikat pengeluar kereta (kilang automotif) baru sahaja siap memasang sebuah model kereta utiliti (SUV) yang besar untuk pasaran korporat.
- Cara yang betul (Selamat / Standard): Sebelum kereta itu dikeluarkan dari kilang dan dijual kepada pemandu, pihak jurutera wajib melakukan pelbagai ujian keselamatan yang ketat. Mereka akan buat Crash Test, pandu di litar ujian untuk uji sistem brek, uji beg udara (airbag), dan buat imbasan komputer untuk pastikan tiada sebarang skru yang longgar. Semua keputusan ujian ini dicatat dalam sijil kelulusan kualiti (QC Pass).
- Apa yang Defendan buat (Lalai): Pembangun tersebut memasang bahagian-bahagian kereta (menggunakan bantuan AI untuk pasang enjin dan stereng). Sebaik sahaja kereta itu nampak siap dan enjin boleh hidup, dia terus serahkan kunci kepada klien dan berkata, "Ok, kereta dah siap, boleh bawa masuk lebuh raya sekarang." Dia langsung tidak pernah menguji sama ada brek kereta itu berfungsi dengan baik atau tidak apabila dipandu laju.
Apabila kereta itu dibawa ke lebuh raya, breknya gagal berfungsi lalu berlaku kemalangan ngeri. Pihak berkuasa datang meminta dokumentasi keselamatan kilang, dan pembangun terpaksa mengaku: "Kami tak ada buat sebarang ujian brek atau pemeriksaan keselamatan siber sebab kereta nampak macam dah elok dari luar."
Point 7 - Inclusion of Malicious Third-Party Packages
Di mahkamah, defendan tidak boleh menggunakan alasan, "Saya tak tahu pakej tu ada virus, saya cuma ikut apa yang AI suruh." Saksi pakar akan mematahkan hujah tersebut dan membuktikan kecuaian atas faktor berikut:
- Pengabaian Tanggungjawab Semakan (Failure to Vet Dependencies): Memasukkan kod luar ke dalam sistem klien tanpa menyemak reputasi pakej (seperti melihat jumlah muat turun, bintang di GitHub, atau rekod keselamatan pemilik pakej) adalah satu bentuk pengabaian tanggungjawab kerja yang amat besar.
- Kebergantungan Buta Terhadap Alat Bantuan: AI hanyalah alat bantuan (tool), bukannya pakar keselamatan. Meletakkan kepercayaan mutlak kepada output AI untuk sistem produksi korporat tanpa pengesahan manusia (human-in-the-loop) membuktikan bahawa pembangun tersebut tidak mempunyai kompetensi yang cukup untuk mengendalikan projek berskala besar.
Dalam istilah mudah, tindakan defendan ini adalah sama seperti seorang mekanik kapal terbang yang memasang skru tiruan yang dijumpainya di tepi jalan pada enjin pesawat, hanya kerana aplikasi telefon pintarnya kata "Skru ini nampak macam boleh muat". Mekanik itu tetap akan dipersalahkan sepenuhnya sekiranya kapal terbang itu terhempas.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam pembangunan perisian moden (seperti PHP/Laravel atau JavaScript/Node.js), pembangun tidak menulis semua kod dari kosong. Mereka menggunakan "pakej pihak ketiga" (third-party packages / libraries) untuk fungsi tertentu (contohnya pakej untuk menghasilkan fail PDF, atau pakej untuk menghantar e-mel). Senarai pakej ini diuruskan di dalam fail bernama composer.json atau package.json.
- Fenomena Halusinasi AI (AI Hallucination): Apabila seorang vibe coder buntu dan meminta AI menyelesaikan masalah kod yang kompleks, AI kadangkala akan "berhalusinasi" dengan mereka-reka nama pakej yang sebenarnya tidak wujud di pasaran, atau tersalah sebut nama pakej yang hampir serupa dengan pakej rasmi.
- Serangan Siber Jenis Typosquatting / Malicious Packages: Penggodam di luar sana memantau halusinasi AI ini. Mereka sengaja mencipta pakej-pakej berniat jahat dengan nama yang pelik atau hampir sama dengan kesilapan ejaan manusia, lalu memuat naik pakej tersebut ke lubuk simpanan kod terbuka (open-source registry seperti npm atau Packagist).
- Kesilapan Defendan: Defendan telah menyalin bulat-bulat cadangan pakej daripada AI (LLM) tersebut dan memasukkannya ke dalam fail composer.json / package.json tanpa membuat semakan latar belakang (dependency vetting). Akibatnya, dia telah memasang pakej yang mengandungi pintu belakang (backdoor). Penggodam luar kini boleh menghantar arahan terus ke server klien untuk mencuri data atau memadam sistem pada bila-bila masa.
Analogi Dunia Sebenar: Kontraktor Rumah yang Membeli Bahan Binaan daripada Orang Asing
Bayangkan kau mengupah seorang kontraktor untuk membina sebuah sistem keselamatan atau pintu pagar automatik di rumah kau.
- Cara yang betul (Selamat / Professional): Kontraktor yang bertauliah akan membeli barangan, mangga kunci, dan litar elektronik daripada jenama yang terkenal, mempunyai jaminan parlimen, serta dibeli daripada kedai perkakasan (hardware) yang sah dan diiktiraf keselamatan produknya.
- Apa yang Defendan buat (Lalai): Semasa memasang litar pintu pagar, kontraktor tersebut tidak tahu cara mahu menyambung wayar tertentu. Dia pergi bertanya kepada seorang pembantu digital (AI). AI tersebut berkata: "Oh, pergi ke lorong gelap di hujung kampung, ada seorang lelaki asing menjual satu cip khas bernama 'Cip_X'. Ambil cip itu dan pasang pada pintu pagar kamu."
Kontraktor itu pun pergi beli dan pasang tanpa membuat sebarang semakan. Dia tidak tahu bahawa lelaki asing itu sebenarnya adalah seorang pencuri, dan 'Cip_X' itu mengandungi satu fungsi rahsia: Apabila pencuri itu menekan punat alat kawalan jauhnya dari luar rumah, cip tersebut akan membuka pintu pagar rumah kau secara automatik pada waktu malam.
Point 8 - Open-Source License Violation & Copyright Infringement
Di mahkamah, isu ini bukan lagi sekadar isu keselamatan siber, tetapi sudah menjadi kes pelanggaran undang-undang harta intelek (Akta Hak Cipta 1987). Saksi pakar akan membuktikan kesalahan defendan atas sebab:
- Mendedahkan Klien kepada Risiko Saman: Tindakan memadam notis hak cipta dan memasukkan kod diciplak ke dalam sistem korporat milik klien telah mendedahkan syarikat klien tersebut kepada risiko disaman oleh pemilik hak cipta asal kod tersebut. Klien membayar beratus ribu ringgit untuk mendapatkan sistem yang "bersih" dan sah dari segi undang-undang, bukannya kod ciplak yang melanggar lesen.
- Unsur Penipuan Fakta (Plagiarism): Memadam notis hak cipta membuktikan wujudnya niat atau cubaan untuk menyembunyikan asal-usul kod tersebut (plagiat). Ini merosakkan kredibiliti defendan sebagai seorang kontraktor profesional kerana menipu klien tentang status pemilikan harta intelek (Intellectual Property) bagi sistem yang dibina.
Dalam istilah mudah, tindakan defendan ini adalah sama seperti seorang arkitek yang mencuri pelan lantai bangunan milik arkitek lain melalui internet, memadam nama arkitek asal pada pelan tersebut, lalu meletakkan cop namanya sendiri untuk dijual kepada pelanggan. Perbuatan ini adalah satu bentuk pelanggaran hak cipta yang serius dan boleh didakwa di bawah mahkamah jenayah dan sivil.
Apa Sebenarnya yang Berlaku dalam Kod?
Dalam dunia pembangunan perisian, banyak kod sedia ada dikongsikan secara terbuka di internet di bawah lesen GNU General Public License (GPL).
- Sifat Lesen GPL: Lesen ini sangat pemurah tetapi mempunyai syarat undang-undang yang ketat (disebut copyleft). Sesiapa sahaja boleh menggunakan, mengubah, dan memasang kod tersebut dalam projek mereka secara percuma. Namun, syarat utamanya ialah Notis Hak Cipta (Copyright Notice) dan nama pencipta asal tidak boleh dipadamkan daripada fail kod tersebut.
- Kecuaian & Kesalahan Defendan: Defendan menggunakan AI untuk menjana kod tertentu. AI tersebut telah mencedok cebisan kod berlesen GPL daripada pangkalan data latihannya (seperti kod sumber terbuka di GitHub). Apabila kod itu dimasukkan ke dalam sistem klien, defendan telah memadam komen di bahagian atas fail yang mengandungi notis hak cipta asal (Copyright Notice Removal).
Analogi Dunia Sebenar: Meniru Rencana Buku Orang Lain & Padam Nama Penulis Asal
Bayangkan kau diupah oleh sebuah syarikat penerbitan untuk menulis sebuah buku novel atau buku rujukan yang besar.
- Cara yang betul (Selamat / Beretika): Kau tulis buku itu hasil daripada idea kau sendiri. Jika kau ada memetik kata-kata atau bab daripada buku penulis lain, kau wajib letak rujukan (nota kaki) dan nyatakan: "Bab ini diambil daripada Buku X tulisan Penulis Y."
- Apa yang Defendan buat (Lalai & Melanggar Undang-undang):
- Semasa menulis, defendan buntu lalu menyuruh AI generates atau siapkan satu bab yang panjang. AI tersebut pergi "mencedok" atau menyalin satu bahagian kod yang sangat bagus milik seorang pengaturcara lain di internet.
- Kod asal tersebut mempunyai lesesn terbuka (GPL) yang bertulis di bahagian atas fail: "Anda bebas guna kod ini, dengan syarat anda MESTI mengekalkan nama saya sebagai penulis asal."
Defendan nampak nama penulis asal itu di bahagian atas kod (dalam bentuk komen teks). Demi mahu menonjolkan kononnya kod itu adalah hasil titik peluh dia sendiri kepada klien, dia bertindak memadamkan baris teks nama penulis asal tersebut sebelum menyerahkan sistem kepada klien.
4 Bentuk Tindakan Undang-Undang
Berdasarkan hantaran forensik digital tersebut, penulis telah menggariskan beberapa tindakan undang-undang berat yang bakal dihadapi oleh defendan hasil daripada sembang-sembang beliau bersama pihak pendakwaan. Di Malaysia, apabila kecuaian kod (vibe coding tanpa kawalan) menyebabkan kerugian besar dan kebocoran data, kes ini tidak lagi kekal sebagai isu sivil biasa (rebutan kontrak), malah ia beralih menjadi kes jenayah. Berikut adalah garis panduan (outline) dan penjelasan bagi setiap hukuman serta akta yang mungkin dihadapi oleh defendan:
1. Akta Perlindungan Data Peribadi (PDPA) 2010 [Pindaan 2024]
Ini adalah tamparan paling hebat untuk pembangun perisian di bawah undang-undang terbaharu Malaysia.
- Seksyen Terlibat: Seksyen 5(1) dan Seksyen 5(2) (Pelanggaran Prinsip Keselamatan Data).
- Potensi Hukuman: Denda sehingga RM1,000,000 (Satu Juta Ringgit), atau hukuman penjara sehingga 3 tahun, atau kedua-duanya sekali.
- Penjelasan: Sebelum pindaan 2024, jika data pelanggan bocor, syarikat pemilik perniagaan (Data User) sahaja yang disaman. Namun, di bawah pindaan terbaharu, Pembangun Perisian / Pihak Ketiga yang menguruskan server dan kod dikategorikan sebagai Pengendali Data (Data Processor). Disebabkan defendan melakukan kesalahan gred F (seperti hardcode password ke GitHub dan menutup fungsi logging), dia boleh didakwa secara peribadi di bawah mahkamah jenayah atas kegagalan mematuhi standard keselamatan data negara.
2. Akta Hak Cipta 1987
Kesalahan ini berpunca daripada tindakan defendan memadam notis hak cipta kod berlesen GPL yang dicedok melalui AI (Poin 8).
- Seksyen Terlibat: Seksyen 41(1)(i) (Kesalahan berkaitan salinan langgaran dan pengubahsuaian kod tanpa kebenaran / pembuangan notis hak cipta).
- Potensi Hukuman: Denda tidak kurang daripada RM2,000 dan tidak lebih daripada RM20,000 bagi setiap fail kod yang dicipilak, atau hukuman penjara sehingga 5 tahun, atau kedua-duanya sekali.
- Penjelasan: Undang-undang hak cipta melindungi hak pencipta asal kod sumber (source code). Memadam komen notis hak cipta secara sengaja demi menipu klien kononnya itu adalah kod buatan sendiri merupakan satu kesalahan jenayah komersial. Jika pakar forensik menemui 50 fail kod yang dicipilak dan dibuang notisnya, denda tersebut akan digandakan mengikut jumlah fail tersebut.
3. Akta Kontrak 1950 (Tuntutan Sivil / Saman Ganti Rugi)
Ini adalah tindakan saman sivil yang diambil oleh pihak klien (syarikat yang mengupah defendan) untuk menuntut semula kerugian perniagaan mereka.
- Seksyen Terlibat: Seksyen 74 (Ganti rugi akibat pecah kontrak / Breach of Contract).
- Potensi Tuntutan: Membayar Ganti Rugi Am (General Damages) dan Ganti Rugi Khas (Special Damages).
- Penjelasan: Defendan wajib membayar balik segala kos kerugian yang dialami oleh kliennya. Ini termasuk:
- Kos memulangkan semula bayaran kontrak asal.
- Kos melantik syarikat IT baharu yang bertauliah untuk membina semula keseluruhan sistem daripada kosong.
- Kos pemulihan reputasi jenama (brand reputation recovery) klien yang hancur akibat data pelanggan mereka bocor ke tangan penggodam.
4. Kanun Keseksaan (Faktor Penipuan / Fraud)
Ini adalah bahagian yang disifatkan oleh penulis thread sebagai "Paling Teruk" kerana ia melibatkan elemen penipuan niat (malicious intent).
- Seksyen 417 (Seksaan bagi Penipuan):
- Hukuman: Penjara sehingga 5 tahun, atau denda, atau kedua-duanya sekali.
- Penjelasan: Defendan didakwa menipu kerana menyembunyikan fakta bahawa dia sebenarnya tidak mempunyai kompetensi, kelayakan formal, atau kepakaran untuk mengendalikan projek IT berskala besar. Disebabkan penipuan taktik tersebut, klien terpedaya lalu menyerahkan projek bernilai tinggi dan data sensitif syarikat kepadanya.
- Seksyen 419 (Penipuan dengan Jalan Penyamaran):
- Hukuman: Penjara sehingga 7 tahun, atau denda, atau kedua-duanya sekali.
Penjelasan: Jika defendan didapati menyamar sebagai seorang "pakar IT bertauliah" atau menggunakan profil palsu (contohnya mengaku mempunyai kelayakan software engineer profesional sedangkan dia hanyalah vibe coder tangkap muat), dia boleh disabitkan di bawah seksyen penyamaran ini.
Lesson Learn
Banyak sangat info dalam satu rantai bebenang 14 post tu. Tapi okay la, hari ini aku dapat banyak ilmu hasil pembacaan thread tu, terutamanya bila Gemini bagi analogi dunia sebenar untuk mudahkan aku faham. Bagi aku, istilah terbaik untuk kes ni bukanlah pasal isu 'vibe coder' semata-mata, tapi pasal 'professional accountability'—setiap orang perlu responsible atas tindakan yang dia ambil. Bila dah sign contract, dua-dua pihak sepatutnya dari awal lagi dah transparent and faham betul-betul tentang risiko yang both party tengah nak amik. Developer tu pun sepatutnya sedar diri dan jelas dengan capacity dia sebagai developer yang tak ada fundamental knowledge. He should think twice before taking on any project yang obviously beyond his capabilities. Being ambitious tu bagus sebenarnya, tapi being greedy is definitely not.
Tapi apa apa pun, aku harap dia tak adalah sampai kena hukuman penjara. Cuma bagi aku, kes ni memang macam satu 'great lesson' untuk dia and kita semua dalam industri ni. Benda ni bukan terpakai dekat 'vibe coder' yang depend heavily on AI je, tapi 'conventional developer' yang dah lama pun, kalau tak jaga kualiti dan keselamatan kod, bila-bila masa pun boleh hadapi the same issue. Semoga isu ni jadi turning point untuk semua orang buat kerja dengan lebih bertanggungjawab.
Vibe Coder vs Conventional Developer
Aku salah seorang yang kategori vibe coder sebab aku tiada pendidikan formal (diploma/degree) on Information Technology. The main way aku belajar how to code and how to build a system is by using AI Agent, prompting, build and debug along the way. Terlalu ramai conventional developer yang terlalu extreme dalam mengecam vibe coder in doing things the way they do. Ada faction yang menyokong using AI to code, ada faction yang terlalu menolak using AI sebab risaukan pasal data and how stable the system yang coder tu akan buat. For me, we learn along the way. No one in this world, lahir - lahir dah reti coding. Not me, and obviously not you. Everyone does start from ground zero.
The difference on how we learn to code is just, vibe coder uses AI to learn at much faster rate. Build and Learn technique. The conventional developer, go through the standard route. Belajar through formal education, get some cert, diploma or degree. From my readings dekat Threads, Facebook and Twitter, kebanyakan but not all conventional developer very sarcastically condemns vibe coder. Seems like mereka rasa they are better than others. But they literally vibe coder as well though. Aku selalu tak faham kenapa beriya condemn orang lain.
Ada those vibe coders without fundamental yang still berusaha ask the AI why they do the code in certain ways. If ade issue with the code, mereka ask and learn from the information yang mereka dapat from the LLM. Bukan semua main taram je and build to sell. Vibe coding ni bukannya nak replace traditional programming, kita cuma nak speed up the process of building and prototype the application. Whatever mistake is on the individual not the whole community. Please be mindful of your words, as it reflects your thinking behaviour.
For me, the definition of vibe coder is someone yang guna AI to code. Literally just that. No matter la kau ada fundamental ke tidak, as long as you use AI to code, you are a vibe coder. Kalau orang tu vibe code without fundamental, tak salah kau tunjuk the right way to do things without the need to condemn. Ilmu yang kau ada takkan berkurang pun kalau share. Ilmu yang kau ada tu pun tak bawa ke mana-mana juga kalau kau meninggi diri seolah-olah you are the king of the jungle. Hidup ni adalah satu perjalanan untuk belajar. Makin kau belajar, sepatutnya makin kau sedar betapa ceteknya ilmu yang kau ada.
Please be mindful and respectful when sharing your thoughts. Comments cannot be edited or deleted after posting, so take a moment to review before submitting. If you need a correction or removal request, contact support@nurlinasyahiirah.my.
Sign in to join the conversation
Loading comments...