Lehetséges támadások
A PHP CGI futtatható állományként való használata
egy telepítési lehetőség azok számára, akik valami oknál fogva nem
szeretnék a PHP-t modulként a szerverbe integrálni (pl. Apache),
vagy a PHP-t más CGI wrapper-ekkel szeretnék használni biztonságos
chroot és setuid környezet kialakítása érdekében. Ez a forma magával
vonja azt, hogy a PHP a szerver cgi-bin könyvtárába legyen telepítve.
A CERT advisory » CA-96.11 azt tanácsolja,
hogy ne tegyél feldolgozó (interpreter) programot a cgi-bin könyvtárba.
Bár a PHP használható mint egy egyedülálló feldolgozó program, a PHP-t
úgy tervezték, hogy az ilyen telepítésekből adódó támadásokat kivédje:
-
Rendszerfájlok elérése: http://domain.nev/cgi-bin/php?/etc/passwd
Az URL lekérési információja (query information), ami
a kérdőjel (?) után található, parancssori paraméterként kerül
átadásra a feldolgozónak. Általában a feldolgozók megnyitják,
és lefuttatják az első paraméterként adott fájlt.
Ha a PHP CGI futtatható állományként hívódik meg, nem veszi figyelembe
a parancssori paramétereket.
-
Bármilyen web dokumentum elérése a szerveren: http://domain.nev/cgi-bin/php/titkos/doc.html
Az elérési út információ (path information) az URL része, a
futtatható fájl neve után lévő
/titkos/doc.html a
CGI program által megnyitásra és futtatásra kerülő
fájl elérésének meghatározására használatos.
Tipikusan néhány webkiszolgáló beállítási lehetőség (Apache-ban:
Action) használatos a kérések átirányítására a dokumentumhoz, mint a
http://domain.nev/titkos/szkript.php
a PHP értelmező számára. Ezzel a beállítással a szerver először
ellenőrzi az elérési engedélyeket a /titkos könyvtárra, és ezután állítja elő
az átirányító kérést a http://domain.nev/cgi-bin/php/titkos/szkript.php
oldalra, amit így már a PHP feldolgoz. Azonban ha eredetileg is
ebben a formában volt megadva a kérés, nem történik elérési
ellenőrzés a /titkos/szkript.php
fájlra, csak a /cgi-bin/php fájlra.
Ilyen módon bárki, aki elérheti a
/cgi-bin/php címet, egyben
tetszőleges védett dokumentumot is elérhet.
A PHP esetében az --enable-force-cgi-redirect
fordítási paraméter, a doc_root és user_dir konfigurációs lehetőségek
használhatóak ennek kivédésére, ha a szerver dokumentumainak
könyvtárfájában van olyan könyvtár, ami elérési korlátozásokkal
bír. Nézd meg az alábbi lehetőségeket a különböző kombinációkhoz!