-
09/04/2020
-
113
-
1.112 bài viết
Lỗ hổng trong Spring Framework cho phép vượt phân quyền trên generic
Hai lỗ hổng nghiêm trọng trong Spring Security và Spring Framework đang khiến cộng đồng phát triển phần mềm lo ngại, khi chúng mở ra khả năng cho kẻ tấn công truy cập trái phép vào các chức năng vốn chỉ dành cho người có quyền cao nhất. Được định danh CVE-2025-41248 và CVE-2025-41249, hai lỗ hổng này ảnh hưởng đến nhiều phiên bản thuộc các nhánh 5.x và 6.x, tác động trực tiếp đến các ứng dụng doanh nghiệp sử dụng cơ chế kiểm soát truy cập bằng @EnableMethodSecurity và các annotation như @PreAuthorize hay @PostAuthorize. Nếu không được vá kịp thời, chúng có thể biến các endpoint nhạy cảm thành điểm yếu chí tử, làm suy yếu hoàn toàn lớp phòng thủ ở tầng dịch vụ.
Vấn đề xuất hiện khi các ứng dụng sử dụng tính năng @EnableMethodSecurity của Spring Security kết hợp với các annotation kiểm soát truy cập. Ở những trường hợp dịch vụ được thiết kế dựa trên interface hoặc lớp cha trừu tượng có sử dụng generic không giới hạn, cơ chế quét annotation của framework có thể bỏ sót các phương thức được bảo vệ, dẫn tới việc cho phép truy cập trái phép vào endpoint nhạy cảm.
Điều này mở đường cho kẻ tấn công gọi trực tiếp các phương thức được định nghĩa trong interface generic, bỏ qua kiểm tra phân quyền vốn dựa trên các biểu thức SpEL như @PreAuthorize("hasRole('ADMIN')"). Lỗ hổng được chấm điểm CVSS 3.1 ở mức 6.5, với mức độ nghiêm trọng trung bình nhưng vẫn tiềm ẩn nguy cơ cao khi các ứng dụng doanh nghiệp dựa vào cơ chế kiểm soát phân quyền ở tầng dịch vụ.
Về bản chất, cả hai lỗ hổng đều liên quan đến việc xử lý chưa đầy đủ đối với generic không giới hạn trong quá trình introspection annotation, dẫn đến việc bỏ qua metadata bảo mật và coi các phương thức nhạy cảm như không có bảo vệ.
Do đặc thù CI/CD triển khai liên tục, chỉ một bản build chứa lỗi cũng có thể khiến môi trường production mất an toàn trong thời gian dài nếu không có cơ chế giám sát bảo mật tự động. Điều này đòi hỏi các đội DevSecOps phải đưa kiểm tra annotation và phân quyền vào pipeline build, đảm bảo tất cả phương thức quan trọng đều được bảo vệ trước khi triển khai.
Đối với các đội phát triển chưa thể nâng cấp ngay lập tức, một giải pháp tạm thời là khai báo lại tất cả phương thức cần bảo vệ ngay tại lớp triển khai, không dựa vào annotation kế thừa từ lớp cha generic. Cách tiếp cận này giúp đảm bảo các annotation như @PreAuthorize và @PostAuthorize luôn được áp dụng chính xác.
Các nhóm phát triển cần rà soát lại toàn bộ interface dịch vụ đang sử dụng @EnableMethodSecurity, đồng thời cập nhật công cụ phân tích tĩnh và cơ chế quét annotation tùy chỉnh để phát hiện đúng các phương thức được bảo vệ trong hệ thống phân cấp kiểu. Việc đưa kiểm tra phân quyền vào quy trình CI/CD cùng với đánh giá mã nguồn định kỳ sẽ giúp giảm thiểu nguy cơ phơi bày API nhạy cảm trong tương lai.
Vấn đề xuất hiện khi các ứng dụng sử dụng tính năng @EnableMethodSecurity của Spring Security kết hợp với các annotation kiểm soát truy cập. Ở những trường hợp dịch vụ được thiết kế dựa trên interface hoặc lớp cha trừu tượng có sử dụng generic không giới hạn, cơ chế quét annotation của framework có thể bỏ sót các phương thức được bảo vệ, dẫn tới việc cho phép truy cập trái phép vào endpoint nhạy cảm.
CVE-2025-41248: Lỗ hổng bỏ qua kiểm soát phân quyền
CVE-2025-41248 tác động đến Spring Security từ phiên bản 6.4.0 đến 6.4.9 và từ 6.5.0 đến 6.5.3. Lỗ hổng xuất hiện khi một lớp cha có định nghĩa phương thức đã được bảo vệ nhưng lớp con không khai báo lại annotation tương ứng. Bộ phân giải metadata của Spring Security không xử lý đúng hệ thống kiểu generic, khiến annotation không được áp dụng.Điều này mở đường cho kẻ tấn công gọi trực tiếp các phương thức được định nghĩa trong interface generic, bỏ qua kiểm tra phân quyền vốn dựa trên các biểu thức SpEL như @PreAuthorize("hasRole('ADMIN')"). Lỗ hổng được chấm điểm CVSS 3.1 ở mức 6.5, với mức độ nghiêm trọng trung bình nhưng vẫn tiềm ẩn nguy cơ cao khi các ứng dụng doanh nghiệp dựa vào cơ chế kiểm soát phân quyền ở tầng dịch vụ.
CVE-2025-41249: Lỗi nhận diện annotation
CVE-2025-41249 ảnh hưởng đến các phiên bản Spring Framework 5.3.0 đến 5.3.44, 6.1.0 đến 6.1.22 và 6.2.0 đến 6.2.10. Lỗi này khiến cơ chế quét annotation của framework không thể nhận diện các annotation được định nghĩa ở lớp cha generic, làm cho các cơ chế bảo vệ và ghi log ở tầng phương thức bị vô hiệu hóa.Về bản chất, cả hai lỗ hổng đều liên quan đến việc xử lý chưa đầy đủ đối với generic không giới hạn trong quá trình introspection annotation, dẫn đến việc bỏ qua metadata bảo mật và coi các phương thức nhạy cảm như không có bảo vệ.
Tác động tới hệ thống microservices
Spring Security là lựa chọn mặc định để bảo vệ API trong các kiến trúc microservices. Khi annotation bị bỏ qua, một microservice có thể để lộ chức năng nội bộ ra bên ngoài mà không hề có kiểm soát truy cập, cho phép kẻ tấn công từ xa gọi các phương thức quản trị hoặc thao tác dữ liệu trái phép. Nguy cơ này đặc biệt nghiêm trọng với các hệ thống phân tán nơi một microservice bị khai thác có thể trở thành bàn đạp để tấn công sâu hơn vào toàn bộ kiến trúc.Do đặc thù CI/CD triển khai liên tục, chỉ một bản build chứa lỗi cũng có thể khiến môi trường production mất an toàn trong thời gian dài nếu không có cơ chế giám sát bảo mật tự động. Điều này đòi hỏi các đội DevSecOps phải đưa kiểm tra annotation và phân quyền vào pipeline build, đảm bảo tất cả phương thức quan trọng đều được bảo vệ trước khi triển khai.
Biện pháp khắc phục
Đội ngũ phát triển Spring đã phát hành các bản vá để xử lý hai lỗ hổng này. Người dùng được khuyến nghị nâng cấp Spring Security lên phiên bản 6.4.10 hoặc 6.5.4 và nâng cấp Spring Framework lên các phiên bản 5.3.45, 6.1.23 hoặc 6.2.11.Đối với các đội phát triển chưa thể nâng cấp ngay lập tức, một giải pháp tạm thời là khai báo lại tất cả phương thức cần bảo vệ ngay tại lớp triển khai, không dựa vào annotation kế thừa từ lớp cha generic. Cách tiếp cận này giúp đảm bảo các annotation như @PreAuthorize và @PostAuthorize luôn được áp dụng chính xác.
Các nhóm phát triển cần rà soát lại toàn bộ interface dịch vụ đang sử dụng @EnableMethodSecurity, đồng thời cập nhật công cụ phân tích tĩnh và cơ chế quét annotation tùy chỉnh để phát hiện đúng các phương thức được bảo vệ trong hệ thống phân cấp kiểu. Việc đưa kiểm tra phân quyền vào quy trình CI/CD cùng với đánh giá mã nguồn định kỳ sẽ giúp giảm thiểu nguy cơ phơi bày API nhạy cảm trong tương lai.
Theo Cyber Security News