corazawaf Coraza WAF không đánh dấu multipart body bị cắt ngắn, cho phép bypass do bất đồng parser

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-41508 là gì?

Lỗ hổng CVE-2026-41508 là lỗ hổng thuộc các loại Protection Mechanism Failure và Improper Handling of Exceptional Conditions, ảnh hưởng tới coraza (phiên bản bị ảnh hưởng: >= 3.4.0, < 3.8.0). Lỗ hổng này được xếp hạng ở mức Trung bình, với điểm CVSS 5.8. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

OWASP Coraza WAF là một thư viện tường lửa ứng dụng web tương thích với modsecurity viết bằng Go. Từ 3.4.0 đến trước 3.8.0, multipart processor trong internal/bodyprocessors/multipart.go coi io.ErrUnexpectedEOF là không nghiêm trọng nhưng không đặt MULTIPART_STRICT_ERROR. Kẻ tấn công từ xa có thể gửi một multipart body bị cắt ngắn tạo ra io.ErrUnexpectedEOF, khiến parsing dừng lại mà không phát sinh strict-error signal được rule phòng vệ khuyến nghị sử dụng. Các rule 200002 và 200003 không kích hoạt, cho phép các payload gây bất đồng giữa các multipart parser đi đến backend, nơi diễn giải body bị cắt ngắn theo cách khác. Lỗi này được sửa trong version 3.8.0.

Sản phẩm và phạm vi ảnh hưởng

  • Package github.com/corazawaf/coraza/v3 của corazawaf Coraza bị ảnh hưởng trong phạm vi >= 3.4.0, < 3.8.0.
  • Advisory của vendor biểu thị cùng phạm vi release là >= 3.4.0, <= 3.7.0.
  • Lỗi được sửa trong 3.8.0. Không nên suy ra trạng thái của các nhánh release khác nếu chưa được xác minh.
  • Advisory cho biết các release trước 3.4.0 dùng hành vi khác và không thể hiện bypass này; kết luận đó chỉ áp dụng cho bypass được mô tả ở đây.

Chi tiết kỹ thuật

Thành phần bị ảnh hưởng là multipart processor trong internal/bodyprocessors/multipart.go. Khi đọc file part hoặc field part gặp io.ErrUnexpectedEOF, code xử lý lỗi này như điều kiện không nghiêm trọng nhưng không đặt MULTIPART_STRICT_ERROR. Ở ba nhánh xử lý, việc này cho phép parser dừng trên body chưa hoàn chỉnh; hàm vẫn có thể trả về thành công thay vì báo lỗi body. Vì vậy, REQBODY_ERROR cũng không được truyền lên và hai rule phòng vệ chuẩn 200002 và 200003 trong coraza.conf-recommended không kích hoạt. Kẻ tấn công cần gửi một multipart body bị cắt ngắn đến đường dẫn được Coraza bảo vệ; nếu backend dùng parser có cách diễn giải khác, các field hoặc payload mà Coraza không kiểm tra đầy đủ có thể vẫn được backend xử lý. Hành vi cụ thể của backend phụ thuộc vào parser và integration được triển khai.

Khả năng khai thác

Lỗi có thể bị kích hoạt từ xa qua mạng bằng cách gửi một HTTP request có multipart body bị cắt ngắn. Điều kiện được ghi nhận không yêu cầu authentication hoặc user interaction và không phụ thuộc vào thao tác của người dùng cuối. Payload cần tạo ra io.ErrUnexpectedEOF, nhưng chi tiết parser của backend quyết định liệu có xảy ra parser disagreement thực tế hay không. Record được cung cấp đánh dấu public exploit là false; trạng thái khai thác thực tế không được xác định vì trường known exploited không có giá trị.

Tác động kỹ thuật

Kết quả kỹ thuật là một validation bypass giữa WAF và thành phần backend: Coraza có thể tiếp tục xử lý body đáng lẽ phải tạo strict error, trong khi backend có thể phân tích body đó theo cách khác. Điều này có thể dẫn đến thay đổi integrity hoặc vượt qua kiểm tra bảo mật ở thành phần phía sau, tùy endpoint và parser backend. Tác động có scope vượt ra ngoài WAF vì hậu quả có thể xuất hiện ở backend, nhưng không có bằng chứng cho thấy lỗi này tự nó gây mất confidentiality hoặc availability. Khai thác không yêu cầu quyền trước hoặc tương tác người dùng, nhưng cần một đường dẫn xử lý multipart và một khác biệt diễn giải có thể tận dụng được.

Tác động đến tổ chức

  • Request multipart không hợp lệ mà WAF dự định từ chối có thể tiếp tục đến backend.
  • Nếu parser của backend chấp nhận hoặc tách field khác với Coraza, attacker có thể đạt được rule bypass hoặc làm thay đổi dữ liệu đầu vào mà ứng dụng xử lý.
  • Hậu quả nghiệp vụ có thể bao gồm thay đổi trạng thái hoặc thực hiện thao tác trái phép ở các endpoint phụ thuộc vào multipart data, nhưng điều này phụ thuộc vào backend và logic ứng dụng.
  • Bằng chứng hiện có không xác nhận rò rỉ dữ liệu, gián đoạn dịch vụ, breach cụ thể hoặc nạn nhân cụ thể.

Cách khắc phục

  1. Nâng cấp package Coraza lên 3.8.0, là release được xác nhận đã sửa lỗi. Không coi đây là khẳng định rằng mọi release tương lai hoặc mọi nhánh song song đều đã được xác minh.
  2. Nếu chưa thể nâng cấp, áp dụng thay đổi mã tại internal/bodyprocessors/multipart.go để đặt MULTIPART_STRICT_ERROR khi gặp io.ErrUnexpectedEOF tại cả ba điểm xử lý, đồng thời giữ nguyên semantics không fatal cần cho ProcessPartial.
  3. Xác nhận coraza.conf-recommended hoặc policy tương đương vẫn thực thi rule 200002 cho REQBODY_ERROR và rule 200003 cho MULTIPART_STRICT_ERROR.
  4. Với deployment cố ý cho phép partial processing, rà soát policy của rule 200003. Advisory nêu các lựa chọn gồm chuyển rule sang detection-only hoặc giới hạn việc cho phép dựa trên việc request-body limit thực sự có bị chạm hay không.
  5. Kiểm thử lại các multipart body chưa hoàn chỉnh trong staging và xác nhận WAF, rule engine và backend có cùng quyết định từ chối hoặc xử lý request.

Cách phát hiện

  • Kiểm kê các deployment sử dụng package github.com/corazawaf/coraza/v3 và đối chiếu version với phạm vi bị ảnh hưởng trong phần affected summary.
  • Kiểm tra mã hoặc binary tương ứng để xác định cách internal/bodyprocessors/multipart.go xử lý io.ErrUnexpectedEOF, đặc biệt tại các nhánh file và field multipart.
  • Xác nhận cấu hình đã nạp và thực thi các rule 200002 và 200003, đồng thời kiểm tra telemetry cho REQBODY_ERROR và MULTIPART_STRICT_ERROR khi xử lý body lỗi.
  • Trong môi trường kiểm thử, gửi các multipart request bị cắt ngắn ở mức an toàn và xác nhận strict-error signal được đặt, request bị xử lý theo policy và cả hai rule phòng vệ phản ứng như dự kiến.
  • So sánh số lượng và nội dung field mà WAF thấy với dữ liệu backend nhận được. Đây là kiểm tra phòng ngừa, không phải indicator đã được xác nhận.
  • Việc không thấy log của rule không chứng minh deployment an toàn; cần kết hợp kiểm tra version, code path, cấu hình và kết quả kiểm thử.
Nguồn (11)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.