Nội dung dưới đây hoàn toàn là hư cấu.
Trong lúc đang lướt app mobile của một brand nọ, tôi bỗng nổi hứng muốn.. hack thử xem có mò được cái gì không.
Thế là tôi đi tải file .apk của cái app về, decompile và bắt đầu mò mẫm trong cái mớ obfuscated code đó. Theo thói quen thì đầu tiên là đi tìm mấy cái API endpoint, rồi tiếp tục dò xem backend có cửa để chọc vào không.
Không có gì cả (hoặc là tôi nghĩ thế).
Tiếp tục mò trong đống code, tôi tìm ra một cái email của developer phát triển nên cái app của brand nọ. Domain của email không phải là domain của brand. Như vậy là brand không có team in-house mà thuê một công ty khác code app cho họ (công ty X), cũng là chuyện thường thấy.
Đến đây thì mọi việc trở nên thú vị. Tôi thử vận may bằng cách tìm git server của công ty X, và bingo, trên git server đó có public một cái infras repo, trong đó có hướng dẫn build và deploy lên server docker registry, và cái registry này không yêu cầu authentication.
Tiếp tục mò mẫm trên docker registry, tôi đã pull được production image về. Extract cái image ra và bingo lần 2, tôi đã tìm ra file firebase_admin.json
. Đây là một lỗi thường thấy của các developer khi đặt secret credential vào trong production image.
Sử dụng firebase_admin
trên, tiếp tục pull được các storage bucket trên Google Cloud, trong đó có bucket dùng để backup production database.
Đến đây thì đã có thể coi như thành công, nhưng tôi muốn thử xem có thể đi xa hơn được nữa không.
Vậy là tiếp tục mò mẫm trong mớ database và tôi đã tìm ra trong table log có lưu cả mật khẩu của user khi submit login. Lại một bad practice nữa đến từ đội dev.
Search trên cái log này tôi đã tìm ra được mật khẩu của anh coder ở trên. Và cũng như tôi và bao người bình thường khác, thường sử dụng chung mật khẩu.
Sử dụng mật khẩu này, tôi login được vào git server của công ty X, và ở đó có đầy đủ source code cả backend lẫn frontend của không chỉ brand nọ mà còn nhiều brand khác.
Đến đây chắc dừng được rồi, nhưng nếu muốn đi xa hơn nữa thì có thể làm gì? Phần này dành cho bạn đọc tự tìm hiểu.
Hy vọng qua câu chuyện tôi “bịa” ra ở trên, các bạn developer sẽ có tư duy bảo mật tốt hơn. Còn các bạn pentester thì, uhm, nhớ cẩn thận, ở VN được trả lịch chứ không được trả bug bounty đâu.