Lổ hổng tracking số điện thoại của các nhà mạng khi dùng 2G/3G/4G

Giới thiệu

Mấy hôm nay rảnh toàn lướt F17 voz đọc truyện với soi gái thì bỗng dưng gặp cái thớt này: https://forums.voz.vn/showthread.php?t=7372161

Tóm tắt cho bạn nào lười đọc: Chủ thớt sau khi lướt xem tin tức ô tô thì vài tiếng sau đã có những cuộc gọi chào mời mua bán. Câu hỏi đặt ra ở đây là tại sao những trang web đó có thể tracking được số của người dùng để gọi điện tới?

Mình thì khá thích thú các vụ về privacy như này nên quyết định mở một cuộc điều tra nho nhỏ xem điều trên có khả thi hay không. Nào cùng bắt đầu thôi!

Bắt tay vào điều tra

Trước khi bắt đầu điều tra, mình đặt ra 2 giả thuyết như sau:

  • Giả thuyết 1: Nhà mạng "đi đêm" với các trang tin tức kiểu này mà cung cấp cho họ một công cụ gì đó để tìm ra số điện thoại.
  • Giả thuyết 2: Nhà mạng tồn tại một lổ hổng "nào đó". Mình thiên về giả thuyết này hơn vì khi mình sử dụng 3G/4G, các nhà mạng cung cấp nhiều dịch vụ như xem phim, xem clip, đọc tin tức,... đăng kí theo gói ngày hoặc tháng. Điều đáng chú ý là những trang web này khi truy cập vào thì sẽ hiện ngay số điện thoại của người dùng mà không cần thao tác gì khác. Ai đó có thể lợi dụng các trang web như vậy để gián tiếp tìm ra số điện thoại của người đang truy cập.

Về giả thuyết 1 thì mình đã nhờ chủ thớt ở trên cho mình một vài website đã truy cập trước đây. Sau khi xem xét các request đươc thực hiện khi truy cập cùng và không phát hiện được gì đặc biệt. Tuy điều này không khẳng định được điều gì nhưng không có hướng để điều tra tiếp nên mình đành sang giả thuyết 2 sở trường hơn.

Trước tiên cùng vạch ra phương án khả thi mà kẻ xấu có thể lợi dụng những trang dịch vụ của nhà mạng để track ra số điện thoại:

Đầu tiên hacker tạo ra một website nào đó - gọi là X - sao cho khi người dùng truy cập vào X, trình duyệt của người dùng sẽ request ngầm sang website của nhà mạng và trả kết quả lại cho hacker trên. Vì trong website của nhà mạng có chứa số điện thoại của người dùng, nên từ đó hacker cũng có thể lấy được thông tin này.

Thử code một file html đơn giản hoạt động theo phương thức trên:

Tuy nhiên đâu có đơn giản như vậy, các trình duyệt có cơ chế block những request tới những domain khác. Nên trừ khi server http://tv.vinaphone.com.vn set CORS cho truy cập, thì ngoài ra không có cách nào khác.

Chà tới đây thì khá là bế tắc, mình thử tìm một vài server khác tuy nhiên cũng không có site nào bật CORS cả.

Sau khi cân nhắc kết hợp các phương thức tấn công khác thì mình nghĩ rằng nếu có thể control được site của nhà mạng gửi request tới trang bị chặn trên thì có thể bypass được việc chặn này. Tới đây thì mình nghĩ ngay tới XSS, vì lỗi này rất cơ bản nhưng rất dễ mắc phải và cũng khá nguy hiểm.

Để tìm bug XSS, mình tiến hành tìm tất cả các trang có input của người dùng. Sau đó với các biện pháp thử thì mình sẽ kiểm tra input đó có được filter gì không và in ra html như thế nào. Dưới đây là một trang search khá thú vị.

http://vfilm.vn/Home/filter?keyword=keywork_here

Qua kiểm tra, trang search này chỉ filter các từ khóa như <script></script>, còn những kí tự nguy hiểm như `' và " thì không. Input người dùng nhập vào form sẽ được in ra html như sau:

<input type="text" name="keyword" value="keywork_here" class="in-text-search" placeholder="Từ khóa...">

Nếu ta nhập " autofocus onfocus="alert(1); thì html xuất ra lúc này sẽ trở thành:

<input type="text" name="keyword" value="" autofocus onfocus="alert(1);" class="in-text-search" placeholder="Từ khóa...">

Từ đó, đoạn mã javascript alert(1); javascript sẽ được thực thi trên trình duyệt của người dùng.

Tới đây, mình chỉ cần viết code javascript khiến trình duyệt request tới trang chứa thông tin người dùng và gửi lại cho mình.

Và vì trang web trên cũng không cấu hình chống iframe từ các trang web khác, nên kẻ xấu chỉ cần nhúng link đã chứa mã xấu của trang web trên vào bất kì trang web nào và có thể truy ra ngay số điện thoại của người đang truy cập. Ví dụ như bên dưới:

Đó là nhà mạng Vinaphone, với nhà mạng Mobifone thì mình cũng tìm ra một site tương tự với lổ hổng tương tự (có lẽ cùng source code?), nhưng site này đã được bảo vệ bằng một header chống iframe nên cách khai thác trên là không khả thi. Tuy nhiên, sau một hồi lần mò thì mình phát hiện một site khác của Mobifone khá thú vị. Với website trên thì sử dụng thêm header để bảo mật hơn, còn website này thì dường như dùng thêm thêm header để "kém bảo mật" hơn. Mình để đây và không nói gì hơn :))

Với nhà mạng Viettel, mình cũng tìm được một lổ hổng tương tự:

Kết luận

Tới đây thì giả thuyết 2 đã được chứng minh. Ngay bây giờ vớ bất kì người dùng nào truy cập bằng 2G/3G/4G, mình đều có thể tracking được số điện thoại của người đó ở cả 3 nhà mạng phổ biến ở Việt Nam. Điều đáng nói ở đây là hiện có rất nhiều trang web dịch vụ của (hoặc hợp tác với) nhà mạng đang hoạt động và chỉ cần 1 trong số chúng bị dính lổ hổng bảo mật, thì kẻ xấu đã có thể khai thác để tracking ra số điện thoại của người dùng.

Timeline (GMT +7):
  • 15:18 7 tháng 8, 2018: Gửi báo cáo lổ hổng tới email: [email protected]
  • 17:01 7 tháng 8, 2018: Nhận được email phản hồi tích cực, phía VNPT đang cho tiến hành vá lổ hổng.
  • 07:46 11 tháng 9, 2018: Gửi báo cáo lổ hổng của nhà mạng Viettel tới email: [email protected] (vì hiện mình không tìm được email nào khác). Với lổ hổng của nhà mạng Mobifone thì mình chưa thể tìm được cách nào để liên lạc.
  • 08:00 11 tháng 9 2018: Tới thời điểm đăng tải bài viết này thì lổ hổng trên vfilm.vn vẫn chưa được vá.

(Image Credit: CNN)

Seal niêm phong