WhiteHat News #ID:2112
VIP Members
-
16/06/2015
-
83
-
672 bài viết
Tấn công timing để kiểm tra sự tồn tại của các gói NPM riêng tư
Công ty Aqua Security phát hiện, kẻ tấn công nắm trong tay danh sách tên gói có thể tấn công timing để xác định xem một tổ chức có tạo ra các gói NPM vốn không thể truy cập công khai hay không.
Khi đã xác định được sự tồn tại của một gói riêng tư, kẻ tấn công có thể thực hiện tấn công chuỗi cung ứng bằng cách tạo ra các gói công khai giả dạng là các gói hợp pháp và lừa nhân viên cũng như người dùng tải xuống.
Theo Aqua, vấn đề nằm ở lỗi '404 Not found' mà API của NPM phản hồi khi người dùng chưa được xác thực gửi yêu cầu nhận thông tin về gói riêng tư.
Bất kể gói đã tồn tại hay chưa, phản hồi đều giống nhau, nhưng tin nhắn được gửi nhanh hơn nhiều nếu gói chưa tồn tại. Tuy nhiên, kẻ tấn công sẽ cần gửi nhiều yêu cầu liên tiếp để nhận thấy sự khác biệt trong thời gian phản hồi.
“Nếu hacker gửi khoảng năm yêu cầu liên tiếp về thông tin một gói riêng tư, sau đó phân tích thời gian cần thiết để NPM trả lời, thì hacker có thể xác định gói riêng tư có tồn tại hay không”.
Trên thực tế, bằng cách phân tích thời gian cần thiết để API của NPM gửi thông báo '404 Not found', kẻ tấn công có thể xác định gói có tồn tại (đã tồn tại và hiện đã bị xóa hay vẫn tồn tại) hay chưa bao giờ được tạo ra.
“Do đó, chúng tôi giả định lỗ hổng này được nhúng trong kiến trúc của API và là kết quả của cơ chế lưu vào bộ nhớ đệm”, Aqua lưu ý.
Kẻ tấn công trước tiên cần thực hiện tấn công guessing hoặc dictionary, tìm kiếm các gói công khai đã bị xóa khi chuyển sang chế độ riêng tư, hoặc cần ánh xạ tất cả các gói trên NPM không có gói công khai và tạo các gói độc hại giả cùng tên.
Tiếp theo, kẻ tấn công có thể sử dụng danh sách đã được lập để tấn công timing nhằm xác định các gói riêng tư và, nếu không có gói NPM công khai nào cùng tên tồn tại, có thể tạo các gói riêng để thực hiện tấn công chuỗi cung ứng.
Sau khi được báo cáo, GitHub cho biết hành vi này phù hợp với kiến trúc API của NPM và không thể ngăn chặn được các cuộc tấn công timing.
Khi đã xác định được sự tồn tại của một gói riêng tư, kẻ tấn công có thể thực hiện tấn công chuỗi cung ứng bằng cách tạo ra các gói công khai giả dạng là các gói hợp pháp và lừa nhân viên cũng như người dùng tải xuống.
Theo Aqua, vấn đề nằm ở lỗi '404 Not found' mà API của NPM phản hồi khi người dùng chưa được xác thực gửi yêu cầu nhận thông tin về gói riêng tư.
Bất kể gói đã tồn tại hay chưa, phản hồi đều giống nhau, nhưng tin nhắn được gửi nhanh hơn nhiều nếu gói chưa tồn tại. Tuy nhiên, kẻ tấn công sẽ cần gửi nhiều yêu cầu liên tiếp để nhận thấy sự khác biệt trong thời gian phản hồi.
“Nếu hacker gửi khoảng năm yêu cầu liên tiếp về thông tin một gói riêng tư, sau đó phân tích thời gian cần thiết để NPM trả lời, thì hacker có thể xác định gói riêng tư có tồn tại hay không”.
Trên thực tế, bằng cách phân tích thời gian cần thiết để API của NPM gửi thông báo '404 Not found', kẻ tấn công có thể xác định gói có tồn tại (đã tồn tại và hiện đã bị xóa hay vẫn tồn tại) hay chưa bao giờ được tạo ra.
“Do đó, chúng tôi giả định lỗ hổng này được nhúng trong kiến trúc của API và là kết quả của cơ chế lưu vào bộ nhớ đệm”, Aqua lưu ý.
Kẻ tấn công trước tiên cần thực hiện tấn công guessing hoặc dictionary, tìm kiếm các gói công khai đã bị xóa khi chuyển sang chế độ riêng tư, hoặc cần ánh xạ tất cả các gói trên NPM không có gói công khai và tạo các gói độc hại giả cùng tên.
Tiếp theo, kẻ tấn công có thể sử dụng danh sách đã được lập để tấn công timing nhằm xác định các gói riêng tư và, nếu không có gói NPM công khai nào cùng tên tồn tại, có thể tạo các gói riêng để thực hiện tấn công chuỗi cung ứng.
Sau khi được báo cáo, GitHub cho biết hành vi này phù hợp với kiến trúc API của NPM và không thể ngăn chặn được các cuộc tấn công timing.
Theo Security Week