Wprowadzenie
Command Injection (Wstrzykiwanie Poleceń) to jedna z najniebezpieczniejszych podatności webowych. Polega na tym, że atakujący może wstrzyknąć i wykonać dowolne polecenia systemowe na serwerze poprzez nieoczyszczone dane wejściowe od użytkownika.
Jak działa atak?
Jeśli aplikacja buduje polecenie systemowe na podstawie danych od użytkownika bez odpowiedniej walidacji i sanitizacji, atakujący może „dopisać” dodatkowe komendy za pomocą separatorów (np. `;`, `&&`, `|`, `` ` ``).
Przykłady podatnego kodu
- PHP:
shell_exec("ping -c 4 " . $_GET['ip']); - Python:
os.system("echo " + user_input) - Node.js:
exec(`ls ${filename}`)
Typowe ataki
- Wykonanie `whoami`, `id`, `cat /etc/passwd`
- Reverse shell (nc, bash -i)
- Usuwanie plików (`rm -rf /`)
- Pobieranie i uruchamianie malware
- Zmiana konfiguracji serwera
Metody ochrony
- Nigdy nie łącz stringów – używaj bezpiecznych API (np.
execFilezamiastexec) - Whitelist dozwolonych znaków i poleceń
- Escaping specjalnych znaków (shell escaping)
- Używanie bibliotek:
child_process.spawnz tablicą argumentów - Minimalne uprawnienia procesu (principle of least privilege)
- Web Application Firewall (WAF)
Command Injection vs SQL Injection
Command Injection dotyczy poleceń systemowych (shell), natomiast SQL Injection dotyczy zapytań do bazy danych. Obie podatności należą do OWASP Top 10.
Aktualny stan (2026)
Command Injection nadal jest jedną z najpoważniejszych podatności. Mimo że narzędzia do automatycznego skanowania (np. Semgrep, Snyk) dobrze ją wykrywają, nadal pojawia się w starszych aplikacjach i skryptach DevOps.
Powiązane pojęcia
OWASP Top 10 • SQL Injection • XSS • Shell Injection • Code Injection • Least Privilege • Input Sanitization • Secure Coding Practices
Dodano: 17 maja 2026