Tentang satu kerentanan yang tidak

gambar
Pada akhir Maret 2019, perusahaan cybersecurity Amerika dan layanan perlindungan ancaman Trustwave menerbitkan pesan tentang kerentanan dalam DBMS PostgreSQL, yang hadir di semua versi mulai dari PostgreSQL 9.3 hingga versi 11.2. Kerentanan ini terdaftar dalam database kerentanan keamanan informasi CVE (Common Vulnerabilities and Exposures) dengan nomor CVE-2019-9193 . Pesan ini menimbulkan kegemparan besar, karena menurut sistem penilaian kerentanan CVSS (Common Vulnerability Scoring System), kerentanan ini diberi peringkat 9.0 pada skala 10 poin.


Kerentanan diberikan karakteristik berikut:


  • Dampak Kerahasiaan (pengaruhnya terhadap kerahasiaan) - pengungkapan informasi secara penuh, mengarah pada pengungkapan semua file sistem.
  • Dampak Integritas (dampak terhadap integritas) - hilangnya perlindungan sistem sepenuhnya, sebagai akibatnya, seluruh sistem menjadi terganggu.
  • Dampak Ketersediaan - ketersediaan sumber daya sama sekali tidak tersedia.
  • Kompleksitas Akses rendah. Penggunaan membutuhkan sedikit pengetahuan atau keterampilan.
  • Otentikasi - memerlukan penyerang untuk masuk ke sistem, misalnya, melalui baris perintah atau melalui sesi desktop atau antarmuka web.
  • Mendapatkan Akses - no.
  • Jenis Kerentanan (jenis kerentanan) - eksekusi kode.

Sekarang mari kita mencari tahu apa yang sebenarnya terjadi.


Pada 2013, kembali ke PostgreSQL 9.3, komit ditambahkan, yang, dengan analogi dengan perintah \ copy meta di psql, memungkinkan Anda untuk memindahkan data antara tabel PostgreSQL dan file biasa dalam sistem file. SALIN UNTUK menyalin isi tabel ke file, dan SALIN DARI - dari file ke tabel (menambahkan data ke yang sudah ada dalam tabel). Berbeda dengan \ copy meta-command, yang diimplementasikan pada klien, perintah COPY..TO / FROM diimplementasikan di sisi server. Perintah COPY memiliki 'perintah' parameter PROGRAM opsional, yang memungkinkan server untuk mengeksekusi 'perintah' dan meneruskan output standar ke server PostgreSQL atau sebaliknya. Parameter inilah yang menyebabkan kepanikan dan pesan tentang kerentanan, karena menurut Trustwave, perintah ini memungkinkan Anda untuk mengeksekusi kode arbitrer dalam konteks pengguna sistem operasi. Namun, inilah yang dimaksudkan pengembang! Pada kesempatan ini, ada posting resmi oleh Global Development Group (PGDG) PostgreSQL, serta korespondensi dalam daftar email umum pgsql (CVE-2019-9193 tentang COPY FROM / TO PROGRAM ) dan komentar oleh pengembang terkemuka, misalnya Magnus Hagander, di blog - nya .


Tetapi untuk memahami esensinya, detailnya penting. Inilah yang tertulis dalam dokumentasi tentang ini: β€œ Perhatikan bahwa perintah diluncurkan melalui shell perintah, jadi jika Anda ingin meneruskan argumen ke perintah ini dari sumber yang tidak dipercaya, Anda harus dengan hati-hati menyingkirkan semua karakter khusus yang memiliki arti khusus dalam shell, atau untuk menyaringnya. Demi alasan keamanan, lebih baik membatasi diri Anda ke jalur perintah tetap atau setidaknya tidak mengizinkan pengguna untuk memasukkan konten sewenang-wenang ke dalamnya . "


Selain itu, dokumentasi mengatakan bahwa hanya pengguna super basis data yang diizinkan untuk menjalankan perintah COPY dengan file atau perintah eksternal, atau (dalam versi 11 muncul) anggota peran bawaan pg_read_server_files, pg_write_server_files atau pg_execute_server_program, karena ini memungkinkan Anda untuk membaca / menulis file dan menjalankan sembarang program program yang dapat diakses server. Eksekusi perintah dalam PROGRAM dapat dibatasi oleh mekanisme kontrol akses lain yang beroperasi di OS, misalnya SELinux.


Secara struktural, tidak ada batas keamanan antara superuser basis data dan pengguna sistem operasi atas nama siapa proses server dari server berjalan. Fungsi untuk COPY ... PROGRAM ditambahkan dalam PostgreSQL 9.3 tidak mengubah apa pun di atas, tetapi menambahkan perintah baru dalam batas-batas keamanan yang sama yang sudah ada. Oleh karena itu, server PostgreSQL tidak dapat berjalan sebagai superuser dari sistem operasi (misalnya, root).


COPY..TO / FROM ... fungsionalitas PROGRAM itu sendiri menyediakan kemungkinan tak terbatas untuk manipulasi data, pemrosesan pasca-data, kompresi data sambil jalan dan sebagainya. Dan untuk melarang penggunaan alat yang bermanfaat seperti itu akan salah. Contoh penerapan COPY..TO / FROM ... PROGRAM construct diberikan di blog Michael Paquier.


Kesimpulan penting yang mengikuti dari cerita ini adalah bahwa ketika merancang dan membuat database, perlu untuk mengingat tidak hanya karakteristik fungsional, tetapi juga keamanan informasi dan mengikuti aturan berikut:


  • Saat membuat pengguna biasa dalam basis data, jangan beri mereka izin pengguna super, hanya pengguna sistem operasi postgres atas nama server diluncurkan, bertindak dalam database sebagai pengguna super. Dalam hal ini, tidak ada peningkatan hak istimewa. Jika Anda memberikan izin pengguna super ke pengguna basis data biasa, itu akan sama dengan mengeluarkan izin kepada pengguna yang dimiliki pengguna postgres dalam sistem operasi.
  • Gunakan kapabilitas pg_hba.conf untuk memastikan bahwa tidak ada pengguna super yang dapat login dari jarak jauh.
    Jika tidak ada baris sebelumnya dengan "host" di file pg_hba.conf, entri berikut ini melarang pengguna postgres untuk terhubung ke basis data apa pun dari alamat mana pun menggunakan protokol tcp / ip.

    # TYPE DATABASE USER ADDRESS METHOD host all postgres 0.0.0.0/0 reject 
  • Gunakan teknik keamanan informasi tingkat lanjut di PostgresSQL, seperti Tolok Ukur PostgreSQL CIS dan Panduan Implementasi Teknis Keamanan PostgreSQL (STIG) .
  • Gunakan produk bersertifikat yang kepatuhannya dengan persyaratan fungsional untuk perlindungan informasi dan tingkat kepercayaan terhadap alat keamanan informasi telah dikonfirmasi.

Dengan demikian, kami menemukan bahwa CVE-2019-9193 bukan kerentanan. Tetapi Anda tidak harus santai. Jangan ketinggalan informasi tentang pembaruan dan rilis minor baru yang mengoreksi kerentanan yang teridentifikasi , yang tanpanya tidak satu pun proyek besar dapat melakukannya.

Source: https://habr.com/ru/post/id448750/


All Articles