Header Ads

CWE-6: J2EE Misconfiguration: Insufficient Session-ID Length



Ứng dụng J2EE được cấu hình để sử dụng độ dài ID cho session không đủ dài. Nếu kẻ tấn công có thể đoán hoặc đánh cắp ID session, thì chúng có thể chiếm quyền điều khiển phiên của người dùng (gọi là chiếm đoạt phiên làm việc - session hijacking). 
Số lượng ID session có thể tăng lên khi độ dài ID của session tăng lên, khiến việc đoán hoặc đánh cắp ID session trở nên khó khăn hơn.

Mối quan hệ của điểm yếu này

Điểm yếu này là con của:

  • CWE-334: Small Space of Random Values

Điểm yếu này là thành viên của các phân loại sau đây:
  • CWE-Cat-2: 7PK-Environment
  • CWE-Cat-731: OWASP Top Ten 2004 Category A10 - Insecure Configuration Management
  • CWE-Cat-965: SFP Secondary Cluster: Insecure Session Management
  • CWE-Cat-1414: Comprehensive Categorization: Randomness

Các công nghệ có thể dính điểm yếu này

  • Ngôn ngữ lập trình: Java (Tỉ lệ phổ biến: Chưa xác định được)

Kiến thức nền tảng

Mã định danh phiên (Session ID) có thể được sử dụng để xác định các bên giao tiếp trong môi trường web.

Số giây trung bình cần thiết để đoán được một mã định danh phiên hợp lệ được tính bằng công thức:


Trong đó:
  • B là số bit entropy của mã định danh phiên.
  • A là số lần đoán mà kẻ tấn công có thể thử mỗi giây.
  • S là số lượng mã định danh phiên hợp lệ có thể đoán được tại bất kỳ thời điểm nào.
Số bit entropy của mã định danh phiên luôn nhỏ hơn tổng số bit của mã định danh phiên. Ví dụ, nếu các mã định danh phiên được cấp theo thứ tự tăng dần, thì entropy gần như bằng không, bất kể độ dài của mã định danh đó. Nghĩa là nếu mã được cấp theo một trật tự dễ đoán, thì tính ngẫu nhiên (entropy) sẽ gần như không có, dù mã dài đến đâu.

Nếu mã định danh phiên được tạo từ một nguồn số ngẫu nhiên tốt, chúng ta có thể ước tính entropy của mã định danh phiên bằng một nửa tổng số bit trong mã đó. Đối với các độ dài mã định danh thực tế, điều này là khả thi, nhưng có thể hơi lạc quan."

Điều này cho thấy rằng entropy càng cao (tức là càng có nhiều tính ngẫu nhiên), mã định danh phiên càng khó bị đoán, giúp bảo vệ các phiên khỏi các cuộc tấn công đoán thử.



Ảnh hưởng của điểm yếu này

Mã định danh của session phải dài ít nhất 128 bit để ngăn chặn việc đoán session bằng brute-force. Mã định danh phiên làm việc ngắn hơn khiến ứng dụng dễ bị tấn công bằng brute-force.

Giới hạn tối thiểu cho số lượng mã định danh phiên (session identifier) hợp lệ mà kẻ tấn công có thể đoán được là số lượng người dùng đang hoạt động trên trang web tại một thời điểm nhất định. Tuy nhiên, nếu có người dùng rời khỏi phiên mà không đăng xuất, con số này sẽ tăng lên. (Đây là một trong những lý do nên đặt thời gian tự động hết hạn phiên ngắn khi người dùng không hoạt động).

Với mã định danh phiên 64 bit và giả sử có 32 bit entropy (mức độ ngẫu nhiên của mã), nếu kẻ tấn công có thể thử đoán 1.000 lần mỗi giây và có 10.000 mã định danh phiên hợp lệ tại thời điểm đó, thời gian trung bình để đoán thành công một mã định danh phiên hợp lệ là dưới 4 phút.

Bây giờ giả sử một mã định danh phiên 128 bit có 64 bit entropy. Với một trang web rất lớn, kẻ tấn công có thể thử đoán 10.000 lần mỗi giây và có 100.000 mã định danh phiên hợp lệ để đoán. Trong trường hợp này, thời gian trung bình để đoán thành công mã định danh phiên hợp lệ sẽ vượt quá 292 năm.

Điều này cho thấy rằng việc sử dụng mã định danh phiên dài hơn và có mức entropy cao hơn sẽ giúp tăng độ bảo mật đáng kể, làm cho kẻ tấn công khó khăn hơn nhiều trong việc đoán ra mã định danh hợp lệ.


Ví dụ minh họa

Mã ví dụ XML sau đây là một deployment descriptor cho một ứng dụng web Java được triển khai trên Sun Java Application Server. Deployment descriptor này bao gồm một thuộc tính cấu hình phiên để cấu hình độ dài ID phiên.


Deployment descriptor này đã đặt độ dài ID phiên cho ứng dụng web Java này thành 8 byte (hoặc 64 bit). Độ dài ID phiên cho các ứng dụng web Java phải được đặt thành 16 byte (128 bit) để ngăn kẻ tấn công đoán và/hoặc đánh cắp ID của session và chiếm quyền điều khiển phiên của người dùng.

Lưu ý đối với hầu hết các máy chủ ứng dụng bao gồm Sun Java Application Server, độ dài ID phiên theo mặc định được đặt thành 128 bit và không được thay đổi. Và đối với nhiều máy chủ ứng dụng, độ dài ID phiên không thể thay đổi từ cài đặt mặc định này. Kiểm tra tài liệu máy chủ ứng dụng của bạn để biết cài đặt mặc định về độ dài ID phiên và các tùy chọn cấu hình để đảm bảo rằng độ dài ID phiên được đặt thành 128 bit.

Xin lưu ý đây là bản dịch sang tiếng Việt để bạn tham khảo, để tìm hiểu chính xác và chi tiết hơn thì vui lòng xem thêm tài liệu gốc của MITRE Corporation trong phần mục Tham khảo.

Tham khảo

  • [REF-6] Katrina Tsipenyuk, Brian Chess and Gary McGraw. "Seven Pernicious Kingdoms: A Taxonomy of Software Security Errors". NIST Workshop on Software Security Assurance Tools Techniques and Metrics. NIST. 2005-11-07. <https://samate.nist.gov/SSATTM_Content/papers/Seven%20Pernicious%20Kingdoms%20-%20Taxonomy%20of%20Sw%20Security%20Errors%20-%20Tsipenyuk%20-%20Chess%20-%20McGraw.pdf>.
  • [REF-482] Zvi Gutterman. "Hold Your Sessions: An Attack on Java Session-id Generation". 2005-02-13. <https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/gm05.pdf>. URL validated: 2023-04-07.
  • CWE-6: J2EE Misconfiguration: Insufficient Session-ID Length trên trang chính thức của CWE MITRE Corporation <https://cwe.mitre.org/data/definitions/6.html>


Không có nhận xét nào

Được tạo bởi Blogger.