13.2. CGI, API serwerów

Jedną z częściej spotykanych form ataku (a na pewno najbardziej spektakularną) w ostatnich latach były te wymierzone w prezentowane na zewnątrz systemy informacyjne takie jak WWW. Przy czym część ataków możliwa była dzięki błędom w aplikacjach działających po stronie serwera WWW: czy to programu CGI, czy modułu serwera. Dlatego należy dokładnie przemyśleć to jakie programy będą wykonywane po stronie serwera, czy są one w wystarczającym stopniu przetestowane, przede wszystkim pod kątem zachowania wobec niestandardowych nieoczekiwanych danych (mających np. doprowadzić do wysłania /etc/passwd na adres potencjalnego włamywacza), a także tego czy operują na przewidzianych dla nich danych. ,,The World Wide Web Security FAQ'' Lincoln D. Stein zawiera listę znajdujących się w powszechnym użyciu programów CGI zawierających błędy mogące naruszyć integralność systemu. Znaleźć tam również można informacje w jaki sposób pisać ,,bezpieczne'' programy CGI.

Kolejnym potencjalnym problemem są skrypty wykorzystywane przez użytkowników (tutaj być może rozwiązaniem są:
pakiet cgiwrap Nathana Neulingera --- pozwalający na wykonywanie programów CGI z uprawnieniami użytkownika nie zaś serwera. (przy czym, jeśli serwer po starcie ustawia się jako nobody może być to forma obniżania bezpieczeństwa systemu, kosztem wyższej funkcjonalności).
Sverre H. Huseby suidcgi

Do innej kategorii zagrożeń należą te tworzone przez SSI. Część parsowalnych przez serwer dyrektyw może odwoływać się do wyjścia z wykonywanych programów bez niemal żadnej kontroli nad tym co użytkownicy robią --- np.

Przykład 13-1.

<--#exec cmd="/bin/cat /etc/passwd"-->
pozwala na serwerach uniksowych przechwycić bazę danych użytkowników... [1]

[1] w Apache do zablokowania tej opcji służy parametr IncludesNOEXEC dyrektywy Options

Kolejnym zagrożeniem, związanym ze z aplikacjami uruchamianymi po stronie serwera są... poprzednie wersje skryptów, zapisywane przez edytor jako kopia (np. ViM zapisuje kopie edytowanych plików do *~). Przy czym kopia ta jest zwykle serwowana nie jako wynik programu, a jako dokument (ponieważ ma inne rozszerzenie), udostępniając potencjalnemu włamywaczowi sporo informacji o systemie.

Patrz też:.