Kerentanan Unggah File Aplikasi Web

Dalam artikel ini, kita akan mempelajari satu lagi vektor serangan secara mendetail yang sangat penting untuk dipelajari di dunia yang penuh dengan Web dan Aplikasi Seluler ini.

Kerentanan Unggah File:

Di hampir setiap aplikasi web ada fungsi untuk mengunggah file. File ini mungkin dalam bentuk teks, video, gambar, dll. Namun banyak aplikasi web dosis tidak memiliki pemeriksaan keamanan yang tepat saat mengunggah file dan ini menghasilkan kerentanan yang disebut Kerentanan Unggah File. Kerentanan sederhana ini mengarah ke skrip sisi server, eksekusi kode arbitrer, skrip lintas situs, serangan CSRF.

Meskipun beberapa aplikasi memiliki pemeriksaan yang tepat untuk mengunggah file tetapi pemeriksaan keamanan ini masih memiliki metode bypass untuk mengeksploitasi kerentanan ini, bypass ini adalah sebagai berikut –

1. Pemintas ekstensi peka huruf besar-kecil: Pengembang aplikasi Web/Mobile dapat menambahkan daftar hitam ekstensi tertentu yang berbahaya menurut pengembang. Tetapi terkadang pengembang lupa apakah pemeriksaan keamanan ekstensi mereka peka huruf besar-kecil atau tidak dan siapa pun dapat melewati pemeriksaan keamanan dengan menjadikan ekstensi file sebagai kombinasi karakter huruf kecil dan huruf besar untuk melewati pemeriksaan keamanan. Sebagai pengembang, praktik yang baik untuk memeriksa verifikasi ekstensi selalu mempertimbangkan sensitivitas kasus ekstensi file. Contoh: .PDf, .XmL, .Sh, php.

2. Bypass verifikasi konten gambar: Sebagai pengembang masalah keamanan selalu memeriksa konten gambar agar sesuai dengan salah satu jenis file yang valid. Di PHP mungkin ada fungsi untuk memvalidasi file, salah satunya adalah getimagesize() fungsi ini pada dasarnya membaca file dan mengembalikan ukuran jika file tidak valid mengembalikan pesan kesalahan. Ada teknik yang dapat melewati perlindungan ini. Pertimbangkan kode berikut yang mengunggah file.

PHP

<?php

 

if(isset($_FILES['image'])) {

    $filename = $_FILES['image']['name'];

 

    $tmp = $_FILES['image']['tmp_name'];

 

    if(!getimagesize($_FILES['image']['tmp_name'])) {

        echo "Invalid Image File";

        exit(0);

    }

 

    move_uploaded_file($tmp,"images/".$filename);

 

    echo "SUCCESS";

    exit(0);

}

 

?>

Penyerang dapat melewati pemeriksaan tersebut dengan menyematkan kode PHP di dalam bagian komentar file JPG dan setelah itu mengunggah file dengan ekstensi .php ini dapat dengan mudah melewati pemeriksaan yang disebutkan dalam kode di atas. Ada lebih banyak teknik yang juga tersedia untuk bypass verifikasi File karena pengembang selalu menangani semua bypass ini selama mengimplementasikan fitur unggah file.

Pixel Flood Menggunakan File Gambar Berbahaya:

Ini adalah sub serangan di bawah File Upload Vulnerability, serangan ini terutama mengeksploitasi metode penguraian gambar. Selama melakukan serangan ini, pengguna jahat mengambil file JPG atau JPEG yang valid dengan dimensi asli kemudian penyerang mengubah dimensi gambar menjadi skala yang sangat besar seperti 1000000 × 1000000 dengan menggunakan beberapa alat otomatis dengan mengunggah pengurai gambar file besar tersebut mengalokasikan memori yang sangat besar untuk itu dan mengakibatkan server crash atau kehabisan memori.

Bidang zTXT berbahaya dari file PNG:

Format file PNG berisi bagian, yang disebut zTXT, yang memungkinkan data terkompresi zlib ditambahkan ke file PNG. Teknik di sini adalah bahwa sejumlah besar data berulang, seperti serangkaian nol, dibuat, dengan bobot lebih dari 70MB dan kemudian dikompresi melalui zlib, menghasilkan data terkompresi beberapa KB. Ini kemudian ditambahkan ke bagian zTXT dari file PNG biasa. Mengirim permintaan berulang semacam ini menyebabkan kelelahan memori yang serupa seperti yang telah kita lihat dalam dua contoh sebelumnya. Masalah ini juga memengaruhi permata Paperclip.

File GIF berbahaya – banjir bingkai:

Teknik ini mirip dengan teknik sebelumnya, GIF berbahaya digunakan untuk mengalokasikan sejumlah besar memori, akhirnya menggunakan sejumlah besar memori server. File GIF berisi sekumpulan animasi dalam bentuk berbagai bingkai gambar. Alih-alih membalik piksel, kami menambahkan jumlah bingkai GIF yang sangat besar, katakanlah 45.000-90.000. Saat mem-parsing setiap frame, memori dialokasikan dan akhirnya mencekik server.

Cara Menghindari Kerentanan Unggahan File:

  • Selalu periksa ekstensi file dengan sensitivitas huruf besar-kecilnya.
  • Filter konten file sebelum diunggah ke server.
  • Jangan berikan izin yang dapat dieksekusi untuk file yang diunggah.
  • Selalu simpan file yang diunggah di direktori non publik.