A PyTorch-nightly ellátási láncának fertőzése

kami911 képe

Manapság sajnos divatos támadási mód és meglehetősen nagy támadási felület különféle központi csomagtárolókban elhelyezett csomagok fertőzése, vagy a csomagok nevével történő megtévesztés. A pip segítségével telepített PyTorch-nightly Linux-csomagok 2022. december 24 és december 30 között telepítettek egy függőséget, a torchtriton-t, amely a Python Package Index (PyPI) kódtárolójában jelent meg. Ez kompromittálódott függőség a PyPI-ből települ egy megbízható külső forrás helyett. Ennek oka, hogy a pip a PyPI forrást preferálja a csomagok telepítéséhez. Ez egy rosszindulatú bináris programot telepített a számítógépre. Ez az úgynevezett ellátási lánc támadás, amely közvetlenül érinti a nyilvános csomagindexeken tárolt csomagok függőségeit. A PyPI a nyílt forráskódú csomagok tárháza, amelyet a fejlesztők arra használhatnak, hogy megosszák munkájukat, vagy mások munkájából profitáljanak, letöltve a projektjeikhez szükséges funkcionális könyvtárakat. A PyTorch stabil csomagokat alkalmazó felhasználókat ez a probléma nem érinti.

A következő paranccsal ellenőrizhető az érintettség

python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton'); affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] if s is not None else '/' ) / 'runtime').glob('*'));print('You are {}affected'.format('' if affected else 'not '))"

Eltávolítás

Akik PyTorch-nightly Linux-csomagokat telepítettek 2022. december 24 és december 30 között, így távolíthatják el azokat:

pip3 uninstall -y torch torchvision torchaudio torchtriton
pip3 cache purge

Azonosítási információ

SHA256(triton)= 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0e

Mit csinál?

A bináris információkat lop a rendszerről és a saját mappákból, így a felhasználók privát kulcsa is érintett lehet, amit cserélni szükséges. Érintett információk: névszerverek az /etc/resolv.conf állományból; hostname a gethostname() függvényből; aktuális felhasználónév a getlogin() függvényből; aktuális munkakönyvtár neve a getcwd() függvényből; környezeti változók. További fájltartalmak:

  • /etc/hosts
  • /etc/passwd
  • Az első 1000 fájl a $HOME/* könyvtárban
  • $HOME/.gitconfig
  • $HOME/.ssh/*

Így történt

December 30-án (pénteken) 16:40 GMT körül értesültünk egy rosszindulatú függőségi csomagról (torchtriton), amelyet a Python Package Index (PyPI) kódtárába töltöttek fel, ugyanazzal a csomagnévvel, mint amit a PyTorch éjszakai csomagindexén szállítunk. Mivel a PyPI index elsőbbséget élvez, ez a rosszindulatú csomag települt a hivatalos tárolónkból származó verzió helyett. Ez a kialakítás lehetővé teszi, hogy valaki regisztráljon egy csomagot ugyanazon a néven, mint ami egy harmadik fél indexében létezik, és a pip alapértelmezés szerint telepíti az ő verzióját.

Ti használtok külső tárolókat? Melyik tárolókat? Milyen módon ellenőrzitek?