Moduł GD w wersjach przed 2.86 dla Perl umożliwia atakującemu wykonanie dowolnego polecenia systemowego lub nadpisanie pliku poprzez podatność command injection w funkcji _make_filehandle. Podatność wynika z użycia niebezpiecznej formy Perl's 2-arg open() przy otwieraniu plików przekazanych jako argumenty, co przy ocenie CVSS 9.8 czyni ją krytycznym zagrożeniem.
▸ Pokaż oryginał (EN)
GD versions before 2.86 for Perl allow OS command injection and file overwrite via a 2-arg open() of filename arguments in _make_filehandle. GD::Image::_make_filehandle opens a filename argument with Perl's 2-arg open(), so a filename that begins or ends with a pipe ("| cmd", "cmd |") or begins with a redirect ("> path", ">> path") is run as a command or redirect rather than opened as a file. _make_filehandle is the single open path behind every filename-accepting constructor (new, newFromPng, newFromJpeg, and the rest); the in-memory *Data variants do not open a path and are unaffected. Any caller that forwards untrusted input to one of these constructors as a pathname can run an arbitrary command or truncate a file under the process UID.
Funkcja GD::Image::_make_filehandle otwiera przekazaną nazwę pliku przy użyciu dwuargumentowej formy open() w Perlu. Ta forma interpretatora pozwala na specjalną obsługę nazw plików zaczynających się lub kończących znakiem pipe ('| cmd', 'cmd |') jako polecenia powłoki do wykonania, a nazw zaczynających się od znaku przekierowania ('> ścieżka', '>> ścieżka') jako przekierowania wyjścia. Ponieważ _make_filehandle jest jedyną ścieżką obsługi plików dla wszystkich konstruktorów przyjmujących nazwy plików (new, newFromPng, newFromJpeg i pozostałych), każda aplikacja przekazująca niezaufane dane wejściowe do tych konstruktorów jest podatna. Warianty operujące na danych w pamięci (*Data) nie korzystają z otwierania ścieżki pliku i nie są dotknięte tym problemem.
Atakujący mogący kontrolować argument z nazwą pliku przekazywany do podatnych konstruktorów GD może wykonać dowolne polecenie systemowe z uprawnieniami procesu (UID) lub nadpisać (skrócić) dowolny plik dostępny dla tego procesu.
Należy zaktualizować moduł GD dla Perl do wersji 2.86 lub nowszej, w której zastosowano poprawkę zastępującą 2-arg open() bezpieczną 3-arg open(). Patch dostępny jest w referencjach producenta na GitHub oraz w repozytorium CPAN (metacpan.org). Do czasu aktualizacji należy rygorystycznie walidować i odrzucać wszelkie niezaufane dane wejściowe przekazywane jako nazwy plików do konstruktorów GD.
Moduł GD dla Perl w wersjach przed 2.86
Podatność została ujawniona publicznie 14 czerwca 2026 roku na liście oss-security (openwall.com). Poprawka dostępna jest w commit 67b163713c6c78dfeb693da0978ae934e5cd8210 w repozytorium Perl-GD na GitHub.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H