Lỗ hổng bảo mật làm lộ thông tin người dùng từ một ứng dụng web tại Việt Nam

Vào một ngày mưa gió cuối tuần, trong lúc đang thất nghiệp, mình có nhiều thời gian nên lục lại các target và bắt đầu mày mò về target có vẻ là dễ nhất. Vì bug này vẫn chưa được tổ chức này fix nên mình tạm gọi target này là N.

Lúc đầu mình thử một số query SQLi nhưng vì chưa đào sâu và chưa đủ kiến thức về SQLi nên mình bị stuck một thời gian, mình quyết định sẽ recon cẩn thận web này.

Sau quá trình bruteforce directory và file sơ bộ bằng dirbuster thì mình có một directory structure kiểu như này:

Folder API.

Hồi giờ đọc blog của mấy hacker idol cũng thấy có mấy vụ leak data từ API mà lúc đó cũng đọc cho vui thôi chứ chưa biết API là gì cả. Đến bây giờ lúc mình có target rồi mới bắt tay vào tìm hiểu =]].

Mình bắt đầu test API login. Sau vài lần thử với những tài khoản mình đã có sẵn thì mình phát hiện ra API vẫn trả về kết quả mặc dù giá trị của FCMtoken là bao nhiêu đi nữa.

API login

Mặt mình lúc đó như này :v

Theo như những gì mình research được thì nguyên nhân của bug này xuất phát từ một thánh nào đó code phần verify param trong request chỉ verify token khác null chứ không kiểm tra token có valid hay không.

Vậy từ lỗ hổng này ta có thể khai thác được gì?

Với lỗ hổng này cùng với việc Nkhông có cơ chế lock user sau nhiều lần đăng nhập sai password nên có thể lợi dung API này để bruteforce nhằm dò password của user. Nhưng vì ở trang này, những user lần đầu đăng nhập sẽ có cùng 1 mật khẩu mặc định và username nằm trong tổ hợp một số bộ data mà mình tạo ra sẵn nên mình quyết định bruteforce username để lấy list token.

Để lấy list token thì mình lại phải học về regex để lọc thông tin từ các response trả về :v nên lại có thêm kiến thức mới :D.

List token trả về sẽ kiểu như này:

Mỗi token là authorization token của 1 user

Sau khi có được list token mình nghĩ rằng API GetUserInfo sẽ nhận vào token được trả về sau khi đăng nhập nên mình dùng thử 1 token để thử, mình bàng hoàng nhận ra server trả về toàn bộ Info của user này.

Mặt mình lúc đó chuyển sang thế này:

Sau khi crawl hết danh sách list token mà mình có và tìm MAX của ID thì giá trị bằng 84437, có nghĩa là con số data thực tế sẽ lớn hơn 84437 user vì bộ data sida của mình mới chỉ thu về được số ít trong này mà thôi.( vì mình không thấy có API search user và cũng không có source code các API này nên chưa thể có được danh sách toàn bộ user).

Vẫn là mặt mình, cơ mà lúc đó thì cảm giác như thế này:

Vì mình muốn crawl nhiều hơn nên mình quyết định điều tra thêm, ở response trả về thông tin user có thêm 1 param chứa username của những user trong hệ thống, trong đó có username của admin. Mình scan port của host đó và phát hiện 1 trang dashboard dành riêng cho những người trong hệ thống ở port 8010( sorry các bạng vì mình quên chụp hình). Mình quyết định thử nhân phẩm bằng cách nhập username và password cùng 1 giá trị đã lấy được trước đó. Không biết vì lý do nhân phẩm mình quá cao hay web đó quá thiếu ý thức về security nên ở lần thử đầu tiên thành cmn công luôn =)).
Vào được quyền admin rồi thì mình chỉ việc download danh sách user trên hệ thống thôi :v số lượng user thật sự đến lúc đó là hơn 100000 user. Để chắc ăn đề phòng trường hợp hệ thống log lại hoạt động của mình( thực tế là có log), mình vào phần cài đặt role và add thêm 1 user hệ thống với role là admin để sau này ông admin kia có đổi mật khẩu thì mình vẫn còn cửa khác để vào :3 .

Mình đã soạn report gửi cho bên họ và nhận lại 1 lời cảm ơn nồng thắm và âm thầm fix như một ninja.

#vicongdong

Một số cách mitigation:

- Lọc bớt thông tin trả về từ API, chỉ hiển thị tên và một số thông tin cần thiết, không kèm thông tin nhạy cảm.

- Hạn chế requets từ 1 IP.

- …

Như vậy ta có thể thấy từ một lỗi nhỏ như vậy, với một noober như mình vẫn có thể crawl được nhiều dữ liệu thì đối với những hacker thực sự thì những gì họ có thể làm là nhiều hơn rất nhiều.

Lưu ý: Việc post bài của mình cũng chỉ mang tính chất cảnh tỉnh và hi vọng mang lại cho các bạn một số ít kiến thức mình có chứ không có ý khoe khoang hay gì khá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 bản thân” đều là những hành động ngu dốt, thiếu suy nghĩ có thể đưa các bạn đứng trước vành móng ngựa. Hãy suy nghĩ cẩn thận trước khi hành động nhé!

Mình đã học được rất nhiều từ cộng đồng mạng nên mình viết bài này để xem như là “Sharing is learning” vì khi viết blog thì người học được nhiều nhất là mình :D . Cảm ơn các bạn đã đọc bài! Happy Hacking!!!

A noob hacker hack to learn to protect noob apps from another noob hackers!

A noob hacker hack to learn to protect noob apps from another noob hackers!