PHP sử dụng longjmp() để thoát khỏi context hiện tại khi xảy ra lỗi hết bộ nhớ. Trong một số context, vùng nhớ của request đã có thể được truy cập nhưng chưa được khởi tạo đầy đủ; nếu một lần cấp phát thất bại tại thời điểm này, đường thoát sớm không cập nhật đầy đủ trạng thái nội bộ và để lại trạng thái request không hợp lệ. Quy trình dọn dẹp request sau đó có thể đọc hoặc rẽ nhánh dựa trên vùng nhớ không hợp lệ, tạo điều kiện cho lỗi use-after-free hoặc truy cập con trỏ chưa khởi tạo.
- Input do attacker kiểm soát có thể làm PHP đi vào trạng thái OOM trong quá trình xử lý request, đặc biệt khi phân tích multipart request.
- Các điều kiện được advisory nêu gồm request multipart không có
Content-Length hữu dụng, số lượng header không giới hạn trong một part, các file control rỗng không bị tính vào max_file_uploads, và tên field lồng nhau làm tăng đáng kể số lượng cấu trúc cần tạo.
- Khi request startup thất bại dưới Apache
mod_php, request shutdown vẫn được gọi trước khi mã ứng dụng chạy, nên trạng thái không hợp lệ có thể bị xử lý ngay trong PHP core.
- FPM loại bỏ child khi request startup thất bại, nhưng vẫn có thể còn các đường đi OOM sau startup. Advisory xác nhận tính dễ bị ảnh hưởng của FPM qua phân tích mã, nhưng chưa xác nhận một khai thác hoàn chỉnh cho SAPI này.
Bản vá thay đổi cách xử lý OOM, loại bỏ việc dùng longjmp() trong đường đi này và trì hoãn soft OOM đến một VM safe point, đồng thời dùng hard OOM ở ngưỡng cao hơn. Chi tiết về bố trí allocator hoặc mọi điều kiện triển khai cần thiết để đạt độ tin cậy khai thác không được xác định đầy đủ trong dữ liệu được cung cấp.