( Zahy | 2014. 10. 10., p – 12:30 )

Itt már ragoztam egy darabig a dolgot, de hátha elsikkadt, vagy itt végre valaki megcáfol. Ma egy elvileg javított bash-t használó környezetben újra ellenőriztem amit korábban rinyáltam, hogy ez a shell-függvényesdi azért ha nem is feltétlenül távolról kihasználható, de lokálisan azért még mindig vannak veszélyei. Ebben a rendszerben az a fajta javítás van, ami a BASH_FUNC_xyz() nevű és '() {' kezdetű változókat tekint exportált függvénynek. (Ha jól tudom a hivatalos bash-javítás BASH_FUNC_xyz%% -ot tekinti annak.)

zgabor@linux-hp-zahy:~> echo $SHLVL
1
zgabor@linux-hp-zahy:~> env 'BASH_FUNC_ls()=() { echo vulnerable;}' bash
zgabor@linux-hp-zahy:~> echo $SHLVL
2
zgabor@linux-hp-zahy:~> type ls /bin/ls
ls is aliased to `ls $LS_OPTIONS'
/bin/ls is /bin/ls
zgabor@linux-hp-zahy:~> ls
vulnerable
zgabor@linux-hp-zahy:~> exit
zgabor@linux-hp-zahy:~> env 'BASH_FUNC_/bin/ls()=() { echo vulnerable;}' bash
bash: error importing function definition for `BASH_FUNC_/bin/ls'
zgabor@linux-hp-zahy:~> echo $SHLVL
2
zgabor@linux-hp-zahy:~> type ls /bin/ls
ls is aliased to `ls $LS_OPTIONS'
/bin/ls is /bin/ls

Lefordítom. Elérési úttal adott parancsot már nem tud lokális felhasználó felüldefiniálni, ellenben minden parancs amit path megadása nélkül használ az ember, az védtelen. Eddig csak egyetlen ellenötlet jött, hogy /etc/profile-ból minden parancsból alias-t csinálok alias ps=/bin/ps stílusban, sajnos az se működik, mert az alias belső parancsa a shellnek, és mint ilyen később vizsgálná meg a rendszer, mint az általam kellően preparált shell-függvényeket. (Fenti példában BASH_FUNC_alias() .... vagy másoknál BASH_FUNC_alias%% ... környezeti változóval tesztelhető :-) )