Biblioteka Flysystem dla PHP w wersjach 1.x i 2.x zawiera podatność umożliwiającą zdalne wykonanie kodu (RCE). Mechanizm normalizacji białych znaków unicode w ścieżkach plików może być wykorzystany do ominięcia listy zabronionych rozszerzeń i wykonania złośliwego kodu na serwerze.
▸ Pokaż oryginał (EN)
Flysystem is an open source file storage library for PHP. The whitespace normalisation using in 1.x and 2.x removes any unicode whitespace. Under certain specific conditions this could potentially allow a malicious user to execute code remotely. The conditions are: A user is allowed to supply the path or filename of an uploaded file, the supplied path or filename is not checked against unicode chars, the supplied pathname checked against an extension deny-list, not an allow-list, the supplied path or filename contains a unicode whitespace char in the extension, the uploaded file is stored in a directory that allows PHP code to be executed. Given these conditions are met a user can upload and execute arbitrary code on the system under attack. The unicode whitespace removal has been replaced with a rejection (exception). For 1.x users, upgrade to 1.1.4. For 2.x users, upgrade to 2.1.1.
Biblioteka Flysystem usuwała znaki unicode whitespace ze ścieżek i nazw plików podczas ich normalizacji. Atakujący mógł przesłać plik z rozszerzeniem zawierającym ukryty znak unicode whitespace (np. '.php[whitespace]'), który po normalizacji stawał się prawidłowym rozszerzeniem '.php'. Jeżeli aplikacja weryfikowała rozszerzenie wyłącznie na podstawie listy zabronionych wartości (deny-list), a nie listy dozwolonych (allow-list), taka nazwa pliku przechodziła weryfikację. Jeśli plik trafiał do katalogu, w którym serwer wykonuje kod PHP, możliwe było zdalne wykonanie dowolnego kodu. Podatność (CWE-367 — TOCTOU) wynika z rozbieżności między momentem sprawdzenia a momentem użycia wartości ścieżki.
Atakujący, przy spełnieniu określonych warunków konfiguracyjnych, może przesłać na serwer i wykonać dowolny kod PHP, co prowadzi do pełnego przejęcia kontroli nad aplikacją oraz potencjalnie całym serwerem.
Dla gałęzi 1.x należy zaktualizować Flysystem do wersji 1.1.4. Dla gałęzi 2.x należy zaktualizować do wersji 2.1.1. Dodatkowo zaleca się zmianę weryfikacji rozszerzeń plików z modelu deny-list na allow-list oraz upewnienie się, że katalogi przechowujące przesłane pliki nie zezwalają na wykonywanie kodu PHP.
Flysystem w wersjach 1.x (przed 1.1.4) oraz 2.x (przed 2.1.1), a także pakiety Fedora zawierające te wersje biblioteki. Podatność jest możliwa do wykorzystania tylko przy spełnieniu jednocześnie kilku warunków: użytkownik kontroluje ścieżkę lub nazwę przesyłanego pliku, aplikacja stosuje deny-list (a nie allow-list) rozszerzeń, katalog docelowy zezwala na wykonywanie kodu PHP.
Podatność wymaga spełnienia kilku jednoczesnych warunków po stronie aplikacji korzystającej z biblioteki, co ogranicza powierzchnię ataku. Poprawka zastąpiła usuwanie znaków unicode whitespace odrzucaniem (wyjątkiem) takich ścieżek.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HFedora Project Fedora
OSFedoraproject3334Thephpleague Flysystem
APPThephpleague1.0.0 – 1.1.4 (bez)2.0.0 – 2.1.1 (bez)
Powiązane podatności
PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit
Type Confusion w V8 (Google Chrome) — RCE przez spreparowaną stronę HTML
Type Confusion w silniku V8 Chrome — zdalne wykonanie kodu (RCE)
Use-after-free w Google Chrome Visuals umożliwiający ucieczkę z sandbox
Integer overflow w Skia w Google Chrome — sandbox escape