Lỗ hổng libpng CVE-2026-25646: Nguy hiểm tràn bộ đệm Heap

Một lỗ hổng libpng nghiêm trọng đã được phát hiện trong libpng, thư viện tham chiếu PNG chính thức. Thư viện này được sử dụng rộng rãi bởi hầu hết các hệ điều hành và trình duyệt web hiện có, làm tăng mức độ rủi ro.
Đối với các nhà phát triển và quản trị viên hệ thống, việc hiểu rõ lỗ hổng libpng này là cực kỳ quan trọng để đảm bảo an toàn cho các ứng dụng và hạ tầng.
Phân tích Chi tiết Lỗ hổng CVE-2026-25646
Lỗ hổng này, được gán mã CVE-2026-25646, là một lỗi tràn bộ đệm heap (heap buffer overflow) nằm trong hàm png_set_quantize(). Lỗi này cho phép kẻ tấn công gây sập ứng dụng (Denial of Service – DoS) hoặc có khả năng thực thi mã tùy ý từ xa (Remote Code Execution – RCE).
Để biết thêm thông tin về CVE này, bạn có thể tham khảo NVD.NIST.GOV.
Điều đáng chú ý là lỗ hổng CVE-2026-25646 đã tồn tại từ khi hàm được tạo ra (trước đây có tên là png_set_dither()). Điều này có nghĩa là tất cả các phiên bản trước của thư viện đều bị ảnh hưởng.
Các nhà bảo trì đã phát hành libpng 1.6.55 để vá lỗi, và khuyến nghị nâng cấp ngay lập tức là bắt buộc để khắc phục lỗ hổng libpng này.
Cơ chế hoạt động của `png_set_quantize()`
Lỗ hổng cư trú trong hàm png_set_quantize(), một API cấp thấp được thiết kế để giảm số lượng màu trong một hình ảnh (quá trình lượng tử hóa – quantization). Mục đích là để hình ảnh phù hợp với khả năng hiển thị của thiết bị.
Một lỗi logic cụ thể cho phép kẻ tấn công buộc hàm này vào một vòng lặp vô hạn. Vòng lặp này cuối cùng sẽ đọc vượt quá giới hạn của một vùng đệm được cấp phát trên heap.
Chi tiết Lỗi Logic và Điều kiện Kích hoạt
Các điều kiện kích hoạt lỗ hổng heap buffer overflow này rất nghiêm ngặt nhưng vẫn hợp lệ theo thông số kỹ thuật PNG:
- Lỗ hổng phát sinh từ sự không khớp tinh tế trong cách xử lý các chỉ mục màu trong thuật toán lượng tử hóa “màu gần nhất”.
- Để tối ưu hóa việc giảm bảng màu,
png_set_quantize()nhóm các màu tương tự bằng chỉ số “khoảng cách màu”. Chỉ số này là tổng của các giá trị tuyệt đối khác nhau trong các kênh RGB. - Hàm này xây dựng một bảng băm (hash table), về cơ bản là một mảng các danh sách liên kết, ánh xạ các khoảng cách này tới các cặp màu trong bảng màu.
Khai thác Tồn tại như thế nào?
Sự cố nghiêm trọng xảy ra trong cách bảng băm này được điền so với cách nó được truy cập.
Do mã hiểu sai các chỉ mục “hiện tại” là các chỉ mục “ban đầu”, các kiểm tra tính hợp lệ bị lỗi. Điều này khiến thuật toán không thể xác định các màu có thể loại bỏ, và vòng lặp tiếp tục vô thời hạn.
Biến max_d (khoảng cách tìm kiếm tối đa) tăng lên trong nỗ lực tìm thêm các ứng viên. Cuối cùng, nó vượt quá kích thước cố định của bảng băm (769 con trỏ). Điều này buộc chương trình đọc bộ nhớ vượt quá vùng đệm đã được cấp phát.
Để hiểu rõ hơn về loại lỗ hổng này, bạn có thể tham khảo thêm tại CWE-122: Heap-based Buffer Overflow.
Tác động và Rủi ro An ninh mạng
Trong kịch bản có nhiều khả năng nhất, lỗ hổng libpng này gây ra sự cố ứng dụng xác định (Denial of Service – DoS) khi ứng dụng cố gắng đọc bộ nhớ chưa được ánh xạ.
Tuy nhiên, khuyến cáo từ nhà phát triển cảnh báo rằng tác động có thể nghiêm trọng hơn nhiều:
- Thực thi mã tùy ý từ xa (RCE): Mặc dù điều kiện kích hoạt chặt chẽ, khả năng thực thi mã tùy ý vẫn tồn tại. Điều này cho phép kẻ tấn công chiếm quyền điều khiển hệ thống bị ảnh hưởng.
- Rò rỉ dữ liệu nhạy cảm: Việc đọc bộ nhớ ngoài giới hạn có thể dẫn đến việc tiết lộ thông tin nhạy cảm từ các vùng bộ nhớ lân cận.
- Ảnh hưởng diện rộng: Với việc libpng được sử dụng rộng rãi trong các hệ điều hành, trình duyệt web và các ứng dụng xử lý hình ảnh, phạm vi ảnh hưởng của lỗ hổng libpng này là rất lớn.
- Các hệ thống không được vá lỗi sẽ đối mặt với rủi ro bảo mật nghiêm trọng và có thể trở thành mục tiêu của các cuộc tấn công mạng.
Tham khảo cảnh báo bảo mật chính thức từ GitHub về lỗ hổng này tại GHSA-g8hp-mq4h-rqm3.
Biện pháp Khắc phục và Cập nhật Bản vá
Giải pháp khắc phục bao gồm việc sửa đổi logic điền bảng băm để lưu trữ các chỉ mục màu gốc. Điều này đảm bảo tính nhất quán với phần còn lại của logic hàm. Bản vá này đã được tích hợp trong libpng 1.6.55.
Các nhà phát triển và người dùng được khuyến nghị mạnh mẽ nâng cấp lên phiên bản 1.6.55 ngay lập tức. Tính phổ biến của libpng biến nó thành một mục tiêu có giá trị cao cho việc phát triển khai thác, làm tăng tầm quan trọng của việc vá lỗi bảo mật kịp thời.
Kiểm tra và Nâng cấp Libpng trên Hệ thống
Để đảm bảo an ninh mạng cho hệ thống, hãy kiểm tra phiên bản libpng đang sử dụng và thực hiện nâng cấp. Các lệnh sau có thể được dùng để kiểm tra và cập nhật trên các hệ thống phổ biến:
Trên Debian/Ubuntu:
dpkg -s libpng-devsudo apt updatesudo apt install --only-upgrade libpng-devTrên CentOS/RHEL:
rpm -q libpngsudo yum update libpngTrên Fedora:
rpm -q libpngsudo dnf update libpngĐối với các ứng dụng tự biên dịch hoặc nhúng libpng:
- Cần kiểm tra mã nguồn hoặc tài liệu của ứng dụng để xác định phiên bản libpng được sử dụng.
- Thực hiện biên dịch lại ứng dụng với phiên bản libpng 1.6.55 hoặc mới hơn.
Việc cập nhật bản vá là bước thiết yếu để bảo vệ hệ thống khỏi CVE-2026-25646 và các nguy cơ tiềm ẩn khác do lỗ hổng libpng gây ra.







