Atacuri posibile
Folosind PHP ca pe un binar CGI este o optiune pe care
setup-urile, dintr-un anume motiv, nu doresc sa o configureze si sa o integreze
in PHP ca pe un modul in serverul software (precum Apache), sau vor folosi PHP cu
ajutorul diferitelor metode de CGI wrap pentru a crea medii securizate chroot si setuid
pentru scripturi. Acest setup implica de obicei instalarea binarului PHP executabil in
directorul cgi-bin din serverul web. Indrumarul CERT » CA-96.11
nu recomanda plasarea oricarui tip de interpretor de acest gen in directorul cgi-bin.
Chiar daca binarul PHP poate fi folosit ca un interpretor de sine statator, PHP
a fost conceput in asa fel incat sa anticipeze atacuri generate de un asemenea setup:
-
Accesarea fisierelor din sistem:
http://host.ext/cgi-bin/php?/etc/passwd
Informatia din URL de dupa semnul de intrebare (?) este pasata
liniei de comanda ca argumente si interpretata de interfata CGI. De obicei
interpretoarele deschid si executa fisierul specificat ca prim argument in
linia de comanda.
Cand este apelat ca un binar CGI, PHP refuza sa interpreteze
argumentele din linia de comanda.
-
Puteti accesa orice document de pe server:
http://host.ext/cgi-bin/php/secret/doc.html
Informatiile introduse in URL dupa numele binarului
PHP, /secret/doc.html sunt de obicei
utilizate pentru a specifica numele si calea catre fisierul
care trebuie deschis de catre interpretorul CGI.
De obicei directivele din configuratia unui server web
(Apache: Action) sunt folosite pentru a redirecta cererile
catre documente ca
http://www.host_victima.ro/secret/script.php
catre interpretorul PHP. Cu acest setup, serverul web verifica
mai intai permisiile de acces catre directorul /secret,
si dupa aceea creaza cererea de redirectionare catre
http://www.host.ro/cgi-bin/php/secret/script.php.
Din pacate, daca cererea originala se face sub aceasta forma
nu sunt facute nici un fel de verificari de catre serverul web
catre fisierul /secret/script.php,
ci numai pentru fisierul /cgi-bin/php.
In acest fel, orice utilizator care poate executa
/cgi-bin/php,
poate accesa automat orice director sau fisier protejat de pe server.
In PHP, optiunea din timpul compilarii
--enable-force-cgi-redirect
si directivele de configuratie doc_root si
user_dir pot fi folosite pentru a preveni
acest atac, daca structura documentelor de pe server contine vreun
director cu acces restrictionat. Observati mai jos explicatii detaliate
despre diferite combinatii.