Atacuri posibile
Utilizarea PHP în calitate de binar CGI este o opțiune
pentru cazurile când dintr-un anume motiv nu se dorește integrarea PHP în
calitate de modul în serverul software (precum Apache), sau PHP se va
utiliza cu diferite tipuri de învelișuri CGI pentru a
crea medii securizate cu ajutorul chroot și setuid pentru scripturi.
Această variantă implică de obicei instalarea binarului PHP executabil în
directorul cgi-bin al serverului web. Îndrumarul CERT
» CA-96.11 nu recomandă plasarea
oricărui tip de interpretor de acest gen în directorul cgi-bin. Chiar dacă
binarul PHP poate fi folosit ca un interpretor de sine stătător, PHP a
fost conceput în așa fel, încât să prevină atacuri, pe care o asemenea
variantă de utilizare le face posibilă:
-
Accesarea fișierelor din sistem:
http://my.host/cgi-bin/php?/etc/passwd
Informația din URL de după semnul de întrebare (?) este transmisă
interpretorului în calitate de argumente în linia de comandă de către
interfața CGI. De obicei interpretoarele deschid și execută fișierul
specificat ca prim argument în linia de comandă.
Când este apelat ca un binar CGI, PHP refuză să interpreteze argumentele
din linia de comandă.
-
Accesarea oricărui document web de pe server:
http://my.host/cgi-bin/php/secret/doc.html
Informațiile introduse în URL după denumirea binarului
PHP, /secret/doc.html sunt de obicei
utilizate pentru a specifica denumirea și calea către fișierul care
trebuie deschis de către interpretorul CGI.
De obicei directivele din configurația unui server web
(Apache: Action) sunt folosite pentru a redirecționa interpelările
către documente ca
http://my.host/secret/script.php către
interpretorul PHP. În acest caz, serverul web verifică mai întâi
permisiunile de acces către directorul
/secret, și după aceea creează
interpelarea de redirecționare către
http://my.host/cgi-bin/php/secret/script.php.
Cu regret, dacă interpelarea este inițial scrisă în această formă,
serverul web nu efectuează nici o verificare de acces către fișierul
/secret/script.php, ci numai către
fișierul /cgi-bin/php. În acest fel,
orice utilizator care poate accesa fișierul
/cgi-bin/php, poate accesa și orice
document protejat de pe serverul web.
În PHP, directivele de configurare în timpul rulării
cgi.force_redirect,
doc_root și
user_dir pot fi utilizate pentru a
preveni acest atac, dacă arborele de documente de pe server conține
directoare cu acces restricționat. Observați mai jos explicații detaliate
despre diferite combinații.