PHP Group PHP ext-standard làm lộ bộ nhớ heap liền kề qua lỗi đọc vượt giới hạn

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-92842 là gì?

Lỗ hổng CVE-2026-92842 là lỗ hổng thuộc các loại Heap-based Buffer Overflow và Out-of-bounds Read, ảnh hưởng tới PHP (phiên bản bị ảnh hưởng: 8.2.* – < 8.2.34, 8.3.* – < 8.3.35 và các phiên bản bị ảnh hưởng khác). Lỗ hổng này được xếp hạng ở mức Trung bình, với điểm CVSS 5.9. 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

Các bộ lọc stream convert.base64-encode, convert.quoted-printable-encode và convert.quoted-printable-decode chấp nhận tùy chọn line-break-chars, trong đó độ dài được theo dõi tách biệt với chính chuỗi. Các hàm khởi tạo bộ lọc sao chép giá trị bằng pestrdup(), hàm này dừng ở byte NUL đầu tiên nhưng vẫn giữ độ dài ban đầu. Khi bộ lọc về sau phát ra một line break, nó sao chép số byte theo độ dài đã ghi nhận từ vùng cấp phát bị cắt ngắn, đọc vượt quá phần cuối của vùng này và đưa các byte heap liền kề vào đầu ra của bộ lọc.

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

  • PHP Group PHP package ext-standard:
  • Nhánh 8.2.* bị ảnh hưởng khi thấp hơn 8.2.34; bản sửa được xác định là 8.2.34.
  • Nhánh 8.3.* bị ảnh hưởng khi thấp hơn 8.3.35; bản sửa được xác định là 8.3.35.
  • Nhánh 8.4.* bị ảnh hưởng khi thấp hơn 8.4.26; bản sửa được xác định là 8.4.26.
  • Nhánh 8.5.* bị ảnh hưởng khi thấp hơn 8.5.11; bản sửa được xác định là 8.5.11.

Record đặt trạng thái mặc định là unaffected ngoài các phạm vi nêu trên. Không nên suy luận rằng các nhánh PHP không được liệt kê đã được xác nhận an toàn.

Chi tiết kỹ thuật

Lỗi nằm trong các stream filter convert.base64-encode, convert.quoted-printable-encode và convert.quoted-printable-decode của gói ext-standard. Tùy chọn line-break-chars lưu độ dài riêng với chuỗi dữ liệu. Các hàm khởi tạo filter dùng pestrdup(), hàm này dừng khi gặp byte NUL đầu tiên, nhưng vẫn giữ độ dài ban đầu của giá trị.

Khi filter cần chèn line break, nó sao chép số byte theo độ dài đã ghi nhận từ vùng cấp phát đã bị cắt ngắn. Vì vậy, thao tác này đọc vượt quá phần cuối allocation và có thể đưa các byte heap liền kề vào đầu ra của filter. Điều kiện khai thác là ứng dụng phải cho phép dữ liệu do attacker kiểm soát đi vào line-break-chars, trong đó dữ liệu chứa byte NUL, và phải kích hoạt việc phát ra line break. Advisory của PHP cho biết đường đi này có thể đạt được qua HTTP nếu ứng dụng chuyển tiếp dữ liệu request vào các tùy chọn filter; lượng dữ liệu bị lộ phụ thuộc vào bố cục heap, còn crash có thể xảy ra trên một số allocator hoặc bản build.

Khả năng khai thác

  • Khả năng tiếp cận: Có thể đạt được qua mạng khi ứng dụng đưa dữ liệu do attacker kiểm soát vào tùy chọn của các filter bị ảnh hưởng.
  • Xác thực và tương tác: Đánh giá trong record mô tả yêu cầu không cần xác thực và không cần tương tác người dùng, nhưng ứng dụng vẫn phải cung cấp đường đi tới tùy chọn này.
  • Độ phức tạp: Cao vì input phải chứa byte NUL và phải làm cho filter phát ra line break.
  • Trạng thái khai thác: Record đánh dấu public_exploit là false và không xác lập trạng thái khai thác thực tế. Vendor advisory có một PoC minh họa lỗi, nhưng PoC này không chứng minh việc lạm dụng trong thực tế.

Tác động kỹ thuật

Lỗi cho phép filter đọc vượt quá allocation chứa giá trị line-break-chars sau byte NUL và đưa các byte heap liền kề vào output. Tác động kỹ thuật thực tế là tiết lộ dữ liệu bộ nhớ của tiến trình; nội dung và phạm vi dữ liệu phụ thuộc vào bố cục heap tại thời điểm xử lý.

Nếu ứng dụng trả output cho requester, dữ liệu bị đọc có thể vượt ra ngoài ranh giới logic dự kiến của request và làm lộ thông tin nội bộ. Crash có thể xảy ra trên một số allocator hoặc bản build, nhưng record không thiết lập một tác động toàn vẹn, thực thi mã hoặc nâng quyền.

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

Hậu quả chính là rò rỉ thông tin: output của filter có thể chứa các byte nằm liền kề allocation của line-break-chars. Nếu output đó được trả về cho requester, dữ liệu trong tiến trình PHP có thể bị tiết lộ, với mức độ nhạy cảm phụ thuộc vào bố cục heap và dữ liệu đang tồn tại trong tiến trình.

Một số allocator hoặc bản build có thể gặp crash khi đường đi lỗi được kích hoạt, tạo rủi ro gián đoạn dịch vụ. Lỗi không được mô tả là cơ chế sửa đổi dữ liệu hoặc nâng quyền; tác động được chứng minh tập trung vào confidentiality và khả năng crash.

Cách khắc phục

  1. Nâng PHP Group PHP ext-standard lên bản sửa tương ứng với nhánh đang triển khai: 8.2.34, 8.3.35, 8.4.26 hoặc 8.5.11. Chọn đúng bản trong cùng nhánh và không suy diễn rằng một bản sửa của nhánh này tự động bao phủ nhánh khác.
  2. Nếu chưa thể cập nhật, ngăn dữ liệu không tin cậy, đặc biệt là dữ liệu có thể chứa byte NUL, đi trực tiếp vào tùy chọn line-break-chars. Đây là biện pháp giảm rủi ro dựa trên cơ chế lỗi, không thay thế cho bản sửa của vendor.
  3. Rà soát các ứng dụng sử dụng ba filter bị ảnh hưởng và loại bỏ việc chuyển tiếp trực tiếp tùy chọn filter từ request hoặc nguồn bên ngoài.
  4. Sau khi cập nhật, xác minh runtime và package thực tế trên từng máy chủ, container hoặc image thay vì chỉ kiểm tra tệp nguồn hoặc manifest.
  5. Với các bản đóng gói PHP do hệ điều hành hoặc nhà cung cấp image phân phối, áp dụng gói cập nhật của nhà cung cấp có chứa bản sửa tương ứng và kiểm tra lại phiên bản runtime đang phục vụ request.

Cách phát hiện

  1. Kiểm kê các runtime PHP và package ext-standard đang chạy trên máy chủ, container và image triển khai; đối chiếu với các nhánh đã được sửa trong phần remediation.
  2. Tìm các đoạn mã tạo convert.base64-encode, convert.quoted-printable-encode hoặc convert.quoted-printable-decode stream filter và truyền tùy chọn line-break-chars.
  3. Rà soát luồng dữ liệu để xác định liệu request, tham số HTTP hoặc dữ liệu nhị phân do người dùng kiểm soát có thể đi vào tùy chọn này hay không.
  4. Trong môi trường kiểm thử, chạy đường đi liên quan với memory sanitizer có thể phát hiện báo cáo đọc vượt vùng heap khi lỗi được kích hoạt.
  5. Như một biện pháp giám sát phòng ngừa, kiểm tra output filter có chứa các byte bất thường hoặc thay đổi độ dài không giải thích được. Việc không thấy dấu hiệu này không chứng minh hệ thống an toàn.
Nguồn (18)
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.

Khám phá các giải pháp khác liên quan