Lỗ hổng CVE LibPNG nghiêm trọng: Nguy cơ chiếm quyền RCE

Lỗ hổng CVE LibPNG nghiêm trọng: Nguy cơ chiếm quyền RCE

Hai lỗ hổng CVE nghiêm trọng đã được phát hiện trong libpng, thư viện tham chiếu được sử dụng rộng rãi để đọc và ghi ảnh định dạng PNG. Các lỗ hổng này mở ra con đường cho kẻ tấn công để kích hoạt lỗi sập tiến trình, rò rỉ thông tin nhạy cảm, và tiềm ẩn khả năng thực thi mã tùy ý từ xa (remote code execution) thông qua việc xử lý một tệp PNG được chế tạo đặc biệt.

Những vấn đề này tác động đến mọi phần mềm có khả năng phân tích và xử lý hình ảnh bị lỗi, do đó đặt ra một mối đe dọa mạng đáng kể cho các ứng dụng web, hệ thống nhúng và các pipeline xử lý hình ảnh phía máy chủ.

Phân Tích Chi Tiết Lỗ Hổng CVE-2026-33416: Use-After-Free do Pointer Aliasing

Lỗ hổng đầu tiên, được theo dõi với mã định danh CVE-2026-33416, được phân loại là một lỗi Use-After-Free (UAF). Lỗi này phát sinh từ một vấn đề liên quan đến pointer aliasing trong quản lý bộ nhớ nội bộ của libpng.

Nguyên Nhân Gốc Rễ của Lỗ Hổng CVE-2026-33416

Trong các phiên bản libpng lên đến 1.6.55, một số hàm thiết lập bộ nhớ được thiết kế để chia sẻ một vùng cấp phát bộ nhớ duy nhất.

Vùng bộ nhớ này được tham chiếu bởi hai cấu trúc nội bộ khác nhau, mỗi cấu trúc có một vòng đời độc lập riêng biệt. Vấn đề cốt lõi nảy sinh khi quản lý vòng đời của các con trỏ này không đồng bộ.

Khi một ứng dụng gọi một hàm để giải phóng vùng bộ nhớ chung này, một con trỏ được đặt về trạng thái đã xóa, trong khi con trỏ thứ hai vẫn còn tồn tại và trỏ đến vùng bộ nhớ đã được giải phóng (trạng thái dangling pointer).

Nếu các hoạt động tiếp theo trên các phép biến đổi hàng hình ảnh vô tình sử dụng con trỏ dangling này, chương trình sẽ cố gắng truy cập vào một vùng bộ nhớ không còn hợp lệ.

Cơ Chế Khai Thác và Tác Động Tiềm Tàng

Kẻ tấn công có khả năng kiểm soát một cách tinh vi các giá trị minh bạch (transparency values) bên trong tệp PNG được chế tạo.

Điều này cho phép chúng kiểm soát một cách xác định và chính xác các giá trị dữ liệu được ghi vào bộ đệm bộ nhớ đã được giải phóng nhưng vẫn đang được tham chiếu bởi con trỏ dangling.

Việc kiểm soát dữ liệu trong một vùng bộ nhớ đã được giải phóng nhưng có thể được tái cấp phát cho mục đích khác sẽ dẫn đến tình trạng heap corruption (hỏng bộ nhớ heap).

Heap corruption là một lỗ hổng nghiêm trọng, có thể dẫn đến việc ghi đè lên các cấu trúc dữ liệu quan trọng hoặc các con trỏ hàm, từ đó cho phép chiếm quyền điều khiển thực thi mã tùy ý trên hệ thống.

Đặc biệt, các hệ thống thiếu các biện pháp bảo vệ bộ nhớ hiện đại như PIE (Position-Independent Executable) hoặc ASLR (Address Space Layout Randomization) sẽ đặc biệt dễ bị tổn thương. Điều này thường thấy ở các hệ thống kế thừa (legacy systems) và thiết bị nhúng.

Một khía cạnh đáng lo ngại khác là tệp PNG độc hại được chế tạo hoàn toàn tuân thủ các tiêu chuẩn kỹ thuật. Điều này có nghĩa là các tường lửa ứng dụng web (WAF) thông thường, dựa trên các quy tắc hoặc chữ ký, có thể không thể phát hiện và chặn payload độc hại mà không đồng thời từ chối cả các hình ảnh hợp lệ khác, gây ra rủi ro bảo mật cao.

Lỗ Hổng CVE-2026-33636: Out-of-Bounds Read/Write trên Kiến Trúc ARM

Lỗ hổng thứ hai, được định danh là CVE-2026-33636, là một vấn đề out-of-bounds read and write (đọc và ghi ngoài giới hạn bộ nhớ).

Nguồn Gốc và Phạm Vi Ảnh Hưởng của Lỗ Hổng CVE-2026-33636

Lỗ hổng CVE nghiêm trọng này đặc biệt ảnh hưởng đến các kiến trúc phần cứng ARMAArch64. Đây là những kiến trúc phổ biến trong nhiều thiết bị di động, hệ thống nhúng và máy chủ.

Vấn đề nằm trong mã mở rộng bảng màu (palette expansion code) được tối ưu hóa cho ARM Neon, một tập lệnh SIMD (Single Instruction Multiple Data) được thiết kế để tăng tốc xử lý dữ liệu đa phương tiện và tín hiệu. Mã này được giới thiệu trong phiên bản libpng 1.6.36.

Cơ Chế Vận Hành và Hậu Quả của Lỗ Hổng

Trong quá trình mở rộng các hàng bảng màu 8-bit, vòng lặp xử lý được thiết kế để tiến hành theo các khối có kích thước cố định, tận dụng hiệu quả của các tập lệnh Neon.

Tuy nhiên, mã nguồn không thực hiện kiểm tra đầy đủ để xác minh xem còn đủ pixel đầu vào cho lần lặp cuối cùng của vòng lặp hay không. Đây là một lỗi điều kiện biên (boundary condition error).

Do logic chương trình hoạt động ngược từ cuối bộ đệm hàng, lần lặp cuối cùng của vòng lặp sẽ cố gắng đọc và ghi vào các địa chỉ bộ nhớ ngay trước ranh giới bắt đầu của bộ đệm dự định. Hiện tượng này được gọi là underflow.

Lỗi underflow này gây ra các thao tác đọc ngoài giới hạn (out-of-bounds reads), có khả năng làm rò rỉ dữ liệu nhạy cảm từ các vùng bộ nhớ heap liền kề. Thông tin rò rỉ có thể bao gồm khóa mã hóa, con trỏ nội bộ hoặc dữ liệu ứng dụng khác.

Đồng thời, lỗi này cũng gây ra các thao tác ghi ngoài giới hạn (out-of-bounds writes) làm hỏng bộ nhớ heap liền kề, có thể dẫn đến lỗi sập chương trình hoặc các hành vi không mong muốn khác.

Mặc dù việc chiếm quyền điều khiển thực thi mã tùy ý trực tiếp chưa được chứng minh đối với lỗi cụ thể này, khả năng gây ra lỗi sập tiến trình một cách đáng tin cậy là điều dễ dàng đạt được. Điều này biến lỗ hổng thành một rủi ro an toàn thông tin nghiêm trọng, ảnh hưởng đến tính khả dụng của hệ thống.

Biện Pháp Khắc Phục và Cập Nhật Bản Vá Bảo Mật

Các quản trị viên hệ thống và nhà phát triển ứng dụng được khuyến nghị mạnh mẽ nên tiến hành cập nhật bản vá các gói libpng của họ lên các phiên bản đã được vá lỗi mới nhất là 1.6.56 hoặc 1.8.0 ngay lập tức.

Cập Nhật Ưu Tiên để Giải Quyết Lỗ Hổng

Các bản vá bảo mật này đã được phát hành để giải quyết triệt để các vấn đề đã nêu. Đối với lỗi Use-After-Free (CVE-2026-33416), các bản cập nhật cung cấp các bản sao được cấp phát độc lập của các con trỏ bị ảnh hưởng, đảm bảo mỗi cấu trúc có quyền sở hữu bộ nhớ riêng biệt và vòng đời không bị trùng lặp.

Đối với lỗ hổng out-of-bounds read/write (CVE-2026-33636), các bản vá đã sửa lỗi giới hạn vòng lặp trong các tối ưu hóa phần cứng ARM Neon. Điều này ngăn chặn việc truy cập bộ nhớ ngoài giới hạn, loại bỏ nguy cơ rò rỉ dữ liệu và hỏng bộ nhớ.

Giải Pháp Tạm Thời cho CVE-2026-33636

Trong trường hợp việc nâng cấp thư viện không thể thực hiện ngay lập tức do các hạn chế về môi trường hoặc quy trình, các tổ chức có thể áp dụng một giải pháp tạm thời (workaround) cho CVE-2026-33636.

Giải pháp này bao gồm việc biên dịch lại libpng hoàn toàn với các tối ưu hóa phần cứng bị vô hiệu hóa. Điều này sẽ loại bỏ mã Neon bị lỗi, từ đó ngăn chặn lỗ hổng.

Chi tiết về tư vấn bảo mật và các giải pháp có thể tham khảo tại nguồn đáng tin cậy sau: GitHub Security Advisory GHSA-wjr5-c57x-95m2.

Tuy nhiên, các quản trị viên cần lưu ý rằng việc vô hiệu hóa các tối ưu hóa phần cứng có thể dẫn đến giảm đáng kể hiệu suất xử lý hình ảnh, đặc biệt trên các nền tảng dựa trên ARM. Do đó, đây chỉ nên được coi là một giải pháp tạm thời trong khi chờ đợi khả năng triển khai các bản vá bảo mật chính thức.