Lỗ Hổng Laravel APP_KEY Lộ: RCE Nghiêm Trọng Từ Deserialization

Các nhà nghiên cứu bảo mật đã phát hiện một lỗ hổng nghiêm trọng trong các ứng dụng Laravel, nơi thông tin xác thực APP_KEY bị lộ đang bị khai thác tích cực để đạt được khả năng thực thi mã từ xa (RCE) trên hàng trăm hệ thống sản xuất. Lỗ hổng bảo mật lan rộng này bắt nguồn từ cơ chế tự động khử chuỗi (deserialization) dữ liệu được giải mã của Laravel, kết hợp với nhiều chuỗi gadget (gadget chains) đã được ghi nhận trong framework, cho phép thực thi lệnh tùy ý.

Cơ chế Lỗ hổng và Khai thác

APP_KEY đóng vai trò là khóa mã hóa đối xứng 32 byte của Laravel, xử lý các hoạt động bảo mật quan trọng bao gồm mã hóa dữ liệu, quản lý phiên và token đặt lại mật khẩu. Lỗ hổng xuất hiện khi kẻ tấn công có được khóa này và khai thác hàm decrypt() của Laravel. Hàm này tự động khử chuỗi dữ liệu đã được giải mã mà không có sự kiểm tra hoặc xác thực đúng mức.

Deserialization và PHP Gadget Chains

Các lỗ hổng khử chuỗi của PHP trong môi trường Laravel cho phép kẻ tấn công thực thi mã tùy ý thông qua các chuỗi gadget được ghi lại rõ ràng. Trong PHP, khi một đối tượng được giải mã (deserialized), nó có thể kích hoạt các phương thức “magic” như __wakeup(), __destruct(), hoặc các phương thức khác trong luồng thực thi của ứng dụng. Nếu luồng này vô tình đi qua các đoạn mã (gadget) có khả năng thực thi lệnh hoặc thao tác file, kẻ tấn công có thể kiểm soát hoàn toàn hệ thống.

Các công cụ như phpggc (PHP Generic Gadget Chains) đã lập danh mục hơn 20 vector RCE khác nhau ảnh hưởng đến các phiên bản Laravel từ 5.1 đến 11.34.2+. Điều này làm cho việc khai thác trở nên đơn giản đối với kẻ tấn công có quyền truy cập vào các APP_KEY bị lộ. Với một APP_KEY bị lộ, kẻ tấn công có thể tạo ra một chuỗi byte (payload) được mã hóa. Khi ứng dụng Laravel giải mã và khử chuỗi payload này bằng hàm decrypt(), chuỗi gadget sẽ được kích hoạt, dẫn đến thực thi mã tùy ý trên máy chủ.

Phạm vi và Tác động của Lỗ hổng

Các nhà nghiên cứu bảo mật từ Synacktiv, hợp tác với GitGuardian, đã tiến hành trinh sát mở rộng, tiết lộ quy mô lớn của lỗ hổng này. Sử dụng các truy vấn tìm kiếm Shodan, họ đã xác định được khoảng 650.000 thể hiện Laravel công khai và thu thập một cách có hệ thống các APP_KEY bị lộ công khai thông qua trinh sát GitHub.

Thống kê và Kết quả Nghiên cứu

Nghiên cứu của Synacktiv và GitGuardian đã cho thấy những con số đáng báo động về việc lộ lọt APP_KEY và mức độ dễ bị tổn thương của các hệ thống Laravel:

  • Các nhà nghiên cứu đã xác thực hơn 6.000 APP_KEY và xác nhận rằng hơn 400 ứng dụng Laravel vẫn dễ bị tấn công RCE đơn giản.
  • Công cụ tùy chỉnh “Laravel crypto killer” của họ đã chứng minh việc khai thác thành công bằng cách giải mã cookie phiên và xác thực các đối tượng PHP đã được khử chuỗi.
  • Kể từ năm 2018, khoảng 28.000 cặp APP_KEYAPP_URL đã bị lộ trên GitHub. Đáng lo ngại là khoảng 10% trong số này vẫn còn hiệu lực.
  • Hiện tại, khoảng 120 ứng dụng được xác định là dễ bị khai thác RCE ngay lập tức.
  • Phân tích cho thấy 63% các trường hợp lộ APP_KEY bắt nguồn từ các tệp cấu hình .env, vốn thường chứa nhiều thông tin xác thực nhạy cảm khác.
  • Hơn một phần ba các trường hợp lộ bí mật này bao gồm các bí mật bổ sung như thông tin xác thực cơ sở dữ liệu, token lưu trữ đám mây và khóa xử lý thanh toán, mở rộng đáng kể bề mặt tấn công.

Trong số 1.300 thể hiện chứa cả cặp APP_KEYAPP_URL, 400 đã được xác nhận là hoạt động, với 4 trường hợp được xác nhận là lỗ hổng RCE có thể khai thác được trên các hệ thống sản xuất.

Phát hiện và Phòng ngừa

GitGuardian đã tích hợp khả năng phát hiện APP_KEY vào nền tảng bảo mật của họ, xác định hơn 10.000 APP_KEY duy nhất trên GitHub kể từ tháng 6 năm 2025 (số liệu giả định cho tương lai hoặc lỗi đánh máy trong nguồn gốc, cần kiểm tra lại nếu có thể). Việc phát hiện tự động này giúp tổ chức nhanh chóng xác định và khắc phục các trường hợp lộ bí mật trước khi chúng có thể bị khai thác.

Nghiên cứu này chứng minh tầm quan trọng sống còn của việc quản lý bí mật đúng cách và giám sát liên tục trong các ứng dụng Laravel. Việc để lộ APP_KEY thể hiện một rủi ro bảo mật tức thì và nghiêm trọng đối với hạ tầng của tổ chức. Để giảm thiểu rủi ro này, các nhà phát triển và quản trị hệ thống cần đảm bảo rằng các bí mật nhạy cảm, đặc biệt là APP_KEY, không bao giờ được đưa vào các kho lưu trữ công khai hoặc các vị trí không an toàn khác. Việc sử dụng các giải pháp quản lý bí mật chuyên nghiệp và thực hành DevSecOps là rất cần thiết để bảo vệ dữ liệu và ứng dụng.