Pepijat dalam pengimbas rahsia kami yang tidak dapat dikesan oleh canaries

Penghantaran

Sebelum mana-mana kit yang kami jual dimampatkan, satu penghalang mengimbasnya untuk mencari nilai sebenar rahsia kami sendiri. Setiap imbasan bermula dengan menanam canary, satu bagi setiap jenis, dan enggan berjalan melainkan ia menangkap kesemuanya. Ia sentiasa menangkapnya. Ia masih mempunyai pepijat.

Cara gerbang membaca rahsia

Pintu itu bukan sahaja mencari perkara yang berbentuk kunci. Ia membaca fail tempat rahsia kita disimpan (fail env, konfigurasi JSON, fail kunci), mengambil setiap nilai yang namanya menunjukkan ia rahsia, dan kemudian mencari nilai-nilai tepat itu dalam apa yang kita akan hantar, sama ada seperti yang ditulis atau disandikan base64.

Ralat

Untuk barisan seperti ini:

DB_PASSWORD='Tr0ub4dor-and-3'  # ditukar pada Mei

pembaca hanya membuang tanda petik di sekeliling nilai jika nilai itu bermula dan berakhir dengan aksara tanda petik. Dengan komen selepas nilai, baris berakhir dengan huruf, jadi tanda petik kekal. Komen itu kemudiannya dipotong, dan pengawal terus mencari 'Tr0ub4dor-and-3', termasuk tanda petik. Sebuah kit yang mengandungi kata laluan tanpa tanda petik itu akan lulus.

Mengapa burung kenari tidak pernah menyedarinya

Canary menguji rangkaian: tanam nilai yang sudah diketahui pengimbas, pastikan ia ditemui. Nilai canary kami diberikan terus kepada pengimbas, jadi ia tidak melalui kod yang membaca baris konfigurasi. Setiap rangkaian telah diuji, tetapi parser di hadapannya tidak.

Bagaimana kami menemuinya

Kami sedang menjadikan gerbang itu sebagai produk tersendiri, dan menulis ujian yang membekalkannya dengan fail konfigurasi dalam format yang benar-benar ditulis orang: export, tanda petik, komen di hujung baris. Ujian itu gagal pada baris bertanda petik yang mempunyai komen. Pembetulannya membaca nilai bertanda petik sehingga tanda petik penutupnya dan mengabaikan apa sahaja yang mengikutinya.

Adakah ia penting?

Kami memeriksa sebelum mengubah apa-apa. Pada mesin binaan kami, pengawal keselamatan membaca 133 nilai rahsia daripada 59 fail yang diberikan kepadanya, dan pada mesin kedua, 499; tiada satu pun mempunyai bentuk tersebut. Tiada keputusan terdahulu berubah: setiap kit yang kami keluarkan telah diimbas untuk nilai yang sama seperti yang akan diimbas sekarang. Kami telah membetulkan pengawal keselamatan pada ketiga-tiga mesin itu juga.

Pengajaran utama

Jika pengimbas mengekstrak apa yang dicari, uji pengekstrakan dengan input yang realistik, bukan hanya carian dengan nilai yang ditanam. Canary membuktikan jaring berfungsi; ia tidak menunjukkan sama ada ikan yang betul benar-benar sampai ke sana. Ujian Secret Gate kini merangkumi kedua-duanya, dan sebelum pelancarannya, kami memastikan ia membaca tepat 133 nilai yang sama seperti gerbang binaan kami.

Dikemas kini: