Teknologi

Enam tahun program GitHub Security Bug Bounty

Oleh Brian Anglin, Insinyur Keamanan Aplikasi di GitHub

Bulan lalu GitHub mencapai beberapa tonggak besar untuk program Security Bug Bounty kami. Pada Februari 2020, sudah enam tahun sejak kami mulai menerima kiriman. Selama bertahun-tahun kami dapat berinvestasi dalam komunitas bug bounty melalui acara langsung, bug bounty pribadi, pratinjau fitur, dan tentu saja melalui cash bounty.

Kami sangat senang mengumumkan bahwa kami baru-baru ini memberikan total pembayaran US $ 1,000,000 kepada para peneliti sejak kami memindahkan program kami ke HackerOne pada tahun 2016. Kami membayar lebih dari setengah dari total penghargaan kami pada tahun lalu saja, mencapai hampir US$590.000 dalam total hadiah hadiah di seluruh program kami. Kami juga dapat memberikan waktu respons cepat untuk jumlah pengiriman yang semakin besar — mempertahankan waktu respons rata-rata 17 jam. Ini semua sambil melihat peningkatan 40 persen dalam pengiriman sejak tahun lalu. Kami berbagi beberapa sorotan dari tahun lalu bersama dengan rencana mendatang kami untuk masa depan.

Sorotan 2019

Bug keren

Salah satu bagian favorit saya dalam mengerjakan program bug bounty adalah melihat kiriman luar biasa yang kami dapatkan dari komunitas. Banyak kiriman terbaik menunjukkan pemahaman tentang GitHub dan teknologi kami yang menyaingi tim teknik kami sendiri. Kami telah menawarkan hadiah yang sangat kompetitif sehingga kami dapat menarik individu-individu berbakat tersebut dan memberi mereka insentif untuk menghabiskan waktu menggali jauh ke dalam basis kode kami. Komunitas pada tahun 2019 tidak mengecewakan.

Bypass alur OAuth menggunakan permintaan HEAD lintas situs

@not-an-Ardvark memiliki banyak kiriman bagus untuk program kami, tetapi ini sangat berdampak. Dia menulis posting yang bagus tentang hal itu secara rinci yang akan saya rekap dengan cepat.

GitHub menyediakan beberapa cara bagi integrator untuk berinteraksi dengan ekosistem kami. Salah satu cara integrator dapat menggunakan GitHub adalah melalui aplikasi OAuth yang memungkinkan aplikasi untuk mengambil tindakan atas nama pengguna GitHub. Sebelum mengizinkan akses ke data pengguna, aplikasi OAuth harus mengalihkan pengguna ke GitHub.com, memungkinkan mereka meninjau izin yang diminta dan mengotorisasi aplikasi secara eksplisit. @not-an-ardvark menemukan cara untuk melewati kontrol kami untuk mengotorisasi aplikasi OAuth tanpa interaksi pengguna. Mari kita masuk ke bagaimana ini terjadi.

Saat kami memproses permintaan perubahan status pada GitHub.com, seperti mengotorisasi aplikasi OAuth, kami mengandalkan perlindungan Cross Site Request Forgery (CSRF) Ruby on Rails. Kami menyuntikkan token khusus ke dalam DOM dari setiap elemen formulir yang kami validasi saat menerima permintaan POST. Alur otorisasi aplikasi OAuth menggunakan permintaan POST yang memerlukan token CSRF yang valid. Namun, pengontrol OAuth salah mengizinkan permintaan POST dan HEAD untuk memicu logika otorisasi. Kami melewatkan validasi CSRF saat memproses permintaan HEAD karena biasanya tidak mengubah status. Hal ini memungkinkan situs berbahaya untuk secara otomatis mengotorisasi aplikasi OAuth tanpa interaksi pengguna.

Karena tingkat keparahan kerentanan, kami perlu menambalnya secepat mungkin. Kami bekerja sama dengan tim teknik dan mengirimkan perbaikan ke pengguna GitHub dalam waktu tiga jam setelah menerima kiriman. Kami juga melakukan penyelidikan penuh dengan insinyur SIRT dan memastikan bahwa kerentanan ini tidak dieksploitasi di alam liar. Selain itu, kami meluncurkan patch untuk GitHub Enterprise Server untuk semua versi yang didukung. Kami menghadiahi @not-an-aardvark dengan US $ 25.000 untuk tingkat keparahan kerentanan dan penulisan terperinci mereka dalam pengiriman mereka.

Bug ini menunjukkan peran penting yang dimainkan peneliti dalam keamanan kami secara keseluruhan. Dengan mengidentifikasi masalah ini melalui program bug bounty kami, kami dapat melindungi pengguna kami dengan menambal masalah dan memvalidasi bahwa itu sebelumnya tidak dieksploitasi.

GitHub.com eksekusi kode jarak jauh melalui injeksi perintah

@ajxchapman mencapai eksekusi kode jarak jauh di GitHub.com dengan memicu injeksi perintah di fitur impor Mercurial kami. Logika impor tidak membersihkan nama cabang dengan benar yang memungkinkan nama cabang perusak berbahaya untuk mengeksekusi kode di server kami. Karena fitur impor cukup rumit, kami secara tradisional menjalankan kode impor di kotak pasir pada server khusus yang terisolasi dari jaringan produksi kami. Isolasi ini membatasi dampak kerentanan, dan kami dapat dengan cepat merilis perbaikan untuk GitHub.com dan backporting perbaikan untuk pelanggan GitHub Enterprise Server. Kami juga mengaudit logika impor untuk masalah serupa dan mengonfirmasi dari sistem penebangan kami bahwa ini tidak dieksploitasi di alam liar.

Apa yang membuat bug ini sangat menarik adalah akar penyebabnya: itu pada akhirnya disebabkan oleh ketergantungan yang sudah ketinggalan zaman. Bug ada dalam dependensi yang menangani impor kode dan sebelumnya diperbaiki di hulu. Namun, kami gagal mengikuti versi terbaru dan pada akhirnya rentan terhadap masalah ini. Masalah ini menyoroti betapa pentingnya manajemen ketergantungan terhadap keberhasilan keseluruhan program keamanan. GitHub terus berinvestasi dalam alat manajemen ketergantungan untuk menjaga keamanan kami dan pelanggan kami. Temukan lebih banyak karya Alex di blog pribadinya.

Cakupan yang diperluas

GitHub merilis banyak fitur baru pada tahun 2019 yang ditambahkan ke cakupan Security Bug Bounty kami:

  • Pengingat tarik menambahkan fungsionalitas untuk membantu teknisi tetap mendapat informasi tentang permintaan tarik baru yang perlu diperhatikan. Kami menyertakan solusi ke dalam aplikasi inti kami dan integrasi Slack yang ada.
  • Pembaruan keamanan otomatis (sebelumnya Dependabot) menambahkan cara yang lebih baik untuk melacak kerentanan dalam dependensi karena secara otomatis membuka permintaan tarik baru yang memperbarui versi dependensi ketika menemukan perbaikan keamanan baru.
  • GitHub untuk seluler adalah kehadiran pertama GitHub di App Store. Ini membawa persyaratan baru API kami dan masalah keamanan baru dalam aplikasi kami. Kami memberikan keamanan dan fungsionalitas yang sama dengan yang tersedia di GitHub.com.
  • GitHub Actions adalah salah satu rilis terbesar GitHub sejak pull request dan seluruh kelas kasus sudut keamanan baru. Melalui kolaborasi erat dengan mitra teknik kami, kami telah memberi pengguna kemampuan untuk menjalankan kode mereka langsung di GitHub.com.
  • Alat LGTM Semmle adalah tambahan yang signifikan untuk rangkaian alat keamanan kami, seperti Dependabot dan Maintainer Security Advisories. LGTM memungkinkan pengguna kami untuk memindai potensi masalah keamanan dalam kode mereka pada setiap pull request.

Kami telah memiliki beberapa kiriman berharga yang memengaruhi pengembangan produk ini secara signifikan. Kami membayar lebih dari US$20.000 dalam bentuk bounty untuk kerentanan yang memengaruhi produk dalam cakupan yang diperluas ini, dan kami sangat senang untuk terus memperluas cakupan Bug Bounty kami seiring pertumbuhan GitHub.

H1-702

Pada Agustus 2019, kami kembali ke Las Vegas untuk berpartisipasi dalam acara H1-702 kedua kami. Acara ini mengundang peretas top dari platform HackerOne untuk bergabung dengan kami bersama dengan dua perusahaan lain selama tiga malam peretasan langsung. Kami sangat antusias untuk berpartisipasi dan ingin memberi para peneliti setiap insentif untuk menggali lebih dalam aplikasi kami. Kami bahkan menambahkan banyak bonus di atas pembayaran dasar kami, termasuk bonus untuk Bukti Konsep Terbaik, Rantai Eksploitasi Terpanjang, dan RCE. Kami juga menyiapkan CTF pada GitHub.com untuk mengarahkan peneliti ke beberapa permukaan serangan terbaru kami. Terakhir, kami menyembunyikan flag di Maintainer Security Advisory dan GitHub Package Registry dengan bonus untuk setiap flag. Kami menerima umpan balik positif dari beberapa peneliti kami tentang KKP kami dan akan terus menyertakan komponen KKP dalam acara mendatang.

Secara keseluruhan, kami membayar lebih dari US $ 155.000 kepada para peneliti dalam satu malam, dengan setengah dari hadiah tersebut untuk masalah keparahan tinggi atau kritis. Kami tidak dapat mengungkapkan betapa pentingnya peristiwa peretasan langsung, seperti H1-702, bagi program bug bounty kami. Kami menantikan lebih banyak acara peretasan langsung di masa depan dan cara-cara baru dan inovatif lainnya untuk melibatkan komunitas.

Hadiah bug pribadi

Di luar cakupan luas program publik kami, kami melakukan program khusus undangan di mana kami melihat pratinjau fitur kepada peneliti sebelum diluncurkan ke semua orang. Program pribadi ini memungkinkan kami untuk bekerja sama dengan kelompok kecil, dan memberi kami kesempatan untuk menemukan bug sebelum mereka dapat mempengaruhi sebagian besar pengguna kami. Kami telah membayar lebih dari US$37.000 melalui program pribadi kami tahun ini, dan banyak dari temuan ini diperbaiki sebelum fitur baru mencapai sejumlah besar pelanggan kami.

Tindakan CI/CD

Menyusul keberhasilan bounty bug pribadi pertama kami yang menargetkan GitHub Actions, kami ingin menjalankan kembali program privat untuk menargetkan iterasi terbaru dari produk GitHub Actions kami. Kami menggunakan apa yang kami pelajari di bug bounty pertama kami untuk mengamankan produk dari masalah serupa. Komunitas menerima tantangan tersebut dan menemukan bug baru dalam iterasi kedua kami.

Pembaruan keamanan otomatis (sebelumnya Dependabot)

Sama seperti kombinasi dari dua sistem yang kompleks, akuisisi Dependabot menghadirkan tantangan unik bagi tim keamanan kami dalam mengintegrasikan dua arsitektur terpisah ini. Kami menggunakan hadiah bug pribadi untuk melengkapi tinjauan keamanan kami sendiri atas layanan baru ini. Temuan dari program bug bounty pribadi sangat menginformasikan bagaimana kami mengintegrasikan Dependabot dengan GitHub.com. Kami juga dapat memunculkan beberapa masalah sebelum meluncurkannya.

Menarik pengingat

Seperti Dependabot, pengingat tarik membutuhkan perhatian dan perhatian yang sama untuk memastikan transisi yang aman dari integrasi ke produk GitHub pihak pertama. Pengingat tarik juga menambahkan lebih banyak kompleksitas melalui koneksinya ke Slack. Integrasi Slack kami sendiri memberikan fondasi untuk fitur ini, tetapi ada arsitektur ulang dan pengembangan yang signifikan untuk mengikat kedua fitur ini bersama-sama. Sekali lagi, kami beralih ke komunitas bug bounty kami untuk menguji integrasi pengingat tarik kami sebelum merilis fitur secara luas.

Inisiatif 2020

Kami memiliki banyak rencana untuk tahun 2020 dan ingin menyoroti beberapa perubahan kami yang akan datang.

Program bounty Lab Keamanan

Kami meluncurkan program bounty GitHub Security Lab untuk memberi insentif kepada peneliti agar membantu kami mengamankan semua perangkat lunak sumber terbuka. Program baru ini memberi penghargaan kepada anggota komunitas yang menulis kueri CodeQL yang mendeteksi seluruh kelas kerentanan sehingga komunitas lainnya dapat menjalankan kueri tersebut terhadap proyek mereka sendiri. Ini menghasilkan penghapusan kerentanan dalam skala besar.

Memberikan kontribusi pada program ini tidak hanya memengaruhi keadaan keamanan perangkat lunak global, tetapi juga mencegah kerentanan serupa dirilis di masa mendatang. Ini adalah twist yang menarik pada program bug bounty tradisional kami, dan kami senang melihat para peneliti menggunakan alat CodeQL baru kami. Hingga saat ini, kami menerima 20 pengajuan dan memberikan hampir US$21.000, dengan ratusan kerentanan diperbaiki di seluruh ekosistem OSS sebagai akibat langsung.

CVE dan pengungkapan

Tahun ini, kami menetapkan CVE untuk pengiriman bounty yang memengaruhi GitHub Enterprise Server. Ini adalah langkah maju yang besar dalam mengkomunikasikan keadaan perangkat lunak kami secara konsisten kepada pelanggan kami, tetapi juga memberikan penghargaan lain bagi para peneliti kami yang mengidentifikasi kerentanan di GitHub Enterprise Server.

Terlibat

Apakah Anda senang dengan tambahan baru untuk program kami? Terlibat! Kunjungi halaman GitHub Security Bug Bounty untuk detail ruang lingkup, aturan, dan hadiah kami. Kami tidak sabar untuk membuat GitHub lebih baik untuk semua orang dengan bantuan kiriman Anda.

Untuk mempelajari lebih lanjut tentang program bug bounty GitHub atau untuk memulai peretasan, kunjungi https://hackerone.com/github.

LEAVE A RESPONSE

Your email address will not be published. Required fields are marked *