Bug pada pemindai rahasia kami yang tidak ditemukan oleh canary
Pengiriman
Sebelum setiap Paket Kit yang kami jual dikemas dalam zip, sebuah gerbang memindainya untuk mencari nilai aktual dari rahasia kami sendiri. Setiap pemindaian dimulai dengan menanam canary, satu dari setiap jenis, dan menolak berjalan kecuali ia menangkap semuanya. Ia selalu menangkap semuanya. Namun, ia tetap memiliki bug.
Cara gerbang membaca rahasia
Gerbang tidak hanya mencari hal-hal yang berbentuk seperti kunci. Ia membaca file tempat rahasia kami berada (file env, konfigurasi JSON, file kunci), mengambil setiap nilai yang namanya menandakan bahwa itu rahasia, lalu mencari nilai-nilai persis tersebut dalam apa yang akan kami kirimkan, baik sebagaimana ditulis maupun dalam bentuk base64-encoded.
Bug tersebut
Untuk baris seperti ini:
DB_PASSWORD='Tr0ub4dor-and-3' # diganti pada bulan Mei
pembaca menghapus tanda kutip di sekitarnya hanya jika nilai tersebut diawali dan diakhiri dengan karakter tanda kutip. Dengan komentar setelah nilai, baris berakhir dengan huruf, sehingga tanda kutip tetap ada. Komentar dipotong selanjutnya, dan gerbang terus mencari 'Tr0ub4dor-and-3', termasuk tanda kutip. Sebuah Paket Kit yang berisi kata sandi tanpa tanda kutip tersebut akan lolos.
Mengapa canary tidak pernah menyadarinya
Canary menguji sebuah jaring: tanam nilai yang sudah diketahui pemindai, periksa apakah ia ditemukan. Nilai canary kami diberikan langsung ke pemindai, sehingga mereka tidak pernah melewati kode yang membaca baris konfigurasi. Setiap jaring diuji, tetapi parser di depannya tidak.
Bagaimana kami menemukannya
Kami sedang mengubah gerbang menjadi produk tersendiri, dan menulis tes yang memberinya file konfigurasi dalam format yang benar-benar ditulis orang: export, tanda kutip, komentar di akhir. Tes gagal pada baris bertanda kutip dengan komentar. Perbaikannya membaca nilai bertanda kutip hingga tanda kutip penutupnya dan mengabaikan apa pun yang mengikutinya.
Apakah ini penting?
Kami memeriksa sebelum mengubah apa pun. Pada mesin build kami, gerbang membaca 133 nilai rahasia dari 59 file yang diberikan, dan pada mesin kedua 499; tidak ada satu pun yang memiliki bentuk tersebut. Tidak ada keputusan sebelumnya yang berubah: setiap Paket Kit yang telah kami rilis dipindai untuk nilai yang sama yang akan dipindai sekarang. Kami tetap memperbaiki gerbang di ketiga mesin tersebut.
Kesimpulan
Jika sebuah scanner mengekstrak apa yang dicarinya, uji ekstraksinya dengan input yang realistis, bukan hanya pencariannya dengan nilai yang ditanam. Canary membuktikan jaringnya bekerja; ia tidak mengatakan apa pun tentang apakah ikan yang tepat benar-benar sampai ke sana. Pengujian Secret Gate kini mencakup keduanya, dan sebelum rilis, kami memastikan bahwa ia membaca tepat 133 nilai yang sama dengan build gate kami.