Serangan ketergantungan memungkinkan eksekusi kode di PayPal, Microsoft, Apple, Netflix, Uber, dan 30 perusahaan lainnya

Beberapa hari yang lalu sebuah metode yang sangat sederhana dirilis yang memungkinkan ketergantungan menyerang dalam aplikasi yang dikembangkan menggunakan repositori paket internal. Para peneliti yang mengidentifikasi masalah mereka dapat menjalankan kode Anda di server internal 35 perusahaan, termasuk PayPal, Microsoft, Apple, Netflix, Uber, Tesla, dan Shopify.

Peretasan dilakukan sebagai bagian dari program Bug Bounty, berkoordinasi dengan perusahaan yang diserang, dan para pelaku telah menerima bonus $ 130.000 untuk mengidentifikasi kerentanan.

Metode ini didasarkan pada fakta itu banyak perusahaan menggunakan dependensi repositori standar NPM, PyPI dan RubyGems dalam aplikasi internal mereka, serta dependensi internal yang tidak didistribusikan atau diunduh secara publik dari repositori mereka sendiri.

Masalahnya adalah manajer paket itu seperti npm, pip, dan gem mereka mencoba mengunduh dependensi internal perusahaan, bahkan dari repositori publik. Untuk serangan, cukup tentukan nama paket dengan dependensi internal dan buat paket Anda sendiri dengan nama yang sama di repositori publik NPM, PyPI dan RubyGems.

Masalahnya tidak spesifik untuk NPM, PyPI, dan RubyGems, dan juga memanifestasikan dirinya pada sistem lain seperti NuGet, Maven, dan Yarn.

Ide untuk metode yang diusulkan muncul setelah seorang peneliti secara tidak sengaja memperhatikan bahwa dalam kode yang tersedia untuk umum yang diposting di GitHub, banyak perusahaan tidak menghapus penyebutan dependensi tambahan dari file manifes mereka digunakan dalam proyek internal atau saat mengimplementasikan fungsi tambahan. Jejak serupa telah ditemukan dalam kode JavaScript untuk layanan web, serta di banyak proyek Node.JS, Python, dan Ruby perusahaan.

Kebocoran utama terkait dengan penyematan konten dari file package.json dalam kode JavaScript yang tersedia untuk umum selama proses build, serta dengan penggunaan elemen jalur aktual dalam panggilan require (), yang dapat digunakan untuk menilai nama dependensi.

Pemindaian beberapa juta domain perusahaan mengungkapkan beberapa ribu nama paket JavaScript yang tidak ada di repositori NPM. Setelah menyusun database nama paket internal, peneliti memutuskan untuk melakukan percobaan untuk meretas infrastruktur perusahaan yang berpartisipasi dalam program Bug Bounty. Hasilnya ternyata sangat efektif dan peneliti dapat menjalankan kodenya pada banyak komputer dan server pengembangan yang bertanggung jawab untuk membangun atau menguji berdasarkan sistem integrasi berkelanjutan.

Saat mendownload dependensi, manajer paket npm, pip, dan gem menginstal paket dari repositori publik utama NPM, PyPI, dan RubyGems, yang dianggap memiliki prioritas lebih tinggi.

Kehadiran paket serupa dengan nama yang sama di repositori perusahaan swasta diabaikan tanpa menunjukkan peringatan atau menyebabkan crash yang bisa menarik perhatian administrator. Di PyPI, prioritas unduhan dipengaruhi oleh nomor versi (terlepas dari repositori, versi terbaru dari paket diunduh). Di NPM dan RubyGems, prioritasnya hanya bergantung pada repositori.

Peneliti telah menempatkan paket di repositori NPM, PyPI dan RubyGems yang melintasi nama dependensi internal yang ditemukan, menambahkan kode ke skrip yang berjalan sebelum instalasi (pra-instal di NPM) untuk mengumpulkan informasi tentang sistem dan mengirim informasi yang diterima ke host eksternal.

Untuk menyampaikan informasi tentang keberhasilan peretasan, melewati firewall yang memblokir lalu lintas eksternal, metode pengorganisasian komunikasi saluran rahasia melalui protokol DNS. Kode yang berjalan menyelesaikan host di domain yang menyerang di bawah kendali domain yang menyerang, yang memungkinkan untuk mengumpulkan informasi tentang operasi yang berhasil di server DNS. Informasi tentang host, nama pengguna dan jalur saat ini telah berlalu.

75% dari semua eksekusi kode yang tercatat dikaitkan dengan unduhan paket NPM, terutama karena fakta bahwa ada lebih banyak nama modul internal di JavaScript daripada nama dependensi di Python dan Ruby.

sumber: https://medium.com/


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.