
Trường hợp lộ ảnh từ photobooth - (Ảnh: Đài Phát Thanh)
Khi photobooth trở thành “đối tượng nghiên cứu”
Photobooth đang là một thú chơi rất được giới trẻ yêu thích. Từ sinh nhật, kỷ yếu, Year End Party cho đến đám cưới – ở đâu cũng thấy photobooth xuất hiện. Người yêu mình thì đặc biệt mê, nên nhân tiện chuẩn bị cho ngày trọng đại sắp tới, mình cũng tìm hiểu đôi chút về loại hình dịch vụ này.
Trùng hợp thay, dịp Year End Party vừa rồi công ty cũng tổ chức thuê photobooth về cho anh em chụp ảnh. Không khí rất vui, rất nhiều nụ cười, ảnh chụp xong là có thể in ra ngay lập tức.
Điểm thú vị là ở góc mỗi tấm ảnh đều có một mã QR – quét vào là xem lại ảnh của mình trên website.
Và rồi… với một người làm an ninh mạng, mọi chuyện hiếm khi dừng lại ở mức “xem cho vui”.

QR code và khoảnh khắc “não pentest bật công tắc”
Quét QR code, trình duyệt mở ra một trang web hiển thị đúng bức ảnh vừa chụp. Trải nghiệm mượt, CDN nhanh, giao diện đơn giản.
Nhưng thứ khiến mình chú ý không phải bức ảnh, mà là URL.
- Không yêu cầu đăng nhập
- Không có token phức tạp
- Tên file/ID nhìn có vẻ… rất có quy luật
Một cảm giác quen thuộc xuất hiện: “URL này trông giống thứ mình đã từng khai thác ở đâu đó rồi.”

Thử thay đổi nhẹ phần ID của ảnh trong URL, rồi refresh trang. Kết quả trả về, trước mắt mình hiện ra cả một bức tranh đời sống phong phú: ảnh các cặp đôi tạo dáng tình tứ, ảnh nhóm bạn cười hớn hở, rồi cả ảnh gia đình chụp chung rất đàng hoàng và riêng tư. Tất cả đều mở ra nhẹ nhàng, không cần đăng nhập, không cần xác thực, không cần bất kỳ cơ chế kiểm tra quyền truy cập nào. Chỉ cần đoán đúng ID – hoặc đúng hơn là đoán đủ lâu – là xem được. Và trong khoảnh khắc đó thứ hiện lên trong đầu mình là một danh từ: IDOR

Vậy thì IDOR là gì?
IDOR xảy ra khi:
- Ứng dụng cho phép truy cập trực tiếp tới tài nguyên (ảnh, file, object)
- Dựa vào ID hoặc tên
- Nhưng không xác minh người dùng có quyền truy cập tài nguyên đó hay không

Hệ quả là:
- Chỉ cần đoán hoặc brute-force ID
- Kẻ tấn công có thể xem, tải hoặc thao tác với dữ liệu của người khác
Trong trường hợp photobooth:
- Ảnh là dữ liệu cá nhân
- Nhưng lại được public hoàn toàn chỉ bằng cách thay đổi ID trong URL
Hacker không cần phải “cao siêu”

Điều trớ trêu nhất ở lỗ hổng này là nó không hề đòi hỏi bất kỳ kỹ năng tấn công cao siêu nào. Không cần hiểu sâu về cryptography, không cần exploit memory corruption, thậm chí cũng chẳng cần mở Burp Suite cho có không khí. Một kịch bản tấn công đơn giản đến mức gần như không cần kỹ thuật cao: kẻ tấn công chỉ cần recon sơ bộ hệ thống photobooth, rồi đi chụp ảnh ở vài cửa hàng, tham gia một vài sự kiện, hoặc thậm chí chỉ cần xin được một tấm ảnh bất kỳ từ ai đó. Quét QR code đi kèm là đã có trong tay URL truy cập trực tiếp tới ảnh — điểm khởi đầu quá đủ cho mọi thử nghiệm “tò mò” tiếp theo.
Quan sát thêm vài giây, hacker bắt đầu nhận ra một chi tiết rất quen: ID ảnh tăng đều theo thời gian, ngay ngắn, trật tự và rất… đáng nghi. Từ khoảnh khắc đó, mọi thứ trở nên cực kỳ đơn giản. Chỉ cần một đoạn script ngắn, tăng dần ID, gửi request lặp đi lặp lại, rồi ngồi nhìn ảnh lần lượt tải về.

Không có SQL Injection để khoe kỹ thuật, không có RCE cho báo cáo thêm “hoành tráng”, cũng chẳng cần bypass authentication — vì đơn giản là chẳng hề tồn tại authentication nào để bypass. Toàn bộ câu chuyện chỉ xoay quanh một thứ rất cũ, rất quen, nhưng vẫn luôn hiệu quả: IDOR thuần túy. Một lỗ hổng âm thầm, đủ sức biến cả một thư viện ảnh riêng tư thành album công khai cho bất kỳ ai đủ tò mò… và đủ rảnh.
Photobooth rất hay bị nhìn bằng một ánh mắt khá “dễ dãi”. Nó thường được xếp vào nhóm dịch vụ phụ trợ, hệ thống đơn giản, kiểu “chỉ là mấy tấm ảnh chụp kỷ niệm thôi mà, có gì đâu phải căng”. Chính cách suy nghĩ này khiến photobooth thường bị đứng ngoài những cuộc thảo luận nghiêm túc về bảo mật, như thể nó không đủ quan trọng để phải được bảo vệ tử tế. Nhưng thực tế thì hoàn toàn ngược lại.
Ảnh photobooth không phải là dữ liệu vô thưởng vô phạt; đó là dữ liệu cá nhân (PII), là khuôn mặt thật, là trẻ em, là gia đình, là các cặp đôi trong những khoảnh khắc rất riêng tư và đầy cảm xúc.

Vấn đề càng trở nên khó chịu hơn khi lỗ hổng chỉ lộ diện khi có ai đó đủ tò mò để đặt ra câu hỏi đơn giản: “Nếu mình không phải chủ của tài nguyên này, liệu hệ thống có thực sự quan tâm không?” Và khi câu trả lời là “không”, thì mọi tấm ảnh kỷ niệm bỗng dưng biến thành dữ liệu công cộng lúc nào không hay.
Khi mình táy máy với link ảnh photobooth trong dịp YEP, mình cũng nhận ra hệ thống đã “cẩn thận” hơn một chút: tên file ảnh không còn quá trần trụi mà được gắn thêm timestamp, trông có vẻ phức tạp và an toàn hơn hẳn. Nhưng cảm giác an tâm đó chỉ tồn tại đúng bằng thời gian cần để… nhìn kỹ lại URL. Bởi vì timestamp, suy cho cùng, cũng chỉ là một con số được sinh ra theo quy luật. Chỉ cần quan sát đủ nhiều request, đối chiếu thời điểm chụp, so sánh sự thay đổi của ID, thì bức tranh dần hiện ra rất rõ ràng. Và khi đã tìm được quy luật, mọi “lớp phòng thủ” bỗng trở nên khá tượng trưng: việc khai thác không khó hơn là tăng – giảm vài giá trị, thử lại vài lần, rồi để script làm nốt phần việc còn lại. Nói cách khác, việc thêm timestamp không khiến lỗ hổng biến mất, nó chỉ khiến quá trình khai thác… đỡ nhàm chán hơn một chút.

Tôi tốn 5p để bắt AI viết cái script này:))
Lời nhắn gửi tới những người đứng sau các hệ thống photobooth
Thực ra, để tránh những câu chuyện không đáng có như vậy, hệ thống photobooth không cần đến các giải pháp bảo mật cao siêu hay tốn kém. Chỉ cần làm đúng những điều tối thiểu mà bất kỳ hệ thống xử lý dữ liệu cá nhân nào cũng nên làm ngay từ đầu.
Trước hết, hãy ngừng sử dụng các ID tuần tự cho ảnh và tài nguyên, bởi đó gần như là lời mời công khai cho việc dò đoán và thu thập hàng loạt. Thay vào đó, việc sử dụng UUID hoặc token ngẫu nhiên đã đủ để loại bỏ phần lớn các kịch bản tấn công cơ bản. QR code cũng không nên chỉ đơn thuần là một đường dẫn “mở cửa tự do”, mà cần chứa token gắn với đúng tài nguyên, có thời hạn sử dụng rõ ràng, để người ngoài không thể truy cập vô hạn chỉ bằng cách giữ lại link.

Bên cạnh đó, những cấu hình tưởng chừng rất nhỏ như không public directory trên CDN, giới hạn tần suất truy cập (rate limiting) hay ghi log và theo dõi các hành vi truy cập bất thường lại chính là ranh giới giữa một hệ thống “đủ dùng” và một hệ thống có trách nhiệm với dữ liệu người dùng. Những biện pháp này không làm giảm trải nghiệm khách hàng, nhưng lại giúp ngăn chặn hiệu quả các hành vi thu thập ảnh hàng loạt mà người dùng hoàn toàn không hay biết
Kết luận
Photobooth tưởng chỉ để “vui là chính”, nhưng phía sau lại là cả một mỏ dữ liệu: mặt ta, giọng ta – đủ combo để AI học thuộc như học bảng cửu chương. Hôm nay ta vô tư cười, hát, chụp ảnh; ngày mai rất có thể chính khuôn mặt và giọng nói ấy xuất hiện ở một nơi… ta chưa từng đến.

Vấn đề không phải là công nghệ xấu, mà là chúng ta chưa kịp thích ứng với công nghệ. Khi AI có thể ghép mặt, nhái giọng và mạo danh ngày càng mượt, thì “chỉ cho vui thôi” rất dễ biến thành “vui xong thì… toang”. Vì thế, thay vì hoảng loạn hay tẩy chay, chỉ cần tỉnh táo hơn một chút: dữ liệu này được lưu ở đâu, ai giữ, giữ bao lâu?
Giữ được niềm vui là tốt, nhưng giữ được danh tính của chính mình còn quan trọng hơn. Trong thời đại AI, cười hát thoải mái thì cứ cười hát – nhưng đừng để lại quá nhiều “nguyên liệu thô” cho những câu chuyện không mấy vui về sau.
~ By Thaihn ~
