Bağımlılık Karışıklık Saldırısı
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 pip
indirdiğ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_.py
dosyayı düzenleyin package_name
ve istediğiniz paket adıyla değiştirin:
Paket tetikleyicilerini almak için dosyayı açın poc.py
ve 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:
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-url
yerine 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