wpd: Bộ giải mã WebP viết bằng Rust nhanh hơn và an toàn bộ nhớ hơn libwebp

Công nghệ03 tháng 10, 2026·5 phút đọc

wpd là bộ giải mã WebP mới được viết bằng Rust, được thiết kế để khắc phục các lỗ hổng an toàn bộ nhớ như CVE-2023-4863 từng ảnh hưởng đến hàng tỷ thiết bị. Không chỉ an toàn hơn, wpd còn nhanh hơn libwebp tới 3,19 lần ở chế độ đa luồng và hỗ trợ đầy đủ các tính năng của chuẩn WebP.

wpd: Bộ giải mã WebP viết bằng Rust nhanh hơn và an toàn bộ nhớ hơn libwebp

wpd: Bộ giải mã WebP viết bằng Rust nhanh hơn và an toàn bộ nhớ hơn libwebp

wpd là một bộ giải mã WebP mới được viết bằng Rust, hứa hẹn thay thế libwebp với hiệu năng vượt trội và khả năng chống chịu các lỗ hổng an toàn bộ nhớ tốt hơn. Dự án ra đời nhằm giải quyết vấn đề nhức nhối đã tồn tại nhiều năm trong các thư viện xử lý ảnh, đặc biệt sau sự cố CVE-2023-4863 từng ảnh hưởng đến hàng tỷ thiết bị trên toàn cầu.

Minh họa bộ giải mã WebP an toàn bộ nhớMinh họa bộ giải mã WebP an toàn bộ nhớ

Vì sao an toàn bộ nhớ lại quan trọng đến vậy?

Các thư viện giải mã và xử lý ảnh có mặt ở khắp mọi nơi, từ tầng hệ điều hành cho đến các tiến trình trình duyệt được cách ly. Chúng thường xuyên phải xử lý dữ liệu đầu vào phức tạp và không đáng tin cậy — chính là điều kiện lý tưởng để các lỗi an toàn bộ nhớ phát sinh.

Lỗ hổng CVE-2023-4863 là ví dụ điển hình. Nó ảnh hưởng đến Chrome, Firefox, Signal, Microsoft Teams và nhiều ứng dụng khác, với hàng tỷ thiết bị có nguy cơ bị khai thác. Cơ quan An ninh mạng và Hạ tầng Hoa Kỳ (CISA) đã xác nhận lỗ hổng này bị khai thác thực tế trên diện rộng và bổ sung nó vào danh mục Known Exploited Vulnerabilities.

Theo nhóm phát triển Chromium, khoảng 70% lỗi bảo mật nghiêm trọng của họ bắt nguồn từ các vấn đề an toàn bộ nhớ.

Việc libwebp được kiểm thử kỹ càng hơn không có nghĩa là nó đã "giải quyết" được vấn đề. Bản chất của C khiến các lỗi an toàn bộ nhớ vẫn luôn rình rập.

wpd giải quyết bài toán này như thế nào?

wpd được viết bằng Rust, với các đoạn hợp ngữ (assembly) thủ công chỉ dùng cho mục đích hiệu năng. Các đoạn SIMD viết tay được giới hạn phạm vi cẩn thận và kiểm tra tính đúng đắn, đồng thời được đặt ở những vị trí ít rủi ro hơn.

Đối với người dùng muốn tăng cường bảo mật tối đa, wpd có thể được biên dịch mà không cần hợp ngữ viết tay. Khi đó, toàn bộ mã phi SIMD đều được chứng minh là an toàn bộ nhớ, chỉ còn duy nhất đoạn mã unsafe nằm trong crate zerocopy đã được thẩm định kỹ. Đây là bước tiến đáng kể so với libwebp — vốn được viết hoàn toàn bằng C không an toàn với các intrinsic SIMD.

Hiệu năng vượt trội

An toàn hơn là chưa đủ. wpd còn phải nhanh hơn, và nó đã làm được điều đó. Kết quả đo đạc trên bộ dữ liệu kiểm thử của nhà phát triển cho thấy:

  • 1 luồng, lossy: nhanh hơn 1,19 lần
  • 1 luồng, lossless: nhanh hơn 2,74 lần
  • Đa luồng, lossy: nhanh hơn 2,68 lần
  • Đa luồng, lossless: nhanh hơn 3,19 lần

Do bộ kiểm thử trộn lẫn nội dung WebP động (animation) với ảnh tĩnh, kết quả đa luồng tận dụng được khả năng giải mã song song nên đạt mức tăng ấn tượng hơn. Trong khi đó, lợi thế ở chế độ đơn luồng là cải tiến thuần túy về thuật toán.

Tính năng tương đương và vượt trội so với libwebp

wpd đặt mục tiêu đạt tính năng tương đương với libwebp — bởi mọi trường hợp sử dụng libwebp đều xứng đáng được nâng cấp. So với thư viện image-webp, wpd là bộ thay thế libwebp thực thụ, kèm theo một số tính năng bổ sung:

Các tính năng cốt lõi được hỗ trợ:

  • WebP lossy và lossless
  • Độ trong suốt alpha (alpha transparency)
  • Ảnh động với các khung được tổng hợp (composited frames)
  • Thời lượng ảnh động và số lần lặp
  • Trích xuất siêu dữ liệu ICC, EXIF và XMP
  • Xuất RGB/RGBA, BGR/BGRA/ARGB, YUV420P, YUVA420P
  • Xuất alpha nhân trước (premultiplied alpha)
  • Xuất RGB565, RGBA4444, BGR565, BGRA4444
  • Cắt (crop) và thay đổi kích thước (scale) tích hợp sẵn
  • Tự động giữ tỷ lệ khung hình khi scale
  • Lật dọc ảnh
  • Giải mã tăng dần (incremental decoding)
  • Bộ đệm đầu ra do bên gọi quản lý

Điểm khác biệt so với libwebp:

  • Giải mã song song trước các khung ảnh động
  • Giới hạn số pixel cấu hình được trước khi cấp phát/giải mã khung
  • Cả API Rust lẫn ABI C
  • Lựa chọn chế độ lấy mẫu màu (chroma upsampling) đơn giản hoặc nâng cao

Định hướng phát triển

Đây là dự án mã nguồn mở thứ ba của nhóm phát triển, sau fcvvdp và fmetrics. Với wpd, họ chính thức có nhiều dự án mã nguồn mở lớn hơn cả dự án đóng (Iris-WebP và Aperture chưa phát hành). Nhóm cho biết muốn tỷ lệ này ngày càng nghiêng về mã nguồn mở trong tương lai.

wpd được phát hành dưới giấy phép BSD 2-Clause — giấy phép mã nguồn mở thoáng nhất mà nhóm có thể áp dụng. Họ cũng đang tìm kiếm hợp tác với các công ty an ninh mạng để cùng bảo vệ những phần mềm quan trọng nhất của thế giới.

Dự án muốn mọi người dùng wpd miễn phí ngay hôm nay. Nếu có bất cứ điều gì cản trở bạn, hãy cho họ biết.

Với cộng đồng phát triển web và bảo mật, wpd là một lựa chọn đáng cân nhắc — đặc biệt trong bối cảnh các lỗ hổng từ thư viện xử lý ảnh ngày càng trở thành mối đe dọa nghiêm trọng đối với hạ tầng số toàn cầu.

Mã nguồn: github.com/halidecx/wpd

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗