Giới thiệu chung
Dữ liệu gốcTồn tại lỗi tiết lộ thông tin trong sandbox của Twig ở các phiên bản trước 1.38.0 và nhánh 2.x trước 2.7.0 vì trong một số trường hợp, có thể gọi phương thức __toString() trên một object ngay cả khi security policy đang áp dụng không cho phép.
Sản phẩm và phạm vi ảnh hưởng
- Twig 1.x: các phiên bản từ 1.0.0 đến 1.37.1 bị ảnh hưởng; advisory của vendor cho biết lỗi được sửa trong 1.38.0.
- Twig 2.x: các phiên bản từ 2.0.0 đến 2.6.2 bị ảnh hưởng; advisory của vendor cho biết lỗi được sửa trong 2.7.0.
- Debian stretch, tương ứng Debian Linux 9.0 trong record: package
twigđược sửa trong 1.24.0-2+deb9u1. Trạng thái của các nhánh hoặc bản phát hành không được liệt kê chưa được evidence xác nhận và cần được kiểm tra riêng.
Chi tiết kỹ thuật
Twig sandbox mode được thiết kế để xử lý các template không đáng tin cậy theo một policy dạng allowlist, bao gồm tag, filter, function và method call. PHP có thể tự động chuyển một object thành chuỗi khi xuất hoặc xử lý biểu thức, qua đó gọi __toString(). Twig đã ngăn trường hợp in object trực tiếp, nhưng advisory của vendor xác nhận vẫn có các trường hợp gián tiếp khiến phép chuyển đổi này xảy ra, chẳng hạn khi dùng filter như upper; bản vá cũng xử lý các phép chuyển đổi ngầm qua nối chuỗi, filter, function và các biểu thức liên quan. Đây là lỗi vượt qua chính sách kiểm soát việc gọi __toString(), với hậu quả là tiết lộ thông tin. Khai thác yêu cầu ứng dụng bật sandbox mode và có đường dẫn xử lý template phù hợp; việc bên ngoài có thể kiểm soát hoặc tác động đến template phụ thuộc vào từng ứng dụng. Record không xác định class, trạng thái object hoặc trường dữ liệu cụ thể sẽ bị tiết lộ.
Khả năng khai thác
- Metadata khai thác ghi nhận đường tấn công qua mạng, không yêu cầu quyền xác thực và không yêu cầu user interaction; điều kiện khai thác được đánh giá là phức tạp.
- Lỗi chỉ liên quan đến các ứng dụng sử dụng Twig sandbox mode và xử lý template không đáng tin cậy hoặc chịu ảnh hưởng từ bên ngoài. Khả năng kẻ tấn công cung cấp hay tác động đến template phải được đánh giá riêng trong từng ứng dụng.
- Evidence hiện có không xác định việc khai thác ngoài thực tế hoặc public exploit. Vì vậy, mức độ công khai của exploit vẫn chưa rõ và không nên suy luận rằng không có khai thác chỉ vì record không ghi nhận trạng thái đó.
Tác động kỹ thuật
Khai thác thành công có thể làm lộ dữ liệu do __toString() trả về, bao gồm debug information, database entry ID, username hoặc các giá trị riêng của ứng dụng được vendor nêu. Hậu quả kỹ thuật là mất tính bí mật của dữ liệu; metadata được cung cấp không cho thấy tác động đến tính toàn vẹn hoặc tính sẵn sàng. Khả năng truy cập từ xa mà không cần xác thực được ghi nhận trong metadata, nhưng mức độ phơi nhiễm thực tế phụ thuộc vào việc có đường dẫn sandbox template phù hợp hay không và object cung cấp dữ liệu gì. Hệ quả tổ chức có thể gồm rò rỉ identifier nội bộ hoặc thông tin người dùng và phải rà soát các response liên quan, nhưng record không xác lập một breach hoặc compromise rộng hơn.
Tác động đến tổ chức
- Kẻ tấn công tiếp cận được đường dẫn xử lý template bị ảnh hưởng có thể đọc thông tin do
__toString()của object trả về, chẳng hạn debug information, database entry ID hoặc username. - Hậu quả phù hợp với evidence là rò rỉ dữ liệu và thông tin nội bộ. Record không xác lập khả năng sửa dữ liệu, thực thi mã hoặc gây gián đoạn dịch vụ, nên không được mặc định các hậu quả đó.
- Rủi ro tập trung ở các ứng dụng dùng Twig sandbox mode với object có phép chuyển đổi sang chuỗi trả về dữ liệu nhạy cảm.
- Việc lộ identifier nội bộ hoặc thông tin người dùng có thể dẫn đến yêu cầu rà soát response, template và dữ liệu đã được trả về, nhưng record không xác lập một vụ xâm nhập hay breach cụ thể.
Cách khắc phục
- Nâng cấp các triển khai Twig 1.x lên 1.38.0 và các triển khai Twig 2.x lên 2.7.0 theo các bản sửa tương ứng của vendor.
- Trên Debian stretch, cài bản cập nhật package
twig1.24.0-2+deb9u1. - Trong thời gian chưa thể vá, tránh xử lý template không đáng tin cậy bằng Twig sandbox mode nếu có thể. Đây chỉ là biện pháp giảm rủi ro tạm thời, không thay thế bản sửa chính thức.
- Sau khi cập nhật, xác minh package thực tế và dependency lockfile, rồi kiểm thử lại sandbox policy cùng các template render object hoặc truyền object qua filter, function và phép nối chuỗi.
Cách phát hiện
- Kiểm kê chính xác phiên bản Twig đang triển khai, bao gồm dependency lockfile và các package hệ điều hành liên quan.
- Xác định ứng dụng nào bật Twig sandbox mode và những luồng nào xử lý template không đáng tin cậy hoặc chịu ảnh hưởng từ request, dữ liệu người dùng hay nguồn bên ngoài.
- Rà soát template và code tích hợp để tìm các trường hợp object được render hoặc truyền qua các phép xử lý có thể gây chuyển đổi ngầm sang chuỗi, bao gồm filter, function và phép nối chuỗi.
- Kiểm tra các class được đưa vào template, đặc biệt là implementation của
__toString(), để xác định chúng có trả về debug information, database entry ID, username hoặc dữ liệu nhạy cảm khác hay không. - Có thể theo dõi như một biện pháp thận trọng các response bất thường chứa identifier nội bộ, username hoặc debug information. Không thấy các dấu hiệu này trong log hay response không chứng minh hệ thống an toàn.