XSS inbox.google.com | Thanks to “XYX Check Mail” Chrome extension


TLDR;

02/01/2018 công ty bảo mật XYX ra mắt công cụkiểm tra email có bị rò rỉ thông tin. Tuy nhiên việc cài đặt Chrome Extension mở ra lỗ hổng cho phép attacker có thể tấn công XSS vào trang inbox.google.com. Từ đây attacker có thể chiếm đoạt tài khoản Gmail hay thực hiện các tình huống tấn công nguy hiểm khác.

Introduction

Tình cờ ngày tối qua được một người bạn chia sẻ bài blog công cụ kiểm tra email trong danh sách rò rỉ thông tin của công ty bảo mật XYX, cũng tò mò nên có vọc vạch thử bên trong nó có cái gì hay ho không :D. Trong bài viết có 2 app là app Android và Chrome Extension. Trong bài viết này mình sẽ kể lại quá trình vọc vạch cái extension.

Chrome Extension

Cài đặt Extension vào dùng thử :D.

Xem qua demo thấy cũng khá thú vị đó chứ, view thử source xem sao.

… Nhận ra bất ngờ đầu tiên:

Extension này sử dụng API từ trang thứ 3 haveibeenpwned.com, trong khi trong bài viết không hề đề cập đến việc này.

Mình sẽ không comment gì về vấn đề này, tiếp tục xem code để tìm sạn nào 😀

Có thể nói nôm na cách hoạt động của extension này như sau:


  • Lấy danh sách toàn bộ Email trên trang inbox/gmail
  • Kiểm tra địa chỉ email có tồn tại trong localStorage của trình duyệt, nếu tồn tại, tạo 1 cái InfoDiv kèm ảnh như dưới, nếu di chuột vào ảnh, sẽ show infoDiv ra.
  • Nếu email chưa có trong localStorage, gửi request kèm địa chỉ email lên API https://haveibeenpwned.com/api/v2/breachedaccount/ và thực hiện như bước trên.

Có một vấn đề gặp phải ảnh hưởng đến độ tin cậy của kết quả cũng như ảnh hưởng việc tìm sạn đó là API Rate Limit của trang haveibeenpwned=))


Exploit

Câu hỏi đặt ra: Liệu mình có thể kiểm soát cái $email trong innerHTML kia không để làm cái mà ai cũng biết là cái đấy không?

Rất thú vị là tham số email đó mình có thể kiểm soát được bằng alias address.

Email gửi đi dạng nforma <nforma***@gmail.com>

-> Mục tiêu: nforma <nforma***+[inject_here]@gmail.com>

Đây là kết quả sau nhiều lần thử nghiệm

<nforma***+<img src=x1 onerror=alert(document.domain)>[API][Email_X]@gmail.com>

escape

<“nforma***+<img src=x1 onerror=alert(document.domain)>/../../../../../../../../api/v2/breachedaccount/[Email_X]”@gmail.com>

Final PoC

<nforma***+<img src=x1 onerror=alert(document.domain)>/../../../../../../../../api/v2/breachedaccount/phenslei”@gmail.com

Tại sao lại là phenslei?

Proof of Concept

#1. Thử nghiệm trên mail.google.com

Failllll

Có thể thấy kết quả FAIL do Gmail đã cấu hình CSP (Content Security Policy).

#2. Thử nghiệm trên inbox.google.com

Conclusion

Chrome extension mang đến nhiều tiện lợi cho người dùng nhưng bên cạnh đó cũng mang đến nhiều rủi ro. Chrome extension có thể thực thi JavaScript, thay đổi DOM,… ở bất kỳ trang web nào bạn ghé thăm, hay tận dụng các Chrome API để làm nhiều việc theo trí tưởng tượng của developer. Tuy nhiên developer với mục đích tốt cần cẩn thận hơn khi “vô tình” mở ra lỗ hổng nghiêm trọng đến chính người dùng của mình.

Timeline

Sáng 3/1: Phát hiện vulnerable

Trưa 3/1: Report XYX, XYX đã có biện pháp xử lý ngay

Chiều 3/1: Viết blog, chờ confirmed

Sáng 4/1: Publish

@bakhoang @floppydisk

Leave a Reply

Your email address will not be published. Required fields are marked *