CRITICAL🇬🇧 English

CVE-2020-13092

Niebezpieczna deserializacja w scikit-learn via joblib.load()

CVSS 9.8v3.1pub. 2020-05-15upd. 2024-11-21

scikit-learn (sklearn) w wersjach do 0.23.0 włącznie jest podatne na wykonanie dowolnych poleceń systemowych poprzez deserializację niezaufanych danych w funkcji joblib.load(). Podatność ma krytyczną ocenę CVSS 9.8 i może być wykorzystana zdalnie bez uwierzytelnienia.

Pokaż oryginał (EN)

scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner

🤖 Analiza AI
Jak działa

Funkcja joblib.load() deserializuje obiekty Python z pliku, co umożliwia wykonanie kodu zdefiniowanego w metodzie __reduce__ deserializowanego obiektu. Jeśli atakujący dostarczy spreparowany plik (np. model ML), metoda __reduce__ może wywołać os.system() z dowolnym poleceniem systemowym. Warto zaznaczyć, że dokumentacja scikit-learn explicite ostrzega przed ładowaniem plików z niezaufanych źródeł — część społeczności traktuje to jako błąd użytkownika, a nie samego oprogramowania.

Skutki

Atakujący, który skłoni aplikację do załadowania spreparowanego pliku, może wykonać dowolne polecenia systemu operacyjnego z uprawnieniami procesu uruchamiającego kod, co prowadzi do pełnego przejęcia kontroli nad systemem.

Mitygacja

Należy nigdy nie przekazywać do funkcji joblib.load() plików pochodzących z niezaufanych źródeł. Producent dokumentuje tę funkcję jako niebezpieczną przy użyciu z niezaufanymi danymi. Zaleca się weryfikację integralności plików modeli (np. sumy kontrolne, podpisy kryptograficzne) przed ich załadowaniem oraz stosowanie mechanizmów izolacji (sandbox) dla procesów ładujących modele. Należy zastosować patche dostępne u producenta zgodnie z referencjami.

Kogo dotyczy

scikit-learn (sklearn) w wersjach do 0.23.0 włącznie — wszystkie aplikacje i pipeline'y ML, które przekazują do funkcji joblib.load() pliki pochodzące z niezaufanych lub niekontrolowanych źródeł.

Uwagi

Istnieje spór co do zasadności tej podatności — producent oraz część społeczności wskazuje, że funkcja joblib.load() jest jawnie udokumentowana jako niebezpieczna przy użyciu z niezaufanymi plikami i odpowiedzialność za bezpieczne jej stosowanie spoczywa na użytkowniku. Dowód koncepcji (PoC) został opublikowany przez użytkownika 0FuzzingQ na GitHub.

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Scikit Learn

    APP
    Scikit-Learn
    ≤ 0.23.0
🔵
ZWERYFIKUJ U PRODUCENTA
Brak jednoznacznych danych o patchu. Sprawdź referencje od producenta.
Tagi
Deserialization
CWE
Referencje

Powiązane podatności

CVE-2020-28975HIGH7.5ten sam produkt

svm_predict_values in svm.cpp in Libsvm v324, as used in scikit-learn 0.23.2 and other products, allows attack...

CVE-2024-5206MEDIUM4.7ten sam produkt

A sensitive data leakage vulnerability was identified in scikit-learn's TfidfVectorizer, specifically in versi...