CRITICAL🇬🇧 English

CVE-2021-32708

RCE w Flysystem — obejście blokady rozszerzeń via unicode whitespace

CVSS 9.8v3.1pub. 2021-06-24upd. 2024-11-21

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.

🤖 Analiza AI
Jak działa

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.

Skutki

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.

Mitygacja

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.

Kogo dotyczy

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.

Uwagi

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 Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Fedora Project Fedora

    OS
    Fedoraproject
    3334
  • Thephpleague Flysystem

    APP
    Thephpleague
    1.0.0 – 1.1.4 (bez)2.0.0 – 2.1.1 (bez)
🔵
ZWERYFIKUJ U PRODUCENTA
Brak jednoznacznych danych o patchu. Sprawdź referencje od producenta.
Tagi
RCE
CWE
Referencje

Powiązane podatności

CVE-2024-4577CRITICAL9.8⚠ KEVPL ✓ten sam produkt

PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit

CVE-2024-5274CRITICAL9.6⚠ KEVPL ✓ten sam produkt

Type Confusion w V8 (Google Chrome) — RCE przez spreparowaną stronę HTML

CVE-2024-4947CRITICAL9.6⚠ KEVPL ✓ten sam produkt

Type Confusion w silniku V8 Chrome — zdalne wykonanie kodu (RCE)

CVE-2024-4671CRITICAL9.6⚠ KEVPL ✓ten sam produkt

Use-after-free w Google Chrome Visuals umożliwiający ucieczkę z sandbox

CVE-2023-6345CRITICAL9.6⚠ KEVPL ✓ten sam produkt

Integer overflow w Skia w Google Chrome — sandbox escape