Developer Go Memperdebatkan Risiko Keamanan dalam Parsing JSON, XML, dan YAML Setelah Laporan Kerentanan

Tim Komunitas BigGo
Developer Go Memperdebatkan Risiko Keamanan dalam Parsing JSON, XML, dan YAML Setelah Laporan Kerentanan

Analisis keamanan terbaru yang menyoroti kerentanan dalam parser pustaka standar Go telah memicu perdebatan sengit di antara para developer tentang praktik penanganan data yang tepat dan pilihan desain bahasa. Laporan tersebut menunjukkan bagaimana operasi parsing yang tampak tidak berbahaya dapat menyebabkan kelemahan keamanan yang serius, namun respons komunitas mengungkap ketidaksepakatan yang lebih mendalam tentang di mana letak tanggung jawabnya.

Arsitektur vs Menyalahkan Parser

Diskusi paling panas berpusat pada apakah masalah-masalah ini merepresentasikan masalah parser yang sesungguhnya atau desain aplikasi yang buruk. Banyak developer berpengalaman berargumen bahwa akar masalahnya bukanlah pustaka parsing Go , melainkan kesalahan arsitektur yang fundamental. Kekhawatiran utama melibatkan developer yang menggunakan struktur data yang sama untuk operasi database dan endpoint API, menciptakan peluang untuk eksposur data yang tidak diinginkan.

Apa yang dilakukan IsAdmin dalam create user request DTO sejak awal? Contoh-contohnya tampaknya mengindikasikan penggunaan ulang model data yang tidak tepat.

Kritik arsitektur ini menyoroti anti-pattern umum di mana developer membuat struktur data tunggal yang melayani beberapa tujuan, dari record database hingga respons API. Ketika struktur-struktur ini secara otomatis diserialisasi tanpa kontrol field yang hati-hati, informasi sensitif dapat bocor atau data berbahaya dapat diinjeksi.

Praktik Keamanan yang Direkomendasikan:

Struktur data terpisah - Gunakan tipe yang berbeda untuk permintaan API, model database, dan logika bisnis • Verifikasi Content-Type - Periksa header permintaan secara eksplisit untuk mencegah serangan kebingungan format • Validasi input - Implementasikan lapisan validasi yang tidak bergantung pada perilaku parser untuk keamanan • Pemetaan field eksplisit - Hindari serialisasi otomatis dari semua field struct • Batas kedalaman parsing - Tetapkan pembatasan untuk mencegah serangan denial of service

Diagram ini mendemonstrasikan interaksi antara input pengguna dan pemrosesan backend, menekankan masalah-masalah yang dapat timbul dari penggunaan ulang struktur data yang tidak tepat
Diagram ini mendemonstrasikan interaksi antara input pengguna dan pemrosesan backend, menekankan masalah-masalah yang dapat timbul dari penggunaan ulang struktur data yang tidak tepat

Pilihan Desain Go Mendapat Kritikan

Beberapa keputusan desain Go menarik kritik dari komunitas developer. Pencocokan kunci JSON yang tidak peka huruf besar-kecil dalam bahasa ini menonjol sebagai hal yang sangat kontroversial, dengan developer mencatat bahwa perilaku ini berbeda dari hampir setiap implementasi JSON bahasa pemrograman lainnya. Inkonsistensi ini dapat menciptakan kerentanan keamanan ketika sistem yang menggunakan bahasa berbeda memproses data yang sama secara berbeda.

Penggunaan tag struct berbasis string untuk metadata field juga menghadapi pengawasan ketat. Tidak seperti sistem anotasi yang lebih terstruktur dalam bahasa seperti Java atau Rust , pendekatan Go memerlukan parsing string untuk mengekstrak opsi konfigurasi, yang menyebabkan kesalahan halus ketika developer membuat kesalahan ketik dalam sintaks tag.

Masalah Keamanan Parser Go yang Umum:

Kunci JSON yang tidak sensitif terhadap huruf besar-kecil - Parser JSON Go mencocokkan field struct tanpa memperhatikan huruf besar-kecil, tidak seperti kebanyakan bahasa pemrograman lainnya • Penerimaan sampah di akhir - Parser XML memproses dokumen dengan konten tambahan tanpa menghasilkan error
Serialisasi field otomatis - Semua field struct publik diserialisasi secara default kecuali dikecualikan secara eksplisit • Metadata berbasis string - Tag struct menggunakan parsing string yang dapat menyebabkan kesalahan konfigurasi • Payload polyglot - String data tunggal dapat valid di berbagai format JSON , XML , dan YAML

Gambar ini menunjukkan bagaimana parsing JSON dalam bahasa Go dapat menyebabkan inkonsistensi, menyoroti pilihan desain spesifik yang dikritik dalam komunitas
Gambar ini menunjukkan bagaimana parsing JSON dalam bahasa Go dapat menyebabkan inkonsistensi, menyoroti pilihan desain spesifik yang dikritik dalam komunitas

Masalah Polyglot Payload

Salah satu penemuan paling mengejutkan melibatkan data yang dapat secara bersamaan diparsing sebagai JSON , XML , dan YAML yang valid. Ini menciptakan peluang bagi penyerang untuk membuat payload yang berperilaku berbeda tergantung pada parser mana yang memprosesnya. Masalah ini menjadi sangat berbahaya ketika layanan berbeda dalam sistem menggunakan pustaka parsing yang berbeda, berpotensi memungkinkan data berbahaya melewati pemeriksaan keamanan.

Solusi Komunitas dan Praktik Terbaik

Meskipun ada perdebatan sengit tentang siapa yang harus disalahkan, komunitas telah bersatu dalam beberapa solusi praktis. Pendekatan yang paling banyak didukung melibatkan pembuatan struktur data terpisah untuk lapisan aplikasi yang berbeda - tipe yang berbeda untuk permintaan API , operasi database, dan logika bisnis internal. Meskipun ini memerlukan lebih banyak kode, ini memberikan batasan yang jelas dan mencegah eksposur data yang tidak disengaja.

Banyak developer juga mengadvokasi langkah validasi eksplisit daripada mengandalkan parser untuk keamanan. Filosofi parse, don't validate ini menyarankan bahwa aplikasi harus segera mengkonversi data yang diparsing ke dalam representasi internal yang strongly-typed, membuang field apa pun yang tidak secara eksplisit diharapkan.

Diskusi ini mengungkap ketegangan fundamental dalam pengembangan perangkat lunak modern antara kenyamanan dan keamanan. Filosofi desain Go menekankan kesederhanaan dan kemudahan penggunaan, tetapi ini terkadang dapat bertentangan dengan praktik terbaik keamanan. Seperti yang dicatat oleh seorang developer, kenyamanan serialisasi otomatis secara fundamental bertentangan dengan keamanan karena mendorong developer untuk mengambil jalan pintas yang dapat memiliki konsekuensi serius.

Sementara laporan keamanan asli berfokus pada perilaku parser tertentu, respons komunitas menunjukkan bahwa solusi sebenarnya terletak pada arsitektur perangkat lunak yang lebih baik dan praktik pengembangan yang lebih disiplin, terlepas dari bahasa pemrograman atau pustaka parsing mana yang digunakan.

Referensi: Unexpected security footguns in Go's parsers

Perbandingan bagaimana format serialisasi data yang berbeda menangani kunci yang tidak dikenal menyoroti pentingnya merancang untuk keamanan dalam parsing data
Perbandingan bagaimana format serialisasi data yang berbeda menangani kunci yang tidak dikenal menyoroti pentingnya merancang untuk keamanan dalam parsing data