JavaScript hijacking - Lỗ hổng "chết người" của Web 2.0

  •  
  • 365

Các nhà nghiên cứu về bảo mật đã tìm thấy một dạng tấn công mới thông qua Web chỉ nhằm vào các ứng dụng Ajax đang rất được ưa chuộng trong trào lưu Web 2.0.

Foritfy Software, hãng đã tìm ra lỗ hổng mới trên với tên gọi “JavaScript hijacking” cho rằng hầu hết các bộ công cụ (toolkit) Ajax đều có lỗi này.

JavaScript hijacking cho phép những kẻ tấn công trái phép đọc được dữ liệu nhạy cảm từ các ứng dụng bị lỗi bằng phương pháp tương tự như phương pháp thường được sử dụng để tạo các mashup (một dạng ứng dụng web kết hợp ít nhất hai dịch vụ từ các trang Web khác hẳn nhau)” – Chess viết trong một tài liệu hướng dẫn (whitepaper) đã được công bố.

Mọi người đều cho rằng sự phát triển của mô hình lập trình Web Ajax chỉ có thể làm gia tăng các lỗi bảo mật đã có. Rất ít người nghĩ nó có khả năng gây ra một lỗi bảo mật mới, Brian Chess, “kiến trúc sư trưởng” của Fortify nói.

Phương pháp thiết kế ứng dụng web Ajax sử dụng cách thức truyền dữ liệu dưới nền của mỗi trang, không cần thiết phải làm mới (refresh) toàn bộ lại trang mà người dùng đang tương tác. Điều này tạo cho người dùng cảm giác các ứng dụng Web giống như các ứng dụng desktop. Gmail là một trong các ứng dụng Web như thế.

Bằng cách khai thác các lỗ hổng “JavaScript hijacking”, kẻ tấn công có thể lấy được thư từ hộp thư Gmail của nạn nhân hoặc có thể truy cập dữ liệu được truyền qua ứng dụng Ajax.

Mặc dù Ajax là viết tắt của “Asynchronous JavaScript and XML” (JavaScript không đồng bộ và XML) nhưng không nhất thiết phải sử dụng XML để truyền tải. Bạn có thể sử dụng HTML, văn bản không định dạng (plaintext) hoặc JavaScript.

Theo Chess, vấn đề nằm ở chính chỗ này. Khi ứng dụng sử dụng định dạng dữ liệu JavaScript (viết tắt là JSON) thay vì XML để truyền dữ liệu giữa trình duyệt và máy phục vụ Web, nó sẽ được trình duyệt xử lý theo một cách khác với thông thường.

Các trình duyệt sử dụng các qui tắc để hạn chế nơi dữ liệu HTML được miền gửi tới gọi là “chính sách cùng một nguồn” ("same origin policy"), nhưng qui tắc này bị bỏ qua khi dữ liệu có dạng JavaScript.

Một website hoàn toàn có khả năng chạy các dữ liệu JavaScript đang đặt trên một miền khác. Đây là kĩ thuật được sử dụng trên các ứng dụng Google Adsense hay Google Maps.

Hiện tại Fortify khẳng định rằng kẻ tấn công có thể khai thác lỗ hổng này để đăng nhập vào các ứng dụng Ajax, đóng giả là các nạn nhân và nhận dữ liệu mà ứng dụng này cung cấp bình thường dưới dạng JSON.

Ví dụ về một trường hợp tấn công, một nạn nhân khi đã xác thực vào ứng dụng Ajax sẽ có phần cookie đăng nhập trên trình duyệt của mình, sau đó nạn nhân này bị lừa truy cập vào trang web của kẻ tấn công. Trang web này có chứa các đoạn mã JavaScript thực hiện các lời gọi tới ứng dụng Ajax. Dữ liệu nhận được từ ứng dụng sẽ được gửi đến cho kẻ tấn công.

Nếu ứng dụng Ajax là một dịch vụ Webmail, kẻ tấn công có thể lấy được nội dung của hộp thư đến hoặc sổ địa chỉ. Thực vậy, các nghiên cứu này của Fortify đã dựa trên kết quả tìm thấy được trước đó của Jeremiah Grossman về lỗi tương tự trong ứng dụng Gmail vào năm ngoái.

Theo Fortify, có 11 trong số 12 nền tảng (framework) họ đã kiểm tra không có khả năng chống đỡ được những tấn công dạng này. Tuy nhiên công ty này đã không kiểm thử trên các ứng dụng đang hoạt động.

Các nền tảng bị lỗi gồm có: Microsoft ASP.NET AJAX (còn gọi là Atlas), XAJAX và Google Web Toolkit, Prototype, Script.aculo.us, Dojo, Moo.fx, jQuery, Yahoo! UI, Rico, và MochiKit.

Theo Chess, những nhà cung cấp này đã được thông báo và họ sẽ sửa lỗi trong những thư viện sắp được tung ra. Các trang whitepaper đang được phát hành để giúp những người lập mã đã từng viết các đối tượng Ajax có thể xây dựng thêm các bộ chống đỡ tương tự.

Vì Ajax đang ở thời kì đầu, nên đây chưa hẳn là một vấn đề lớn như hiện tượng tràn bộ đệm khi mới được tìm ra, Chess nói. Không có nhiều ứng dụng Ajax lớn cần phải sửa lỗi. Do đó hiện nay Fortify muốn công khai kết quả tìm kiếm của mình càng rộng rãi càng tốt để loại bỏ được vấn đề này ngay từ đầu.

Hợi Lê

Theo CBRonline, VietNamNet
  • 365