-
09/04/2020
-
107
-
946 bài viết
APP_KEY trong Laravel bị lộ: Hàng trăm ứng dụng có nguy cơ bị chiếm quyền điều khiển từ xa
Một nguy cơ khá nghiêm trọng đang âm thầm tồn tại trong cộng đồng sử dụng Laravel (framework PHP phổ biến trên toàn thế giới). Chỉ cần để lộ mã APP_KEY (khóa bảo mật được Laravel sử dụng để mã hóa dữ liệu), tin tặc có thể dễ dàng chiếm quyền điều khiển máy chủ của người dùng từ xa.
Điều đáng lo ngại hơn là hàng trăm ngàn khóa APP_KEY đã bị rò rỉ công khai trên GitHub, trong đó có ít nhất 600 ứng dụng Laravel đang hoạt động bị xác định là có thể khai thác được.
Từ năm 2018 đến tháng 5/2025, các chuyên gia đã trích xuất hơn 260.000 khóa APP_KEY từ GitHub. Phát hiện hơn 600 ứng dụng dễ bị tấn công với hơn 10.000 khóa là duy nhất và ít nhất 400 khóa còn sử dụng được.
Trong Laravel, APP_KEY là một chuỗi 32 byte ngẫu nhiên được tạo ra khi cài đặt ứng dụng, thường nằm trong file .env. Nó dùng để:
Điều đáng lo ngại hơn là hàng trăm ngàn khóa APP_KEY đã bị rò rỉ công khai trên GitHub, trong đó có ít nhất 600 ứng dụng Laravel đang hoạt động bị xác định là có thể khai thác được.
Từ năm 2018 đến tháng 5/2025, các chuyên gia đã trích xuất hơn 260.000 khóa APP_KEY từ GitHub. Phát hiện hơn 600 ứng dụng dễ bị tấn công với hơn 10.000 khóa là duy nhất và ít nhất 400 khóa còn sử dụng được.
Trong Laravel, APP_KEY là một chuỗi 32 byte ngẫu nhiên được tạo ra khi cài đặt ứng dụng, thường nằm trong file .env. Nó dùng để:
- Mã hóa/giải mã dữ liệu nhạy cảm,
- Ký và xác thực session cookie,
- Tạo token đăng nhập và xử lý các chức năng bảo mật khác.
- Tạo hoặc giải mã session cookie, giả mạo quyền truy cập.
- Khai thác lỗi deserialization trong hàm decrypt() của Laravel để thực thi mã độc từ xa (RCE – Remote Code Execution).
Tin tặc đã thực hiện tấn công như thế nào?
- Tin tặc tìm kiếm APP_KEY bị rò rỉ trên GitHub (hoặc các nền tảng công khai).
- Kết hợp với thông tin về APP_URL (cũng hay bị lộ trong file .env), chúng có thể truy cập trực tiếp vào ứng dụng đang chạy.
- Gửi payload chứa dữ liệu mã hóa nguy hiểm (gadget chain) tới máy chủ.
- Laravel tự động giải mã và deserialize payload, dẫn đến việc thực thi mã từ xa mà không cần vượt qua logic ứng dụng hay đăng nhập.
Ảnh hưởng thực tế: Không chỉ Laravel
- 63% các APP_KEY bị lộ xuất phát từ file .env, thường chứa thêm nhiều thông tin nhạy cảm khác như:
- Thông tin kết nối cơ sở dữ liệu
- Token dịch vụ đám mây (AWS, Google Cloud…)
- API key liên quan đến chatbot, AI, hỗ trợ khách hàng, thương mại điện tử...
- Hơn 28.000 cặp APP_KEY + APP_URL bị lộ cùng lúc và trong đó có ít nhất 10% hợp lệ, đủ điều kiện khai thác trực tiếp.
Những điểm đặc biệt cần lưu ý
- Laravel không còn lỗi này trong mặc định, nhưng lỗi quay lại nếu dev dùng SESSION_DRIVER=cookie và xử lý decrypt() không cẩn thận.
- Lỗi liên quan đến PHP object deserialization, vốn đã bị khai thác rộng rãi với các công cụ như phpggc – giúp kẻ tấn công tạo ra các “gadget chain” tùy chỉnh để chèn mã độc.
Khuyến nghị bảo vệ hệ thống Laravel và các ứng dụng liên quan
- Không bao giờ commit file ".env" lên GitHub hoặc bất kỳ kho mã nguồn công khai nào.
- Nếu phát hiện đã lộ APP_KEY:
- Không chỉ xóa khỏi repo.
- Phải xoay vòng (rotate) khóa APP_KEY ngay lập tức.
- Cập nhật toàn bộ hệ thống đang dùng key cũ bằng key mới.
- Không sử dụng SESSION_DRIVER=cookie trừ khi hiểu rõ rủi ro.
- Triển khai giám sát bí mật liên tục trong CI/CD, container, Docker image, log pipeline…
- Sử dụng các công cụ quét bảo mật bí mật như GitGuardian hoặc các nền tảng tự động phát hiện secrets để theo dõi repo và hạ tầng.
Theo The Hacker News