Minggu Ini Dalam Keamanan: Kebocoran Waktu Npm, Kunci Universal Siemens, Dan PHP Dalam PNG

Yang pertama adalah beberapa sihir pintar dari [Aqua Nautilus] tim peneliti, yang menemukan serangan waktu yang membocorkan informasi tentang paket npm pribadi. Pengaturannya adalah ini, npm menghosting paket node.js publik dan pribadi. Yang publik tersedia untuk semua orang, tetapi paket pribadi “tercakup”, yang berarti mereka tinggal di dalam ruang nama pribadi, “@pemilik/nama paket” dan tidak dapat diakses oleh masyarakat umum. Mencoba mengakses paket menghasilkan kesalahan HTTP 404 — kesalahan yang sama seperti mencoba menarik paket yang tidak ada.


Sedikit pintar adalah terus mencoba, dan benar-benar memperhatikan tanggapannya. Gunakan API npm untuk meminta info tentang paket target Anda, lima kali berturut-turut. Jika nama paket tidak digunakan, kelima permintaan akan memakan waktu yang diharapkan. Permintaan itu mendarat di backend layanan, pencarian dilakukan, dan Anda mendapatkan respons. Di sisi lain jika paket target Anda memang ada, tetapi dicakup secara pribadi, permintaan pertama kembali dengan penundaan yang diharapkan, dan empat permintaan lainnya segera kembali. Tampaknya npm memiliki front-end yang dapat men-cache respons 404 untuk paket pribadi. Perbedaan waktu respons itu berarti Anda dapat memetakan nama paket pribadi yang digunakan oleh organisasi tertentu dalam lingkup pribadi mereka.

Sekarang ini semua sangat menarik, tetapi itu berubah menjadi serangan yang masuk akal ketika dikombinasikan dengan masalah kesalahan ketik dan kebingungan ketergantungan. Serangan tersebut adalah dua pendekatan untuk tujuan yang sama, dapatkan penyebaran node.js untuk menjalankan paket berbahaya alih-alih paket sah yang dimaksudkan pengembang. Seseorang bergantung pada kesalahan ketik, tetapi kebingungan ketergantungan hanya bergantung pada pengembang yang tidak secara eksplisit mendefinisikan ruang lingkup suatu paket.

Siemens Meninggalkan Kunci dalam Pengapian

Siemens merilis versi 12 dari portal TIA mereka hampir 10 tahun yang lalu, dan dengan pembaruan ini menambahkan kriptografi asimetris antara portal dan produk SIMATIC S7-1200 dan S7-1500 mereka. Sederhananya, pengontrol industri mereka mulai menggunakan HTTPS untuk berbicara dengan perangkat lunak pengontrol. Ini adalah hal yang baik. Sayangnya, kunci pribadi untuk koneksi HTTPS itu hidup di perangkat keras pengontrol, dan setiap unit yang dikirimkan memiliki kunci yang sama.

Kegembiraan sebenarnya adalah bagaimana tim di Claroty menemukan semua ini. Pengontrol industri diprogram dalam bahasa tingkat tinggi yang spesifik, yang khusus untuk logika otomasi. Pointer, manajemen memori, dan vektor rentan normal lainnya tidak muncul di sini. Program-program tersebut dikompilasi ke bytecode khusus yang berjalan di lingkungan yang terkontrol pada pengontrol. Jadi tentu saja, peneliti kami merekayasa balik bytecode dan menulis kompiler mereka sendiri, untuk memiliki akses ke fitur-fitur tersembunyi tersebut. Masih merupakan tantangan untuk mengalahkan kontrol keamanan yang ada di dalam lingkungan itu, tetapi mereka akhirnya menemukan fungsi yang dapat mengatur penunjuk ke nilai arbitrer, yang memungkinkan kernel membaca dan menulis. Termasuk membaca kunci universal.

Dan itu membawa kita ke serangan nyata pertama yang mengaktifkan kunci rahasia-tetapi-bersama ini. Tergantung pada konfigurasinya, terkadang mungkin untuk mengunduh blob konfigurasi tanpa autentikasi. Salah satu item yang terkandung dalam kumpulan data itu adalah hash kata sandi terenkripsi, yang dienkripsi menggunakan — Anda dapat menebaknya — kunci universal itu. Dengan kunci di tangan, penyerang dapat mengunduh hash, mendekripsi, dan kemudian mengautentikasi menggunakan hash.

Dan kemudian, memiliki kunci rahasia untuk sertifikat HTTPS memungkinkan semua kejahatan normal yang akan dipikirkan orang: menangkap lalu lintas dan mendekripsi, atau melakukan serangan man-in-the-middle. Masalah telah diperbaiki dengan pembaruan firmware dan portal terbaru, dan Siemens telah mengeluarkan nasihat yang mengakui masalah tersebut. Lihat video di bawah ini untuk mengetahui kisah langsung tentang melarikan diri dari The Matrix dan mendapatkan eksekusi kode nyata pada mesin ini.

(Perusahaan induk Hackaday, Supplyframe, dimiliki oleh Siemens.)

PNG Valid, PHP Valid

Selalu ada sesuatu yang aneh menyenangkan tentang file yang valid sebagai beberapa, format file yang sangat berbeda. Dalam hal ini, file PNG yang juga merupakan PHP yang valid. Sudut keamanan di sini adalah bahwa banyak situs web memungkinkan Anda mengunggah PNG dan kemudian melihatnya. Jika PNG itu benar-benar bisa, diam-diam menjadi file PHP juga, Anda memiliki webshell instan. Sekarang kemungkinan ada beberapa situs tidak aman yang semudah mengunggah skrip, tetapi banyak pustaka pengunggah setidaknya akan memeriksa apakah file tersebut valid untuk mimetype yang ditentukan. Sederhananya, itu harus berupa PNG yang valid jika disetel ke image/png. Tapi apakah itu cukup?

File PNG dapat berisi komentar. Apa yang dilakukan server web saat menyajikan file .php yang juga berisi data PNG biner? Dalam banyak kasus, ia memperlakukannya seperti file lain, mengirimkan data mentah hingga menemukan tag

Pendekatan lain yang lebih sulit, adalah menyematkan teks sebagai data gambar secara langsung. Ada potongan PLTE, di mana entri palet kustom dapat ditentukan. Ini dapat memiliki nilai apa pun, tetapi harus memiliki panjang kelipatan tiga, dan maksimum 768 karakter. Yang lebih sulit adalah menggunakan potongan IDAT yang sebenarnya, alias data piksel valid yang sebenarnya. Ini memang sihir yang dalam.

Zoneminder — Bisa Lebih Buruk

Yang ini dekat dengan rumah, karena ini adalah trio kerentanan dalam proyek yang saya rekomendasikan dan kadang-kadang kode selempang. [Trenches of IT] menghubungi proyek pada tanggal 30 dengan trio kerentanan yang berpotensi sangat buruk saat disatukan. Yang pertama adalah kelemahan Injeksi Log, di mana pengguna web dapat memasukkan data sewenang-wenang ke dalam log ZM, tanpa batasan kecepatan. Perlu kamera untuk berhenti merekam? Isi drive dengan pesan log. Baik pesan itu sendiri maupun komponen yang mengirimkannya dapat diatur secara sewenang-wenang.

Selanjutnya adalah bypass CSRF. Pemalsuan Permintaan Lintas Situs adalah serangan di mana browser pengguna akhir melakukan tindakan yang tidak diinginkan pengguna, hanya dengan membuat permintaan HTTP. ZM menggunakan token CSRF untuk melindungi dari masalah seperti itu, yang merupakan token acak, yang disediakan oleh layanan web, yang harus disertakan dalam permintaan POST apa pun. Bypass dalam kasus ZM adalah bahwa beberapa tindakan, seperti menghapus rekaman, dapat dibuat sebagai permintaan GET, yang tidak memerlukan token. Ups.

Masalah terakhir berpotensi menjadi yang terburuk, karena ini adalah masalah Cross-Site Scripting (XSS). Masalah injeksi log itu juga memungkinkan yang ini, karena bidang “file” dapat berisi kode HTML arbitrer, termasuk tag skrip. Gabungkan ketiga masalah tersebut dan pengguna dengan hak akses hanya lihat dapat menyuntikkan perintah hapus atau nonaktifkan yang akan dipicu saat admin melihat log. Itu buruk, tapi setidaknya itu bukan kerentanan pra-autentikasi. Itu diperbaiki di 1.36.27, dirilis pada tanggal 7. Jika Anda terjebak dalam seri 1,34 rilis, ini beberapa masalah lain yang beredar dan tidak ada rilis lebih lanjut yang direncanakan untuk versi usang itu. Terimakasih untuk [Trenches of IT] untuk menemukan dan melaporkan!

Hadiah Microsoft yang Terus Memberi

Ingat Exchange 0-day, yang merupakan semacam solusi dari masalah lama dengan titik akhir autodiscover? Yah itu masih belum ditambal, dan solusi yang disarankan telah diperbarui beberapa kali, karena telah dilewati secara sepele. Mungkin sudah waktunya untuk menarik steker pada autodiscover, dan hanya memblokir semua akses luar ke IIS saat Anda melakukannya.

Eksekusi Python dan Userland

Akhirnya tip cepat tim merah. Anda telah membuka shell di server, dan Anda ingin menggunakan beberapa alat untuk mulai menjelajahi lingkungan. Root dipasang hanya-baca, dan direktori temp Anda semuanya terpasang noexec. Bagaimana Anda mendapatkan biner ke sistem dan menjalankannya? Jika Python diinstal, maka Anda bisa menggunakan ulexecve. [Vincent Berg] menulis alat dan memiliki cerita. Cara kerjanya sama mengesankannya, karena mengunduh dan mem-parsing biner yang diberikan, memuatnya secara manual ke dalam memori dan menghasilkan buffer lompatan. Akhirnya, ia melompat eksekusi kode ke biner baru, yang tidak perlu ditulis ke disk. Sulit.