Tôi đã kiếm được $3133.70 từ Google như thế nào?

Một bug tưởng chừng như đơn giản nhưng lại không hề đơn giản chút nào khi bạn cần phải là… người Việt. Chắc hẳn các bạn đã đọc qua các bài series write-up về bug của một công ty X thông qua Prisma GraphQL.

Ngoc Khanh
Ngoc Chanh

Thì hôm nay mình sẽ tiếp tục series tản mạn với bug Cross-Site Scripting (XSS) trên tên miền translate.google.com của Google. (Xem chi tiết về XSS trên https://en.wikipedia.org/wiki/Cross-site_scripting)

2h sáng cùng với thời tiết mùa đông ở Hà Nội khi mà mọi người đã yên giấc thì mình vẫn còn đang say mê với công việc hằng ngày, sau khi hoàn thành công việc thì cũng đã 2h45.

Quyết định “giải trí” một chút rồi mới đi ngủ, nhưng mình lại gặp vấn đề về ngôn ngữ khi tìm kiếm phim. Trong lúc dịch tên phim từ Tiếng Việt sang Tiếng Anh trên translate.google.com thì mình đã vô tình phát hiện ra một vấn đề mà tính năng “gợi ý từ” (tại ngôn ngữ chính Vietnamese) của Google Translator mắc phải như hình dưới.

Vấn đề mà tính năng gợi ý từ của Google Translator
Vấn đề mà tính năng gợi ý từ của Google Translator

Lúc này mình thử F12 ở trình duyệt để mở công cụ DevTools và kiểm tra thì mình phát hiện là đoạn HTML mình chèn vào ở trên đang được thực thi.

HTML mình chèn vào ở trên đang được thực thi
HTML mình chèn vào ở trên đang được thực thi

À há thì ra Google chưa lọc và mã hoá các thẻ HTML trong tính năng này. Vậy là mình có thể khai thác XSS ở đây rồi. Mình đã thử đổi ngôn ngữ chính sang ngôn ngữ khác nhưng không khả thi, vì các thẻ HTML được mã hoá và lọc ra. Lỗi này xuất hiện khi bạn chọn ngôn ngữ chính là Vietnamese.

Tiếp tục với các đoạn HTML khác để nhằm tạo ra bảng thông báo để hiển thị ra tên miền và phiên làm việc của người dùng. (Cái khó của việc này là phải canh được độ dài và ký tự hợp lý để Translator hiển thị ra “gợi ý từ”).

Và cuối cùng thì mình cũng mò được đoạn XSS như ý (Xem hình dưới khi đoạn xss thực thi để tạo ra một hộp thoại thông báo):

Đoạn XSS như ý
Đoạn XSS như ý
 <iframe onload="javascript:prompt(document.domain, document.cookie)" id="xss" role="xss">hello xss

Video PoC (Proof of Concept) trên Chrome và Firefox phiên bản mới nhất:

Nhưng liệu Google có chấp nhận lỗ hổng này?

Nếu Google sử dụng phương thức POST thay vì GET để lấy kết quả gợi ý thì có phải nó là sẽ không được chấp chận không? Vì đoạn mã đó bạn phải gửi cho nạn nhân thì nó mới thực thi mà, mà liệu rằng bạn gửi cho nạn nhân đoạn mã đó thì họ cũng sẽ thực hiện nó chứ?
Address URL hiển thị trên trình duyệt:

https://translate.google.com/?hl=en#view=home&op=translate&sl=vi&tl=en&text=%3Ciframe%20onload=%22javascript:alert(document.domain)%22%20id=%22xss%22%20role=%22xss%22%3Ehello%20xss

Lúc này mình nhìn lên địa chỉ url ở trình duyệt thì để ý các tham số được truyền vào.

&sl=vi => Ngôn ngữ chính

&tl=en => Ngôn ngữ sau khi dịch

&text => Đoạn văn bản

Thế là mình nghĩ chắc chắn sẽ được, mình chỉ cần mã hoá đoạn thực thi XSS rồi truyền vào tham số TEXT ở trên và gửi liên kết cho nạn nhân là đủ.

Sau khi có đủ cơ sở về bug và mình đã gửi một báo cáo lên Google. Nhưng sau đó lại nhận được phản hồi của Google là không cho đó là bug vì tên miền nằm trong “sandbox domains” và họ cho rằng nó không hợp lệ, nên đã thay đổi trạng thái thành “Won’t Fix (Intended Behavior)”.

Intended Behavior
Intended Behavior

Lúc này mình khá buồn, nhưng không sao mình đã vào đọc lại để tìm kiếm thông tin về việc tên miền “sandbox”.

Tên miền sandbox
Tên miền sandbox

Mình xin nói sơ qua về “sandbox domains” chút.

Sandbox domains – Thường được dùng để chứa tất cả nội dung bao gồm luôn cả các nội dung có chứa virus, malware, trojan….và nó không ảnh hưởng đến những máy chủ khác. Nó được tách biệt ra khỏi máy chủ chính có chứa dữ liệu của người dùng. Do đó nó là an toàn.

Nhưng lạ thay là tên miền “translate.google.com” không có trong danh sách đó, và mình chắc chắn rằng nó hợp lệ. mình đã gửi đi 2 phản hồi để chứng minh việc nhầm lẫn của họ.
Sau 7 ngày kể từ lúc mình gửi 2 phản hồi thì không thấy họ phản hồi gì thêm, nên mình tiếp tục phản hồi thêm lần nữa, và kết quả là họ đã xem xét lại thay đổi trạng thái cho mình và chấp nhận đó là bug và họp team để đánh giá mức độ cũng như việc đưa ra mức tiền thưởng cho bug này.

Cuối cùng mình xin gửi lời cảm ơn đến một số anh/em và một số thành viên trong nhóm

“Cộng đồng săn tiền thưởng”, trong suốt quá trình gửi phản hồi để chứng minh về việc nhầm lẫn này và tạo điều kiện cho mình có thêm động lực để chứng minh.

Timeline:

  • 14/11/2019 14:05 – Mình gửi báo cáo
  • 14/11/2019 20:29 – Nhận được phản hồi của Google, nhưng bị phản hồi là “Won’t Fix (Intended Behavior)”.
  • 14/11/2019 21:29 – Mình cung cấp thêm thông tin
  • 15/11/2019 00:36 – Mình chứng minh tên miền đó là hợp lệ.
  • 21/11/2019 23:23 – Mình tiếp tục chứng minh tên miền hợp lệ và gửi kèm một video PoC.
  • 22/11/2019 00:12 – Google thay đổi trạng thái và xác nhận đó và đánh giá lại bug.
  • 28/11/2019 01:20 – Google thông báo mức tiền thưởng là $3133.70
  • 23/12/2019 03:47 – Google phản hồi đã fix bug.

Nguồn:  Ngoc Chanh

guest
0 Comments
Inline Feedbacks
View all comments