-
09/04/2020
-
128
-
1.757 bài viết
Hai lỗ hổng nghiêm trọng trong libpng đe dọa hàng loạt ứng dụng xử lý ảnh
Một thư viện xử lý ảnh quen thuộc tưởng chừng vô hại lại vừa trở thành điểm yếu nguy hiểm trong nhiều hệ thống. Các nhà nghiên cứu bảo mật vừa phát hiện hai lỗ hổng nghiêm trọng trong libpng - thư viện chuẩn được sử dụng rộng rãi để xử lý ảnh PNG trên nhiều ứng dụng và nền tảng. Với mức độ ảnh hưởng cao và phạm vi triển khai rộng, các vấn đề này đang đặt ra rủi ro đáng kể cho nhiều hệ thống chưa được cập nhật.
Cả hai lỗ hổng đều có thể bị khai thác từ xa thông qua các file PNG được tạo đặc biệt nhưng vẫn tuân thủ chuẩn. Khi ứng dụng xử lý những file này, kẻ tấn công có thể gây crash tiến trình, rò rỉ dữ liệu nhạy cảm trong bộ nhớ heap, thậm chí trong một số điều kiện nhất định có thể tiến tới thực thi mã tùy ý. Giới chuyên gia cảnh báo cần vá lỗi ngay lập tức để hạn chế rủi ro lan rộng.
Lỗ hổng đầu tiên là CVE-2026-33416 với điểm CVSS 8.1, xuất phát từ lỗi use-after-free trong cơ chế xử lý độ trong suốt và bảng màu. Các hàm như png_set_tRNS và png_set_PLTE đã sử dụng chung một vùng nhớ heap giữa hai cấu trúc png_struct và png_info, trong khi hai cấu trúc này lại có vòng đời quản lý bộ nhớ độc lập. Khi một cấu trúc giải phóng vùng nhớ, cấu trúc còn lại vẫn giữ con trỏ treo trỏ tới vùng đã bị giải phóng.
Ở các bước xử lý tiếp theo, đặc biệt khi biến đổi các dòng ảnh, chương trình vẫn truy cập vào con trỏ này. Do dữ liệu trong chunk transparency của file PNG hoàn toàn do kẻ tấn công kiểm soát, chúng có thể điều khiển chính xác dữ liệu được ghi vào vùng nhớ đã giải phóng. Điều này dẫn đến việc dữ liệu nhạy cảm trong bộ nhớ có thể bị lộ ra ngoài, đồng thời cấu trúc heap có thể bị ghi đè và phá vỡ.
Trên những hệ thống thiếu cơ chế bảo vệ bộ nhớ hiện đại như PIE hoặc ASLR, đặc biệt là hệ thống nhúng hoặc máy chủ cũ, lỗi này đã được chứng minh có thể bị khai thác để thực thi mã tùy ý. Phạm vi ảnh hưởng trải dài từ libpng phiên bản 1.2.1 đến 1.6.55.
Lỗ hổng thứ hai, CVE-2026-33636 với điểm CVSS 7.1, là lỗi đọc và ghi ngoài vùng nhớ trong các đoạn mã tối ưu hóa bằng Neon cho kiến trúc ARM/AArch64. Khi thực hiện chuyển đổi ảnh từ bảng màu 8-bit sang định dạng màu tiêu chuẩn, vòng lặp xử lý đã không kiểm tra chính xác lượng dữ liệu đầu vào còn lại. Ở vòng lặp cuối, con trỏ bị truy cập vượt khỏi vùng dữ liệu hợp lệ, thậm chí trỏ ngược về trước buffer ảnh.
Hệ quả là dữ liệu bảng màu do kẻ tấn công kiểm soát có thể bị ghi vào các vị trí bộ nhớ sai lệch, dẫn đến hỏng heap. Dù chưa có bằng chứng khai thác để thực thi mã, lỗi này có thể dễ dàng khiến tiến trình bị crash, gây ra tình trạng từ chối dịch vụ. Ngoài ra, việc đọc ngoài vùng nhớ cũng có thể làm lộ dữ liệu nhạy cảm thông qua dữ liệu pixel đã giải mã. Lỗ hổng này chỉ ảnh hưởng tới các hệ thống ARM/AArch64 có bật tối ưu Neon, trong các phiên bản từ 1.6.36 đến 1.6.55.
Các tổ chức và nhà phát triển được khuyến nghị nâng cấp ngay lên libpng phiên bản 1.6.56 hoặc nhánh phát triển 1.8.0. Bản vá đã xử lý triệt để vấn đề bằng cách tách biệt vòng đời bộ nhớ giữa các cấu trúc và bổ sung kiểm soát chặt chẽ giới hạn vòng lặp. Với việc libpng được tích hợp sâu trong nhiều phần mềm, từ trình duyệt, hệ thống xử lý ảnh đến thiết bị nhúng, việc chậm trễ cập nhật có thể khiến những file PNG tưởng như vô hại trở thành công cụ tấn công hiệu quả.
Theo Cyber Press