Leveraging Exposed APP_KEYs to Trigger RCE in Laravel Apps

 1./ Tổng quan và phân tích

Laravel là PHP framework, mã nguồn mở, được thiết kế để hợp lý hóa phát triển ứng dụng web, cung cấp tính năng mạnh mẽ, bao gồm các hệ thống xác thực toàn diện, quản lý CSDL và định tuyến.

APP_KEY là khóa đối xứng độ dài 32-byte được tạo ngẫu nhiên, được Laravel sử dụng nội bộ cho các hoạt động bảo mật quan trọng, bao gồm mã hóa/giải mã dữ liệu và tạo bảo mật mã hóa token. Key này được tạo thông qua 2 chức năng encrypt() và decrypt(), tuy nhiên, hàm decrypt() tự động giải tuần tự hóa (deserialization) dữ liệu, tiềm ẩn vector thực thi mã từ xa (RCE).

Việc để lộ APP_KEY có thể dẫn đến tấn công RCE trên máy chủ web Laravel vì một số lý do như sau:

  • Đầu tiên, mã nguồn của Laravel chứa nhiều chuỗi gadget PHP đã được ghi chép rõ ràng, có thể kết hợp lại với nhau để thực thi lệnh tùy ý trong quá trình unserialize(). Các chuỗi này đã được phân loại và có sẵn trong các công cụ như phpggc.
  • Thứ hai, giới nghiên cứu bảo mật nhận định rằng việc lộ APP_KEY trở nên đặc biệt nguy hiểm khi kết hợp với các lỗ hổng ở cấp độ ứng dụng như CVE-2024-55555 và CVE-2024-48987.
  • Cuối cùng, việc thực thi mã từ xa (RCE) trở nên dễ dàng khi Laravel thực hiện tuần tự hóa (serialize) và mã hóa cookie bằng APP_KEY. Lỗ hổng này lần đầu tiên được ghi nhận qua CVE-2018-15133, ảnh hưởng đến các phiên bản Laravel trước 5.6.30

2./ Khuyến nghị giảm thiểu rủi ro

Không bao giờ public APP_KEY hoặc .env

  • Tuyệt đối không commit APP_KEY hoặc file .env vào GitHub hay bất kỳ kho mã nào – đây là nguồn gốc của các vụ rò rỉ gây RCE
  • Đảm bảo cấu hình .gitignore để loại trừ các file cấu hình chứa secrets.

Luôn xoay (rotation) và thay thế khóa nếu bị rò rỉ

  • Nếu phát hiện APP_KEY đã bị rò rỉ, phải ngay lập tức xoá khoá này, tạo mới APP_KEY và deploy lại, không chỉ xoá trong repo mà cả trên production.
  • Đảm bảo luôn cập nhật APP_KEY mới lên mọi môi trường (prod/dev/test).

Giám sát và phát hiện lộ khoá tự động

  • Sử dụng các công cụ CI/CD pre-commit hooks để quét khoá ngay khi commit/push
  • Mở rộng giám sát sang các tools cộng tác (Slack, Jira, Confluence,…), vì khoảng 35% rò rỉ xảy ra ở bên ngoài mã nguồn chính

***Một số nguồn tham khảo:

https://blog.gitguardian.com/exploiting-public-app_key-leaks/

Leave a reply:

Your email address will not be published.