Lỗi tách đường dẫn FastCGI của caddyserver Caddy có thể thực thi tệp không phải PHP

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

Lỗ hổng CVE-2026-45135 là lỗ hổng thuộc các loại Improper Input Validation, Improper Handling of Unicode Encoding và Improper Handling of Case Sensitivity, ảnh hưởng tới caddy (phiên bản bị ảnh hưởng: >= 2.7.0, < 2.11.3). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 8.1. Lỗ hổng này đã có mã hoặc bằng chứng khai thác công khai, nhưng điều đó chưa xác nhận việc khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Caddy là một nền tảng máy chủ có thể mở rộng, sử dụng TLS theo mặc định. Từ 2.7.0 cho đến 2.11.3, splitPos() của FastCGI transport trong modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go sử dụng sai golang.org/x/text/search với search.IgnoreCase khi đường dẫn request chứa byte non-ASCII. Hai lỗi riêng biệt trong fallback này cho phép kẻ tấn công đánh lừa cơ chế tách FastCGI của Caddy để coi một tệp không phải.php, hoặc tệp có phần mở rộng split_path khác được cấu hình, là một script. Trong mọi triển khai mà kẻ tấn công có thể đặt nội dung vào một tệp được phục vụ qua FastCGI, chẳng hạn như uploads hoặc file storage, lỗi này có thể bị nâng cấp thành thực thi mã từ xa bằng cách tạo một URL có đường dẫn kích hoạt một trong hai lỗi. Lỗ hổng này được khắc phục trong 2.11.3.

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

  • Hồ sơ chuẩn hóa xác định caddyserver Caddy >= 2.7.0, < 2.11.3 là bị ảnh hưởng.
  • Vendor advisory lại liệt kê >= 2.7.0, <= 2.10.2 là bị ảnh hưởng và nêu v2.11.3 là phiên bản đã vá.
  • Hai nguồn không nhất quán về trạng thái của nhánh 2.11.0 đến 2.11.2; không nên tự suy ra các phiên bản trong khoảng này an toàn chỉ từ một nguồn. Các triển khai nằm trong phạm vi chuẩn hóa nên được kiểm tra và xử lý cho đến khi caddyserver làm rõ khác biệt.

Chi tiết kỹ thuật

Trong splitPos() của FastCGI transport, Caddy dùng golang.org/x/text/search với search.IgnoreCase khi đường dẫn request chứa byte non-ASCII. Cơ chế fallback này có hai lỗi: một nhánh có thể giữ trạng thái khớp cũ sau khi gặp byte non-ASCII, còn cơ chế Unicode case folding có thể coi các ký tự giống ASCII là phần mở rộng hợp lệ. Kết quả là Caddy có thể xác định sai vị trí tách FastCGI và coi một tệp không có phần mở rộng .php, hoặc phần mở rộng split_path được cấu hình khác, như một script. Điều kiện khai thác quan trọng là kẻ tấn công phải đặt được nội dung vào tệp mà FastCGI phục vụ, chẳng hạn qua chức năng upload hoặc kho lưu trữ nội dung người dùng, sau đó gửi request mạng có đường dẫn kích hoạt lỗi. Vendor cho biết các mục SplitPath hợp lệ vốn chỉ gồm ASCII và được chuyển thành chữ thường, nhưng fallback Unicode đã bỏ qua giới hạn đó. Tên ứng dụng FastCGI, quyền của tiến trình upstream và bố cục lưu trữ tệp cụ thể vẫn phụ thuộc vào từng triển khai.

Khả năng khai thác

Lỗi có thể bị kích hoạt từ xa qua mạng khi Caddy xử lý route dùng FastCGI và split_path. Theo dữ liệu được cung cấp, request không cần xác thực và không cần tương tác của người dùng, nhưng điều kiện đặt nội dung vào tệp và tạo đường dẫn phù hợp khiến việc khai thác có độ phức tạp cao. Vendor advisory có nêu reproducer công khai cho hai lỗi, vì vậy chi tiết khai thác đã được công bố. Bản ghi được cung cấp không xác định việc khai thác đã xảy ra trong các môi trường thực tế hay chưa.

Tác động kỹ thuật

Lỗi cho phép Caddy định tuyến nhầm một tệp không phải script vào FastCGI upstream, từ đó có thể dẫn đến thực thi mã tùy ý trong tiến trình upstream. Hậu quả kỹ thuật có thể bao gồm đọc dữ liệu, sửa dữ liệu hoặc làm gián đoạn dịch vụ trong phạm vi quyền của tiến trình đó. Việc thực thi không tự động chứng minh khả năng chiếm toàn bộ máy chủ; đặc quyền, sandbox, container boundary và quyền truy cập filesystem của FastCGI vẫn là các giới hạn quan trọng. Rủi ro chỉ hình thành khi kẻ tấn công vừa có thể đặt nội dung vào tệp được FastCGI phục vụ vừa có thể gửi đường dẫn kích hoạt lỗi.

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

Nếu một endpoint upload, file storage hoặc user-content store cho phép ghi tệp vào vùng được FastCGI phục vụ, nội dung do người dùng kiểm soát có thể bị biến thành mã chạy phía máy chủ. Hậu quả có thể gồm mất bí mật dữ liệu mà tiến trình FastCGI truy cập được, thay đổi nội dung hoặc cấu hình ứng dụng, và gián đoạn dịch vụ. Mức độ ảnh hưởng phụ thuộc vào quyền của tài khoản chạy FastCGI, dữ liệu mà upstream có thể truy cập và khả năng cô lập thư mục upload. Bản ghi không cung cấp bằng chứng về một nạn nhân, chiến dịch hoặc sự cố xâm nhập cụ thể.

Cách khắc phục

  1. Nâng cấp Caddy lên phiên bản đã vá 2.11.3, theo vendor advisory. Không diễn giải thông tin này thành việc mọi nhánh phát hành sau đó đều đã được xác minh trong hồ sơ này.
  2. Do có khác biệt giữa phạm vi affected trong hồ sơ chuẩn hóa và vendor advisory, hãy đối chiếu phiên bản thực tế với thông tin phát hành của caddyserver trước khi đóng một trường hợp phơi nhiễm, đặc biệt đối với các bản 2.11.x trước 2.11.3.
  3. Trong thời gian chưa vá, ngăn người dùng không tin cậy ghi tệp vào các thư mục được FastCGI phục vụ và tách vùng upload hoặc file storage khỏi vùng có thể được phân giải thành script.
  4. Rà soát các route dùng split_path và tắt hoặc loại bỏ việc xử lý FastCGI cho nội dung không cần thiết, nếu kiến trúc triển khai cho phép.
  5. Sau khi cập nhật, xác nhận mọi node, container và binary Caddy trong cùng dịch vụ đều chạy bản đã vá; chỉ cập nhật một reverse proxy trong cụm không đủ để loại bỏ phơi nhiễm.

Cách phát hiện

  1. Kiểm kê các máy chủ chạy Caddy và đối chiếu phiên bản với các nhánh bị ảnh hưởng trong hồ sơ triển khai.
  2. Xác định các cấu hình dùng FastCGI, đặc biệt là các route có split_path và các backend như PHP-FPM hoặc ứng dụng FastCGI tương tự.
  3. Kiểm tra liệu người dùng không tin cậy có thể ghi tệp vào các thư mục mà FastCGI có thể xử lý như script hay không, bao gồm thư mục upload, file storage và user-content store.
  4. Rà soát access log và log của upstream, nếu có, để tìm request chứa byte non-ASCII trong đường dẫn tới FastCGI hoặc request làm cho tệp có tên bất thường được xử lý như script. Đây là biện pháp giám sát phòng ngừa, không phải indicator đã được vendor xác nhận.
  5. Đối chiếu lịch sử tệp và hoạt động upload với các lần thực thi FastCGI bất thường. Việc không thấy sự kiện đáng ngờ không chứng minh hệ thống an toàn.
Nguồn (14)
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.