Keletas kritinių PHP4-PHP5 pažeidimų
Programa: PHP4 <= 4.3.9, PHP5 <= 5.0.2
Pavojus: Kritinis
Eksploitas: kol kas nėra
Aprašymas: PHP pakete aptikta keletas klaidų, daugiausia – leidžiančių perpildyti buferį ir nutekėti informacijai – lokalus ar per nuotolį veikiantis vartotojas pažeidžiamoje sistemoje gali įvykdyti kenkėjišką kodą.
Pažeidžiamos funkcijos ir nuostatos:
1. Buferio perpildymas sveikaisiais skaičiais pack() funkcijoje.
Nepakankama pack() funkcijai perduodamų parametrų patikra atakuotojui leidžia perpildyti dinaminį buferį ir PHP scenarijuje įvykdyti savo pakištą kodą. Klaida atakuojančiam leidžia apeiti saugaus režimo apribojimus ir, naudojantis tinklo serverio privilegijomis, įvykdyti kenkėjišką kodą. Kad šis scenarijus taptų nuotolinių atakų taikiniu – mažai tikėtina, nes dažniausiai ši funkcija duomenų apdorojimui internetinėse programose nenaudojama.
2. Buferio perpildymas sveikaisiais skaičiais unpack() funkcijoje.
Nepakankama unpack() funkcijai perduodamų parametrų patikra atakuotojui leidžia sukelti svarbios informacijos nutekėjimą iš Apache proceso. Šios klaidos naudojimas kartu su paminėta 1-uoju punktu lokaliam vartotojui leistų apeiti dinaminės atminties apsaugos sistemą. Dažniausiai ši funkcija duomenų apdorojimui internetinėse programose nenaudojama.
3. safe_mode_exec_dir apėjimas keliais srautais veikiančiame Unix serveryje.
Saugiame [safe] režime komandas vykdyti įmanoma tik safe_mode_exec_dir katalogo viduje, tačiau PHP neapriboja “cd [currentdir] ;” parametro bet kuriai vykdomai komandai, kai PHP paleistas keliais srautais veikiančiame Unix tinklo serveryje. Lokalus atakuotojas gali apeiti safe_mode_exec_dir apribojimus, shell komandas įvesdamas einamajame kataloge.
4. safe_mode apėjimas, sutrumpinant kelią iki failo.
Saugiame režime kelią iki failo prieš perdavimą į realpath() MAXPATHLEN galima “apkarpyti” vienu baitu; tai gali būti derinama su kai kuriomis kitomis realpath() glibc bibliotekoje realizacijomis, ir atakuotojas gali sukurti kelią iki failo, kuris apeitų saugaus režimo apribojimus.
5. Kelio sutrumpinimas realpath() funkcijoje.
PHP realpath() funkciją naudoja tam, kad gautų realų kelią iki failo, tačiau kai kurie realpath() ypatumai leidžia nepastebimai nukirpti labai ilgus failų vardus (ypač OpenBSD ir senose NetBSD/FreeBSD versijose). Jei sistemoje naudojami maždaug tokie, kaip “include “modules/$userinput/config.inc.php”; keliai, to rezultatas – atakuotojo įgyjama galimybė įvykdyti savo sukurtą kodą.
6. Neteisingas neigiamų nuorodų apdorojimas unserialize() funkcijoje.
Jei unserialize() funkcijai bus pateikta neigiama nuoroda, tai hashtables galima priskirti klaidingą zvalues reikšmę. Sunaikinus hashtables, sistemoje gali būti įvykdytas kenkėjiškas kodas.
7. Klaidingas nuorodų į atsilaisvinusius duomenis apdorojimas unserialize() funkcijoje.
Be 06 klaidos, ankstesnė unserializer versija kintamajam leido kurti nuorodas į ką tik iš atmintinėje esančių kintamųjų atsilaisvinusius įrašus. Atakuotojas gali pasinaudoti pažeidžiamumu, sukurdamas universalią eilutę, kurį užduotą kodą perduotų į bet kurį atminties adresą, kai ji bus apdorota unserialize() funkcija. AMD64 sistemose pažeidžiamumas leidžia tiesiogiai atlikti eilutėje esantį shell-kodą. Ši saugumo spraga gali būti panaudota ir populiariose PHP programose, kurios “sausainiukų” [cookies] reikšmes perduoda tiesiogiai unserialize() funkcijai. Pažeidžiami tokie paketai:
– phpBB2
– Invision Board
– vBulletin
– Woltlab Burning Board 2.x
– Serendipity Weblog
– phpAds(New)
PHP projekto svetainė: http://www.php.net/
Sprendimas: Įdiekite naujesnes, PHP 4.3.10 & 5.0.3 versijas.