W środowisku użytkownika Enlightenment wykryto podatność (CVE-2022-37706), która umożliwia nieuprzywilejowanemu lokalnemu użytkownikowi wykonanie kodu z uprawnieniami roota. Podatność nie została jeszcze naprawiona (0-day), ale w Internecie już znajduje się exploity, przetestowane w Ubuntu 22.04.
Problem występuje w pliku wykonywalnym enlightenment_sys, który jest dostarczany z flagą suid root i wykonuje przez wywołanie system() określone dozwolone komendy, takie jak montowanie nośnika za pomocą narzędzia mount. Z powodu niewłaściwego działania funkcji formującej ciąg przekazywany do wywołania system(), z argumentów uruchamianej komendy usuwane są cudzysłowy, co można wykorzystać do uruchamiania własnego kodu. Na przykład, przy uruchomieniu mkdir -p /tmp/net mkdir -p "//tmp/; /tmp/exploit" echo "//bin/sh" > /tmp/exploit chmod a+x /tmp/exploit enlightenment_sys /bin/mount -o noexec,nosuid,utf8,nodev,iocharset=utf8,utf8=0,utf8=1,uid=$(id -u), "//dev/../tmp/; /tmp/exploit" /tmp///net
z powodu usunięcia podwójnych cudzysłowów, zamiast podanej komendy ‘//bin/mount … "//dev/../tmp/; /tmp/exploit" /tmp///net’ do funkcji system() zostanie przekazany ciąg bez podwójnych cudzysłowów ‘//bin/mount … //dev/../tmp/; /tmp/exploit /tmp///net’, co spowoduje oddzielne wykonanie komendy ‘//tmp/exploit /tmp///net’ zamiast przetwarzania jako część ścieżki do urządzenia. Ciągi ‘//dev/../tmp/’ i ‘//tmp///net’ zostały dobrane w celu ominięcia weryfikacji argumentów komendy mount w enlightenment_sys (urządzenie montowania musi zaczynać się od //dev/ i wskazywać na istniejący plik, a trzy znaki ‘//’ w punkcie montowania wskazane są w celu osiągnięcia wymaganego rozmiaru ścieżki).
Źródło: opennet.ru
