Zagrożenia

Wywołanie strony będącej skryptem (programem) CGI powoduje uruchomienie na serwerze odpowiedniego programu jako oddzielnego procesu. Powoduje to powstanie wielu zagrożeń których należy unikać.

  • Program uruchamiany jest jako użytkownik apache, bądź nobody (zależnie od konfiguracji), dzięki czemu uzyskuje on dostęp do wszystkich plików zapisanych przez tego użytkownika na serwerze (również do plików wykorzystywanych przez inne skrypty).
  • Program otrzymuje standardowe prawa użytkownika, czyli ma dostęp do takich plików jak /etc/passwd, których upublicznienie poza serwer jest zagrożeniem bezpieczeństwa
  • Użytkownik może w taki sposób napisać program, że powoduje on uruchomienie zdalnego terminala wyświetlanego na końcówce klienta. Zazwyczaj sposób ten omija firewall'e ponieważ połączenie TCP/IP jest inicjowane przez serwer.
  • Użytkownik może nieświadomie (ale łatwo) napisać skrypt, który zawiera błędy i umożliwia atak na serwer, bądź przynajmniej na konto na którym skrypt jest umieszczony.
    Przykładem może być program który jako parametr otrzymuje nazwę pliku (np. z pocztą) do wyświetlenia. Ale sprytne podanie nazwy pliku jako np. ../../../../../etc/passwd da dostęp do plików z poza katalogu poczty. Proszę rozważyć skrypt zrodlo.cgi w którym pominięto by sprawdzanie czy plik ma jedno ze znanych rozszerzeń i na leży na bieżącej ścieżce.
    Szczególnie ostrożnie należy stosować polecenia typu eval, exec w bashu, czy system, execl w C lub perlu, których parametry nie są stałe (np. zależą od QUERY_STRING).
  • Innym zagrożeniem może być atak typu DOS. Każde odwołanie do skryptu CGI powoduje uruchomienie procesu, więc masowo uruchamiając skrypt można przeciążyć system.

Przed pierwszym z wymienionych zagrożeń można częściowo zabezpieczyć się, korzystając z mechanizmu suexec. Gdy serwer jest skonfigurowany aby korzystał z tego modułu, skrypt (program) uruchamiany jest z prawami właściciela pliku, a nie właściciela procesu serwera (apache). W takim wypadku użytkownik może udostępnić do zapisu co najwyżej pliki do których sam ma takie prawa. Nie zabezpiecza to jednak przed dostępem do plików spoza własnego katalogu.

Często stosowanym "zabezpieczeniem" jest nieudostępniane możliwości wykonywania skryptów CGI zwykłym użytkownikom. Po sprawdzeniu administrator umieszcza takie skrypty w specjalnym katalogu.

Ważne informacje np. hasła można wydzielić ze skryptów i umieścić je w oddzielnym pliku poza ścieżką dostępną do normalnego odczytu przez serwer WWW (np. poza katalogiem public_html). Dzięki takiemu rozwiązaniu skrypt dalej może taki plik odczytywać (bo ma prawa użytkownika), ale w przypadku wyłączenia modułu CGI (np. w przypadku wadliwego upgrade'u oprogramowania) plik z hasłami nie zostanie udostępniony do odczytu jako tekst, tak jak się to może stać ze skryptami.


Jan Słupski, jslupski@email.com