Blog 24/7

wstrzyknięcie poleceń (command injection)

TAB. 1Hasłoobie formy
Po angielskucommand injection
Którą formą pisaćobie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski.
Inne formywstrzyknięcie komend powłoki · wstrzyknięcie poleceń systemowych
KategoriaPodatności i klasy błędów

Wstrzyknięcie poleceń (command injection) to podatność, w której aplikacja buduje polecenie systemu operacyjnego z danych pochodzących z zewnątrz i nie neutralizuje w nich znaków specjalnych [1]. Atakujący dopisuje wtedy do polecenia własne komendy, które serwer wykonuje. OWASP opisuje cel takiego ataku jako wykonanie dowolnych poleceń w systemie operacyjnym hosta za pośrednictwem podatnej aplikacji [2]. W katalogu CWE odpowiada mu słabość CWE-78, która w zestawieniu CWE Top 25 za 2025 rok zajęła 9. miejsce [4].

Jak działa

Aplikacja wywołuje program systemowy, na przykład narzędzie do konwersji plików albo kopii bazy, i skleja jego argumenty z tekstu od użytkownika. Powłoka traktuje część znaków jako składnię: średnik i pionowa kreska rozdzielają polecenia. MITRE opisuje, że atakujący wstrzykuje takie separatory do argumentu i w ten sposób uruchamia dodatkowe komendy [1]. Przyczyną jest według OWASP niewystarczająca walidacja danych wejściowych [2].

Różnicę widać na przykładzie w PHP. Pierwsza linia wkleja parametr do polecenia wprost, druga opakowuje go funkcją escapeshellarg().

system( 'ping -c 1 ' . $_GET['host'] );                  // podatne
system( 'ping -c 1 ' . escapeshellarg( $_GET['host'] ) ); // argument w cudzysłowie

Parametr host=example.com; id w pierwszym wariancie uruchamia dwa polecenia. Przebieg ataku pokazuje schemat poniżej.

RYS. 1Wstrzyknięcie polecenia przez parametr

Wstrzyknięcie poleceń trzeba odróżnić od wstrzyknięcia kodu. OWASP podkreśla, że przy wstrzyknięciu kodu atakujący dodaje własny kod programu, a przy wstrzyknięciu poleceń rozszerza domyślne działanie aplikacji, która i tak wykonuje polecenia systemowe, bez potrzeby wstrzykiwania kodu [2].

Odmiany

MITRE wyróżnia dwa warianty tej słabości [1]. Ściąga OWASP dodaje trzeci, pokrewny przypadek [3].

OdmianaCo kontroluje atakującyPrzykład
Stały programargument programu wybranego przez aplikację [1]separator ; w nazwie pliku
Dynamiczne poleceniewybór samego programu [1]nazwa narzędzia w parametrze
Wstrzyknięcie argumentuopcje programu, bez nowego polecenia [3]wartość zaczynająca się od --

W zestawieniu CWE Top 25 osobno liczona jest ogólniejsza słabość CWE-77, wstrzyknięcie polecenia w dowolnym interpreterze; w 2025 roku zajęła 23. miejsce [4]. Pokrewną klasą jest SQL injection, w której interpreterem jest baza danych, a nie powłoka.

W WordPressie

W WordPressie to ryzyko dotyczy przede wszystkim podatności we wtyczkach, które wywołują zewnętrzne programy: narzędzia kopii zapasowych, konwertery obrazów, generatory PDF. PHP udostępnia do tego funkcje exec(), system() i operator odwróconego apostrofu, a dokumentacja zaleca, by każdy argument od użytkownika przepuszczać przez escapeshellarg() [5].

Przykładem jest wtyczka WP Database Backup. WPScan opisał w kwietniu 2019 roku podatność „Unauthenticated OS Command Injection” we wszystkich wersjach przed 5.2 [7]. Według opisu zgłoszenia błąd we wtyczce do tworzenia kopii zapasowej pozwalał wykonywać polecenia systemowe bez uwierzytelnienia; zob. podatność wykorzystywana bez uwierzytelnienia. Naprawę przyniosła wersja 5.2 [7].

Administrator może ograniczyć funkcje wywołujące powłokę dyrektywą disable_functions w php.ini. Działa ona tylko na funkcje wbudowane i musi być ustawiona w php.ini, a nie w httpd.conf [6]. Dokumentacja PHP ostrzega, że tę dyrektywę da się obejść i nie należy jej traktować jako wystarczającego zabezpieczenia na hostingu współdzielonym [6].

Zagrożenia i skutki

MITRE wymienia jako skutki wykonanie nieautoryzowanych poleceń, odczyt i modyfikację plików, odmowę usługi oraz ukrywanie działań atakującego, które wyglądają wtedy jak czynności samej aplikacji [1]. OWASP zwraca uwagę, że wstrzyknięte polecenia działają zwykle z uprawnieniami podatnej aplikacji [2]. Im szersze uprawnienia procesu, tym większa szkoda; MITRE zaznacza, że waga błędu rośnie w procesach uprzywilejowanych [1].

  • Zdalne wykonanie kodu na serwerze, często pierwszy krok do pełnego przejęcia strony.
  • Zapis webshella, który zostaje na serwerze po usunięciu pierwotnej luki.
  • Odczyt pliku wp-config.php z danymi dostępu do bazy.
  • Eskalacja uprawnień, gdy proces działa z konta uprzywilejowanego.

Jak się bronić

Ściąga OWASP ustawia obronę warstwowo [3]. Kolejność kroków pokazuje schemat poniżej.

RYS. 2Warstwy obrony przed wstrzyknięciem poleceń

Pierwsza zasada to unikanie wywołań systemowych: zamiast polecenia mkdir w powłoce lepiej użyć wbudowanej funkcji mkdir() [3]. Gdy wywołanie jest konieczne, OWASP zaleca oddzielenie danych od polecenia oraz walidację zarówno polecenia, jak i argumentów według listy dozwolonych wartości [3]. To odmiana sanityzacji danych wejściowych i escapowania dopasowanego do kontekstu.

Ściąga porównuje dwie funkcje PHP: escapeshellarg() traktuje dane jako jeden parametr, a escapeshellcmd() blokuje łączenie poleceń, ale dopuszcza wiele parametrów, więc chroni słabiej [3]. Sama escapeshellarg() nie chroni przed wstrzyknięciem argumentu, czyli wartością zaczynającą się od myślnika; dokumentacja PHP radzi wtedy użyć separatora -- [5]. MITRE dodaje uruchamianie kodu z minimalnymi uprawnieniami, piaskownicę i zapory aplikacyjne [1], czyli zasada najmniejszych uprawnień i WAF.

Historia i przykłady

MITRE ocenia prawdopodobieństwo wykorzystania tej słabości jako wysokie [1]. W zestawieniu CWE Top 25 za 2025 rok CWE-78 spadła o dwie pozycje względem roku poprzedniego [4].

CERT Polska 10 lipca 2026 roku opublikował informację o podatnościach w systemie R-SOFT DMS. CVE-2026-41876 to OS Command Injection w konwerterze dokumentów, który wykonuje polecenia powłoki z niezabezpieczonymi ścieżkami plików; uwierzytelniony atakujący może wykonać dowolne polecenia systemowe [8]. Ta sama publikacja opisuje CVE-2026-41880, wstrzyknięcie poleceń w module OCR, pozwalające wykonywać komendy z uprawnieniami roota [8]. Wersje v3.19-2752 i v3.17-2580 usuwają pierwszą z tych luk [8]; każda z nich ma własny identyfikator CVE, a naprawą jest łatka (patch) producenta.

TAB. 2

Przypisy

8
  1. [1] CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') · MITRE
  2. [2] Command Injection · OWASP
  3. [3] OS Command Injection Defense Cheat Sheet · OWASP
  4. [4] 2025 CWE Top 25 Most Dangerous Software Weaknesses · MITRE
  5. [5] escapeshellarg — PHP Manual · The PHP Group
  6. [6] Description of core php.ini directives — disable_functions · The PHP Group
  7. [7] WP Database Backup < 5.2 – Unauthenticated OS Command Injection · WPScan
  8. [8] Podatności w oprogramowaniu R-SOFT DMS (CVE-2026-41876 i inne) · CERT Polska
TAB. 3

Hasła w tym artykule

16
TAB. 4

Linkują tutaj

12

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com