Mục tiêu
Ba bài trước cho ba lớp: allowlist ở tầng ứng dụng, egress ở tầng mạng, và xử lý response như input không tin được. Bài này ghép chúng lại trong tình huống khó nhất: một tính năng mà allowlist hostname không dùng được.
Tình huống. Product muốn một tính năng: người dùng dán một URL của một file CSV và hệ thống nhập dữ liệu từ đó. URL có thể là bất kỳ đâu — Google Drive, Dropbox, một S3 bucket của khách hàng, một server nội bộ của khách hàng có mở ra Internet.
Nghĩa là allowlist hostname ở bài ssrf-allowlist không áp dụng được: bạn không biết trước hostname nào. Đây không phải một yêu cầu vô lý — nó là yêu cầu bình thường của mọi tính năng "import from URL", và nó là lý do bài này là một challenge.
Việc phải làm.
- Thiết kế luồng fetch. Bạn giữ được tính năng và không cho kẻ tấn công mượn vị trí mạng của mình bằng cách nào?
- Chỉ ra ba chỗ mà một triển khai ngây thơ sẽ hỏng, và mỗi chỗ cần lớp nào.
- Nói ra cái bạn không chặn được và bạn chấp nhận nó vì sao.
Câu 3 là câu tính điểm. Một thiết kế bảo mật không nói ra giới hạn của mình là một thiết kế mà người dùng nó sẽ tin quá mức.
Bình luận
Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.
Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.
Đang tải bình luận…