LOZI.VN đã “vô ý” để lộ dữ liệu 2 triệu người dùng như thế nào?
Trong quá trình viết series Bảo mật nhập môn , mình vẫn hay đi nghịch dạo, tìm lỗi bảo mật dạo theo tinh thần “code dạo” của blog. Lẽ tất nhiên, đã tìm lỗi thì phải tìm các trang to to, nhiều người dùng một tí, chứ trang nho nhỏ thì ai quan tâm. Là developer, mình ...
Trong quá trình viết series Bảo mật nhập môn, mình vẫn hay đi nghịch dạo, tìm lỗi bảo mật dạo theo tinh thần “code dạo” của blog. Lẽ tất nhiên, đã tìm lỗi thì phải tìm các trang to to, nhiều người dùng một tí, chứ trang nho nhỏ thì ai quan tâm.
Là developer, mình không đủ giỏi về mạng hay hạ tầng để có thể tấn công server hay DDOS gì gì đó. Vì vậy, mình quyết định chỉ kiểm tra web và app, hai thứ mình rành nhất. Việt Nam nói là làm, mình bắt đầu truy cập website của app của 1 số ông lớn như tiki, lazada, foody….
Việc dò lỗi cũng giống như câu cá vậy, đôi khi câu được cá bự, đôi khi câu cả buổi không được con nào. Kì này, mình câu được một con cá nho nhỏ mà… nguy hiểm của lozi.vn.
Dò tìm từ web
Khi vào giao diện lozi.vn, đập vào mắt mình là lỗi bự nhất: không có HTTPS!
Nói đơn giản, lướt web có thông tin quan trọng mà không có HTTP cũng giống như các bạn đi mát xa, nhầm, đi chịch mà không dùng BCS vậy. Hacker có thể chôm dữ liệu của bạn trong nháy mắt khi bạn không hay biết gì. (Xem thêm về độ bảo mật của giao thức HTTP).
Tiếp theo, mình bắt đầu nghịch ngợm bằng cách … mở Chrome Developer Tool. Đừng coi thường nó nhé, công cụ này “bá đạo” lắm đấy. Chà, thử xem ta có gì nào?
Một loạt hàm AJAX dạng get, truyền vào username và lấy thông tin user. Đặc biệt hơn, trong JSON hàm này trả về bao gồm cả thông tin nhạy cảm như địa chỉ cá nhân, ngày tháng năm sinh, e-mail.
Hàm GET này không có authentication, nên mình hoàn toàn có thể lần lượt thay username vào và lấy thông tin của toàn bộ user. Tuy nhiên, việc test lần lượt từng username khá lâu, nên cách này không khả thi lắm.
Làm sao tiếp tục? Mình bắt đầu chuyển qua nghịch… ứng dụng mobile của lozi.
Đến app mobile
Có một sự thật “nho nhỏ” mà ít bạn biết là: Mặc dù mình hay viết bài về C# và JavaScript nhưng thật ra mình cũng khá rành Java và Android đấy nhé. Thôi không khoe nữa, quay lại bài nào.
Việc nghịch ứng dụng cũng không quá phức tạp. Mình chỉ cần lên apkpure.com tải file apk, sau đó dùng tool decompile là đã có source code ứng dụng android của lozi rồi.
Có vẻ lúc publish, team lozi chưa obfuscate code nên code vẫn y nguyên. Do team code rất đúng chuẩn OOP và SOLID nên cũng không quá khó khăn để mình lục tìm đoạn code gọi API của lozi. Đoạn code khiến mình chú ý chính là đoạn gọi API SearchUser.
API này có dạng GET nên mình không cần thêm thông tin gì. Bật Postman lên, nhập url của API vào và … bingo. Thông tin 2 triệu người dùng đây rồi.
Quá trình xử lý lỗi
Tối thứ 4 ngày 16/11, mình tìm ra lỗi này, bắt đầu liên hệ với lozi.vn.
Chiều thứ 6 ngày 18/11, mình nhận được reply từ fanpage của lozi. Khoảng 5 phút sau khi mình gửi mail cho team lozi thì lỗi đã được fix ngay lập tức.
Ngay sáng thứ 7 ngày 19/11, mình đã nhận được mail reply rất tận tình của người chịu trách nhiệm dù đang là thứ 7. Hoan hô lozi. Thái độ làm việc khác hẳn với bên lotte cinema, bơ mình hơn nửa tháng trời.
Khoảng 4,5 ngày sau khi mình báo cáo lỗi thì lozi cũng đã cập nhật https và thêm token cho các API rồi nhé.
Nhận xét
Trong suy nghĩ chung của developer, các RestAPI này thường bị ẩn đi, người dùng không thấy nên không thế nghịch được. Tiếc thay, developer và hacker có thể dễ dàng decompiler app và “nghịch ngợm” các API này.
Thật ra, không chỉ có team lozi mà đa phần các team khác cũng khá thiếu cảnh giác về việc bảo mật API. Điển hình là vụ CGV lộ 3 triệu người dùng cũng do API mobile. Tuy nhiên, team Foody và Lozi đã bảo mật API khá tốt, mình nghịch thử mà không thu được kết quả gì.
Điều đáng nói qua sự việc này là: các lỗ hổng bảo mật này thuộc loại vô cùng cơ bản, mình là dân “tay ngang” có thể khai thác mà không cần tool chuyên dụng (Kali Linux, Tool Penetration Test), chỉ cần Chrome và SublimeText.
Các hệ thống lớn mà đôi khi còn lỏng lẻo kiểu này, liệu dữ liệu của chúng ta có an toàn khi các hacker “chuyên nghiệp” ra tay??
Với cái “tâm” của người developer, mình liên lạc ngay với bên lozi để xử lý. Điều gì sẽ xảy ra nếu người tìm ra lỗi này không phải là mình mà là một hacker “có tâm”, sẵn sàng cào hết dữ liệu về rồi chia sẽ hoặc bán cho các công ty khác, hoặc các công ty đối thủ cạnh tranh với lozi.
Làm sao để phòng chống chuyện này? Chịu khó đọc hết series Bảo Mật nhập môn trên toidicodedao nhé. Những lỗ hổng dạng này và cách phòng tránh đều được nêu rõ trong series đấy.
Lưu ý: Việc post bài của mình cũng chỉ mang tính chất và cảnh tỉnh chứ không có ý khoe khoang hãy gì khác.
Với các hacker “có tâm”, họ phải lên kế hoạch tấn công, hoặc phải tốn công sức nghiên cứu để tìm được lỗ hổng chưa ai tìm ra. Hành động của mình chỉ là đi mày mò, nghịch ngợm các lỗi sơ đẳng của developer, tính ra cũng chẳng có gì tự hào để phải khoe cả ;)).
Bất kì một hành động tấn công, phá hoại hệ thống nào nhằm “thể hiện” đều là những hành động trẻ trâu, thiếu suy nghĩ, có thể dẫn đến “tình tiền tù tội”. Các bạn nhớ suy nghĩ cẩn thận trước khi hành động nhé.
Techtalk via toidicodedao