Command Injection là một lỗ hổng bảo mật nguy hiểm, cho phép kẻ tấn công thực thi các lệnh không mong muốn trên hệ thống thông qua ứng dụng web. Điều này có thể gây rò rỉ dữ liệu, chiếm quyền kiểm soát hệ thống và nhiều hậu quả nghiêm trọng khác. Để tìm hiểu chi tiết về Command Injection là gì, các ví dụ minh họa cùng phương pháp ngăn chặn hiệu quả, mời bạn đọc tiếp bài viết mà mình sắp chia sẻ dưới đây.
Điểm chính cần nắm
- Khái niệm Command Injection: Đây là hình thức tấn công mạng cho phép kẻ xấu thực thi lệnh tùy ý trên máy chủ, khai thác lỗ hổng từ việc kiểm tra và xác thực dữ liệu đầu vào không đầy đủ.
- Rủi ro nghiêm trọng của Command Injection: Lỗ hổng này có thể dẫn đến chiếm quyền hệ thống, đánh cắp dữ liệu, phá hoại website, gián đoạn dịch vụ và mở đường cho các cuộc tấn công leo thang, gây tổn thất nặng nề cho doanh nghiệp.
- So sánh Code Injection và Command Injection: Code Injection bị giới hạn trong ứng dụng mục tiêu, trong khi Command Injection cho phép kẻ tấn công thực thi lệnh hệ thống, mở rộng quyền kiểm soát và gây thiệt hại lớn hơn cho hệ thống mục tiêu.
- Ví dụ thực tế về lỗ hổng Command Injection: Các lỗ hổng thường xảy ra khi xử lý tên tệp làm tham số lệnh, thao tác với biến môi trường như
APPHOME
hoặc biến$PATH
, tạo điều kiện cho kẻ tấn công thực thi lệnh độc hại. - Các phương pháp tấn công Command Injection hiện nay: Các kỹ thuật phổ biến gồm chèn lệnh tùy ý, tải tệp độc hại, tuần tự hóa không an toàn, tấn công template phía server (SSTI) và chèn thực thể XML (XXE), đều khai thác lỗ hổng xử lý dữ liệu đầu vào.
- Cách ngăn chặn Command Injection: Ngăn chặn tấn công bằng cách tránh sử dụng lệnh hệ thống với dữ liệu đầu vào, xác thực input, tạo danh sách trắng, sử dụng API bảo mật và thực thi lệnh hệ thống qua
executeFile()
một cách an toàn. - Giới thiệu Vietnix: Với hơn 13 năm kinh nghiệm, Vietnix cung cấp giải pháp công nghệ toàn diện như VPS hiệu năng cao, Hosting ổn định và Firewall độc quyền, cùng đội ngũ hỗ trợ 24/7, phục vụ hơn 80.000 doanh nghiệp.
- Giải đáp các câu hỏi liên quan đến Command Injection là gì: Giúp bạn hiểu được Command Injection là một hình thức tấn công mạng nguy hiểm, cho phép kẻ tấn công thực thi lệnh tùy ý trên hệ điều hành thông qua việc khai thác lỗ hổng trong ứng dụng, gây ra những rủi ro nghiêm trọng cho hệ thống và dữ liệu.
Command Injection là gì?
Command Injection (còn được gọi là OS Command Injection hoặc Shell Injection) là một hình thức tấn công mạng, trong đó kẻ tấn công thực thi các lệnh tùy ý trên hệ điều hành của máy chủ (host operating system – OS). Thông thường, kẻ tấn công sẽ chèn và thực thi các lệnh này bằng cách khai thác lỗ hổng trong ứng dụng, chẳng hạn như việc kiểm tra và xác thực dữ liệu đầu vào không đầy đủ hoặc không đúng cách.

Lỗ hổng này có thể dẫn đến những hậu quả nghiêm trọng, bao gồm việc chiếm quyền kiểm soát hệ thống, truy cập trái phép vào dữ liệu nhạy cảm hoặc gây gián đoạn hoạt động của máy chủ. Vì vậy, việc hiểu rõ về Command Injection và áp dụng các biện pháp phòng ngừa hiệu quả là cần thiết để đảm bảo an toàn cho hệ thống của bạn.
Hacker có thể lợi dụng việc kiểm tra input của dùng người dùng không an toàn, chẳng hạn như cookie và form để đưa lệnh vào system shell trên web server. Sau đó, hacker có thể tận dụng các đặc quyền của ứng dụng dễ bị tấn công để khai thác server.
Command injection có nhiều dạng khác nhau. Bao gồm thực hiện trực tiếp lệnh shell, đưa các file độc hại vào môi trường runtime của server và khai thác lỗ hổng trong các file config. Chẳng hạn như XXE (XML external entites).
Những rủi ro của Command Injection
1. Toàn bộ hệ thống bị xâm phạm
Kẻ tấn công có thể chiếm quyền kiểm soát hoàn toàn hệ điều hành của máy chủ thông qua lỗ hổng Command Injection. Điều này có thể dẫn đến quyền truy cập root, cho phép kẻ tấn công có toàn quyền trên hệ thống. Một khi kiểm soát được hệ thống, chúng có thể:
- Thay đổi cấu hình hệ thống.
- Truy cập dữ liệu bị hạn chế.
- Di chuyển ngang qua mạng để xâm nhập thêm vào các hệ thống khác.
Điều này đặc biệt nguy hiểm đối với các môi trường dựa trên đám mây, nơi lưu trữ nhiều ứng dụng và dịch vụ.
2. Đánh cắp dữ liệu
Kẻ tấn công có thể sử dụng các lệnh như cat /etc/passwd
để truy cập và thu thập dữ liệu nhạy cảm từ hệ thống bị tấn công, bao gồm:
- Thông tin đăng nhập của người dùng.
- Hồ sơ tài chính.
- Tài sản trí tuệ.
Hậu quả của việc đánh cắp dữ liệu có thể kéo dài, bao gồm:
- Trách nhiệm pháp lý.
- Các khoản phạt theo quy định pháp luật.
- Mất lòng tin từ khách hàng.
Ngoài ra, dữ liệu bị đánh cắp có thể bị rao bán trên thị trường đen hoặc sử dụng để thực hiện các cuộc tấn công tiếp theo.
3. Phá hoại giao diện website
Kẻ tấn công có thể sử dụng Command Injection để ghi đè các tệp của ứng dụng web, thay thế nội dung trang web thật bằng các thông điệp hoặc hình ảnh do chúng tạo ra. Điều này gây ảnh hưởng trực tiếp đến uy tín của doanh nghiệp.

4. Gián đoạn dịch vụ
Thông qua các lệnh độc hại như rm -rf
, kẻ tấn công có thể xóa các tệp quan trọng, khiến các dịch vụ ngừng hoạt động. Hậu quả bao gồm:
- Thời gian ngừng hoạt động gây tổn thất tài chính đáng kể.
- Suy giảm năng suất làm việc.
Trong các ngành yêu cầu dịch vụ liên tục như thương mại điện tử, y tế hoặc tài chính, gián đoạn dịch vụ có thể gây tổn thất lớn và làm mất khách hàng.
5. Tấn công leo thang
Thông qua các lệnh độc hại như rm -rf
, kẻ tấn công có thể xóa các tệp quan trọng, khiến các dịch vụ ngừng hoạt động. Hậu quả bao gồm:
- Thời gian ngừng hoạt động gây tổn thất tài chính đáng kể.
- Suy giảm năng suất làm việc.
Trong các ngành yêu cầu dịch vụ liên tục như thương mại điện tử, y tế hoặc tài chính, gián đoạn dịch vụ có thể gây tổn thất lớn và làm mất khách hàng.
So sánh Code Injection với Command Injection
Code injection là một thuật ngữ chung cho bất kỳ loại tấn công nào liên quan đến việc chèn code đã được giải mã/thực thi bởi một app. Loại tấn công này lợi dụng việc xử lý sai các dữ liệu input không đáng tin cậy. Nó có thể xảy ra do thiếu xác thực input/output thích hợp.

Hạn chế chính của các cuộc tấn công code injection là chúng bị giới hạn trong app hoặc hệ thống mà chúng nhắm vào. Nếu hacker có thể đưa PHP code vào một app và thực thi nó, thì code độc này sẽ bị giới hạn bởi chức năng PHP và các quyền được cấp cho PHP trên server.
Command injection liên quan đến việc thực thi các lệnh trong system shell hoặc các thành phần khác. Hacker mở rộng chức năng mặc định của một ứng dụng dễ bị tấn công. Khiến nó chuyển các lệnh đến system shell mà không cần đưa code độc vào. Trong trường hợp nhiều lệnh, command injection cho phép hacker kiểm soát tốt hơn hệ thống của mục tiêu.
Ví dụ về lỗ hổng Command Injection
Dưới đây là ba ví dụ về cách một lỗ hổng app có thể dẫn đến các cuộc tấn công command injection. Những ví dụ này dựa trên code do OWASP cung cấp
Ví dụ 1: File name dưới dạng Command Argument
Đây là một ví dụ về chương trình cho phép người dùng từ xa xem nội dung của một file mà không thể sửa đổi hoặc xóa nó. Chương trình này chạy với quyền root:
int main(char* argc, char** argv) {
char cmd[CMD_MAX] = "/usr/bin/cat ";
strcat(cmd, argv[1]);
system(cmd);
}
Mặc dù chương trình có vẻ vô hại khi chỉ cho phép truy cập file ở chế độ read-only, nhưng nó lại hoàn toàn có thể dẫn đến tấn công command injection. Hacker có thể truyền đến một xâu như sau:
“abc.txt ;rm -rf /”
Call đến system() sẽ được thực hiện và sau đó hệ điều hành sẽ thực hiện xóa đệ quy của phân vùng root disk.
Ví dụ 2: Thao tác với biến của môi trường APPHOME
Đoạn code sau xác định thư mục cài đặt của một app nhất định bằng cách sử dụng biến của môi trường $APPHOME và chạy một lệnh trong thư mục đó.
...
char* home=getenv("APPHOME");
char* cmd=(char*)malloc(strlen(home)+strlen(INITCMD));
if (cmd) {
strcpy(cmd,home);
strcat(cmd,INITCMD);
execl(cmd, NULL);
}
...
Vấn đề là code không xác thực nội dung của script đã được khởi tạo. Nếu hacker quản lý để sửa đổi biến $APPHOME thành một path khác. Với phiên bản độc hại của script, thì code này sẽ chạy một script độc hại. Điều này tạo thành một cuộc tấn công command injection.
Ví dụ 3: Thao tác với biến $PATH
Code sau có thể được sử dụng trong chương trình để thay đổi password trên server và chạy với quyền root:
system("cd /var/yp && make &> /dev/null");
Phần có vấn đề của code này là việc sử dụng make. Mặc dù hacker không thể tự thay đổi code, vì nó không chấp nhận input của người dùng, chúng có thể sửa đổi biến $PATH. Điều này có thể khiến lệnh được thực thi theo một path khác do hacker kiểm soát. Trong path folder đó, hacker có thể tạo một phiên bản độc hại của make binary.
Bởi vì chương trình gốc có quyền root, phiên bản độc hại của make bây giờ sẽ được chạy với đặc quyền root.
Điểm mấu chốt của cả ba ví dụ này là bất kỳ lệnh nào invoke hàm ở các cấp độ như system() và execute() đều cung cấp quyền root cho các chương trình khác, hoặc những lệnh chạy bên trong nó.
Các phương pháp Command Injection

Dưới đây là một số lỗ hổng thường dẫn đến cuộc tấn công command injection
Arbitrary command injection
Một số app có thể cho phép người dùng chạy các lệnh tùy ý và chạy các lệnh này như là một host.
Arbitrary file uploads
Nếu một app cho phép người dùng tải lên các file có phần file extension, các file này có thể bao gồm các lệnh độc hại. Trên hầu hết các web server, việc đặt các file như vậy vào webroot sẽ dẫn đến command injection.
Insecure serialization
Server-side code thường được sử dụng để giải mã dữ liệu input của người dùng. Nếu quá trình giải mã hóa được thực hiện mà không có xác minh thích hợp những dữ liệu input, nó có thể dẫn đến command injection.
Server-side template injection (SSTI)
Nhiều web app sử dụng server side template để tạo ra các phản hồi HTML. Điều này làm cho hacker có thể chèn các server-side template độc hại. SSTI xảy ra khi input của người dùng được nhúng vào mẫu theo cách không an toàn và code được thực thi từ xa trên server.

XML external entity injection (XXE)
XXE xảy ra trong các app sử dụng trình phân tích cú pháp XML được cấu hình kém. Lỗ hổng này có thể gây ra lộ dữ liệu nhạy cảm, server-side request (SSRF) hay còn gọi là giả mạo yêu cầu từ phía server hoặc các cuộc tấn công DDoS – tấn công từ chối dịch vụ.
Cách ngăn chặn Command Injection
Dưới đây là một số phương pháp bạn có thể thực hiện để ngăn chặn command injection:
- Tránh call system và user input – Để ngăn các hacker chèn các ký từ vào OS command.
- Thiết lập xác thực cho input – Điều này để ngăn chặn các cuộc tấn công như XSS và SQL Injection.
- Tạo white list các input có thể có – Để đảm bảo hệ thống chỉ chấp nhận các input đã được phê duyệt từ trước.
- Chỉ sử dụng bảo mật API – Khi thực thi các lệnh trên hệ thống như executeFile().
- Sử dụng executeFile() một cách an toàn – Ngăn người dùng giành quyền kiểm soát tên của chương trình.
Vietnix – Đơn vị cho thuê VPS, Hosting bảo mật hàng đầu
Vietnix – Đơn vị dẫn đầu trong cung cấp các giải pháp công nghệ tại Việt Nam, tự hào với hơn 13 năm kinh nghiệm trong các mảng Hosting, VPS, Tên miền, Máy chủ và Firewall. Vietnix mang đến loạt dịch vụ tối ưu như Firewall độc quyền, VPS hiệu năng cao, Hosting ổn định cùng các giải pháp toàn diện khác, giúp doanh nghiệp vận hành hệ thống một cách bảo mật và hiệu quả nhất.
Vietnix không chỉ tập trung vào việc nâng cao chất lượng dịch vụ mà còn luôn coi sự hài lòng của khách hàng là mục tiêu hàng đầu. Với đội ngũ kỹ thuật dày dạn kinh nghiệm, hỗ trợ liên tục 24/7, chúng tôi đã xây dựng niềm tin vững chắc từ hơn 80.000 đối tác doanh nghiệp trong và ngoài nước.
Thông tin liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
- Website: https://vietnix.vn
Câu hỏi thường gặp
Làm thế nào để nhận biết ứng dụng web có nguy cơ bị Command Injection?
Ứng dụng có nguy cơ nếu xử lý dữ liệu đầu vào không kiểm tra kỹ, đặc biệt khi sử dụng đầu vào người dùng để gọi lệnh hệ thống mà không có biện pháp lọc hoặc xác thực.
Những ngôn ngữ lập trình hoặc môi trường nào dễ bị Command Injection hơn và vì sao?
Ngôn ngữ như PHP, Python, hoặc môi trường shell (bash) dễ bị ảnh hưởng, do chúng hỗ trợ gọi lệnh hệ thống trực tiếp, và việc xử lý đầu vào không an toàn có thể dẫn đến khai thác.
Biện pháp phòng chống Command Injection hiệu quả nhất là gì?
Phòng chống bằng cách tránh gọi lệnh hệ thống, sử dụng API bảo mật, xác thực và lọc đầu vào, tạo danh sách trắng cho dữ liệu hợp lệ và hạn chế quyền truy cập của ứng dụng.
Sự khác biệt giữa Command Injection và các loại Injection khác là gì?
Command Injection tác động trực tiếp lên hệ điều hành, trong khi SQL Injection nhắm vào cơ sở dữ liệu và Cross-Site Scripting (XSS) khai thác trình duyệt của người dùng.
Công cụ tự động nào hỗ trợ phát hiện lỗ hổng Command Injection?
Các công cụ như Burp Suite, OWASP ZAP, và Nikto có thể phát hiện Command Injection thông qua quét bảo mật và kiểm tra lỗ hổng tự động.
Với những nguy cơ nghiêm trọng mà Command Injection có thể gây ra, việc hiểu rõ lỗ hổng này và áp dụng các biện pháp phòng ngừa là vô cùng quan trọng để bảo vệ hệ thống của bạn. Hy vọng những chia sẻ trên đã giúp bạn nắm bắt được các thông tin cần thiết Command Injection là gì, từ cách thức hoạt động, ví dụ thực tế đến các phương pháp ngăn chặn hiệu quả. Để tìm hiểu thêm về các lỗ hổng bảo mật khác cũng như cách bảo vệ hệ thống, bạn có thể tham khảo một số bài viết dưới đây của mình: