Command injection (wstrzyknięcie poleceń) to atak, w którym atakujący przekazuje aplikacji dane zawierające polecenia systemu operacyjnego, a aplikacja wykonuje je na serwerze. Występuje, gdy dane użytkownika trafiają do funkcji uruchamiających powłokę bez właściwego filtrowania.
Jak wygląda taka podatność?
Aplikacja pozwala np. sprawdzić dostępność domeny i wykonuje ping $domena. Jeśli atakujący wpisze example.com; cat /etc/passwd, powłoka wykona dwa polecenia, a drugie ujawni poufny plik. Skutkiem może być przejęcie serwera.
Jak się chronić?
- unikaj wywoływania powłoki, a jeśli to konieczne, używaj bezpiecznych API, które przyjmują argumenty osobno,
- w PHP stosuj
escapeshellarg(), ale najlepiej zamiastexec()użyj funkcji dedykowanej danemu zadaniu, - sprawdzaj dane według listy dozwolonych wartości,
- uruchamiaj aplikację z minimalnymi uprawnieniami.
Command injection a RCE
To jeden z najczęstszych sposobów uzyskania zdalnego wykonania kodu (RCE). Opis ataku i metod obrony znajdziesz w materiałach OWASP.
Podobnie jak przy zabezpieczaniu aplikacji przed SQL Injection, podstawą ochrony jest traktowanie wszystkich danych od użytkownika jako niezaufanych.
Zobacz w praktyce
Jak zabezpieczyć aplikację przed SQL Injection
Ochrona przed atakami brute force – jak zabezpieczam logowanie na stronie i serwerze
Jak bezpiecznie przechowywać hasła użytkowników w bazie danych