CVE-2026-16760
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 39 - wyżej niż 39% wszystkich znanych CVE
Streszczenie
Biblioteka fickling w wersjach do 0.1.12 błędnie uznaje za bezpieczne wywołania funkcji pochodzących z modułów biblioteki standardowej Pythona, bez analizy ich rzeczywistego zachowania. W efekcie mechanizm check_safety() zwraca werdykt LIKELY_SAFE dla złośliwych payloadów pickle, które poprzez takie funkcje (np. dataclasses._create_fn, mailcap.findmatch, readline.write_history_file) prowadzą do wykonania dowolnego kodu lub zapisu plików. Ponieważ fickling.load() wykorzystuje ten werdykt jako bramkę bezpieczeństwa przed pickle.loads(), payload zostaje zdeserializowany i wykonany z uprawnieniami procesu ofiary.
Ocena ryzyka
Organizacja wykorzystująca fickling do weryfikacji niezaufanych plików pickle może zostać oszukana przez złośliwy payload, który zostanie uznany za bezpieczny i wykonany. Prowadzi to do zdalnego wykonania kodu lub zapisu dowolnych plików z uprawnieniami procesu przetwarzającego dane.
Rekomendacja
Zaktualizuj fickling do wersji zawierającej poprawkę (commit d011709 lub nowszy oficjalny release) i nie polegaj wyłącznie na check_safety() przy przetwarzaniu niezaufanych plików pickle. Do czasu wydania poprawki rozważ uruchamianie deserializacji w izolowanym środowisku o ograniczonych uprawnieniach.
Inne podatności w fickling
Zobacz wszystkie- CVE-2026-22612Wysokie
Fickling, narzędzie do dekompilacji i analizy statycznej plików pickle w Pythonie, przed wersją 0.1.7 zawiera podatność umożliwiającą obejście wykrywania złośliwego kodu. Problem wynika z braku analizy obiektów typu 'builtins' i został naprawiony w wersji 0.1.7.
- CVE-2026-22609Wysokie
Fickling to dekompilator i statyczny analizator plików pickle w Pythonie. Przed wersją 0.1.7 metoda unsafe_imports() nie wykrywała kilku wysokiego ryzyka modułów Pythona, które mogą być użyte do wykonania dowolnego kodu. Złośliwe pliki pickle importujące te moduły nie były oznaczane jako niebezpieczne, co pozwalało atakującym ominąć główne statyczne kontrole bezpieczeństwa Ficklinga.
- CVE-2026-22608Wysokie
Fickling to dekompilator i statyczny analizator plików pickle w Pythonie. Przed wersją 0.1.7 nie blokował on jawnie modułów ctypes i pydoc, co w połączeniu z funkcją pydoc.locate umożliwia zdalne wykonanie kodu (RCE), podczas gdy skaner nadal raportuje plik jako LIKELY_SAFE. Problem został naprawiony w wersji 0.1.7.
- CVE-2026-22607Wysokie
Fickling w wersjach do 0.1.6 nie traktuje modułu cProfile Pythona jako niebezpiecznego. Złośliwy pickle wykorzystujący cProfile.run() jest klasyfikowany jako PODEJRZANY zamiast JAWNIE ZŁOŚLIWY, co może prowadzić do wykonania kodu atakującego.
- CVE-2026-22606Wysokie
Fickling w wersjach do 0.1.6 nie traktuje modułu runpy Pythona jako niebezpiecznego. Złośliwy pickle wykorzystujący runpy.run_path() lub runpy.run_module() jest klasyfikowany jako PODEJRZANY zamiast JAWNIE ZŁOŚLIWY. Może to prowadzić do wykonania kodu atakującego, jeśli użytkownik polega na wynikach Ficklinga przy deserializacji.
- CVE-2026-118938Wysokie
Podatność w bibliotece fickling (do wersji 0.1.12) polega na tym, że operacja STACK_GLOBAL z kropkowaną nazwą __qualname__ (np. "Values.read_file") jest rozwiązywana przez pickle.find_class do dowolnej ścieżki atrybutu, a nie do funkcji na poziomie modułu. Fickling śledzi tylko pierwszy człon nazwy i wyświetla operację jako zwykły import, przez co końcowe odwołanie do atrybutu nie jest analizowane jako wywołanie. W efekcie analiza OvertlyBadEvals nie wykrywa zagrożenia, a check_safety() zwraca LIKELY_SAFE z zerową liczbą ustaleń, co pozwala atakującemu na osiągnięcie metody klasy wykonującej kod (optparse.Values.read_file uruchamia exec(open(filename).read(), vars)) i uzyskanie dowolnego wykonania kodu przy ładowaniu spreparowanego pickla przez fickling.load().
- CVE-2026-14535Wysokie
W bibliotece fickling do wersji 0.1.11 włącznie, analiza UnsafeImportsML rejestruje skrócony kod każdego importu w współdzielonym zbiorze, co powoduje, że następująca analiza MLAllowlist pomija wszystkie sprawdzenia, uznając je za już zgłoszone. W rezultacie MLAllowlist staje się martwym kodem, a importy modułów spoza listy dozwolonych (np. torch, numpy) mogą być pominięte, prowadząc do fałszywie pozytywnego wyniku LIKELY_SAFE.
- CVE-2026-14534Wysokie
Podatność w bibliotece fickling do wersji 0.1.10 włącznie polega na braku modułów standardowej biblioteki Pythona (_posixsubprocess, site, atexit) na liście UNSAFE_IMPORTS. Powoduje to, że funkcja check_safety() błędnie klasyfikuje złośliwe ładunki pickle jako LIKELY_SAFE, co umożliwia ich deserializację i wykonanie niebezpiecznych funkcji, takich jak fork_exec, execsitecustomize czy _run_exitfuncs.
- CVE-2025-67748Wysokie
Fickling to dekompilator i statyczny analizator pickle w Pythonie. Wersje przed 0.1.6 miały obejście spowodowane brakiem `pty` na liście blokowanych niebezpiecznych importów modułów. To prowadziło do niebezpiecznych pickle opartych na `pty.spawn()` błędnie oznaczanych jako `LIKELY_SAFE`, a naprawiono to w wersji 0.1.6. Wpływało to na każdego użytkownika lub system, który używał Fickling do weryfikacji plików pickle pod kątem problemów bezpieczeństwa.
- CVE-2025-67747Wysokie
Fickling to dekompilator i statyczny analizator pickle w Pythonie. Wersje przed 0.1.6 nie mają `marshal` i `types` na liście blokowanych niebezpiecznych importów modułów. Fickling zaczął blokować oba moduły, aby rozwiązać ten problem. Pozwala to atakującemu na stworzenie złośliwego pliku pickle, który może ominąć fickling, ponieważ brakuje detekcji dla `types.FunctionType` i `marshal.loads`. Użytkownik, który deserializuje taki plik, wierząc, że jest bezpieczny, przypadkowo wykona dowolny kod na swoim systemie. Wpływa to na każdego użytkownika lub system, który używa Fickling do weryfikacji plików pickle pod kątem problemów bezpieczeństwa. Problem został naprawiony w wersji 0.1.6.
Oryginalny opis (angielski, źródło NVD)
In Trail of Bits fickling through 0.1.12, the _process_import() method in fickle.py adds an imported name to the likely_safe_imports set whenever the source module is present in sys.stdlib_module_names and the name is absent from the UNSAFE_IMPORTS denylist, without inspecting what the name resolves to or how it behaves. The OvertlyBadEvals analysis pass in analysis.py then unconditionally skips any call whose function name appears in likely_safe_imports, including calls that would otherwise be flagged as overtly dangerous. As a result, any callable reachable through a non-blocked standard library module inherits module-level trust regardless of its own behavior, and check_safety() returns LIKELY_SAFE with zero findings for pickle payloads that reach code execution or file write through such callables. Demonstrated primitives: dataclasses._create_fn, which passes an attacker-controlled function body to exec() and yields arbitrary code execution on Python 3.7 through 3.12 (the internal _create_fn function was removed in Python 3.13); mailcap.findmatch, which internally calls os.system() on a test command taken from an attacker-controlled caps dictionary, yielding arbitrary code execution on Python versions through 3.12 (the mailcap module was removed in Python 3.13); and readline.add_history() followed by readline.write_history_file(), which writes attacker-controlled content to an arbitrary filesystem path (POSIX platforms, where the readline module is available). fickling.load() chains check_safety() into pickle.loads() as an explicit security gate, so a LIKELY_SAFE verdict causes the payload to be deserialized and executed with the privileges of the victim process. The root cause is the inference of callable safety from module origin; it is independent of, and separately fixable from, the dotted __qualname__ resolution weakness tracked as CVE-2026-118938, which this advisory does not address. As of 2026-10-30 the three demonstrated modules were added to UNSAFE_IMPORTS on the vendor master branch (commit d011709) pending release; released versions through 0.1.12 remain affected, and the module-origin trust root cause persists, as demonstrated by the related CVE-2026-118938 remaining exploitable on that same build.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

