Phân tích các lỗ hổng bảo mật phổ biến trong OWASP Top 10
OWASP Top 10 là danh sách mười nhóm rủi ro bảo mật nghiêm trọng nhất với ứng dụng web, do cộng đồng OWASP tổng hợp từ dữ liệu thực tế và cập nhật theo chu kỳ vài năm một lần. Ấn bản 2021, được sử dụng rộng rãi, gồm: kiểm soát truy cập hỏng, lỗi mật mã, injection, thiết kế không an toàn, cấu hình sai, thành phần lỗi thời, lỗi xác thực, lỗi toàn vẹn phần mềm và dữ liệu, thiếu ghi log và giám sát, và SSRF. Danh sách không phải tiêu chuẩn đầy đủ mà là điểm khởi đầu để nhóm phát triển biết nên ưu tiên phòng chống gì.
OWASP cũng đã công bố bản cập nhật mới hơn; thứ tự và tên gọi có điều chỉnh nhưng các vấn đề cốt lõi bên dưới vẫn như nhau. Phần dưới phân tích theo ấn bản 2021.
A01: Kiểm soát truy cập bị hỏng
Nhóm đứng đầu danh sách: người dùng làm được điều vượt quá quyền của họ. Ví dụ điển hình là đổi ID trong URL để xem hồ sơ người khác (IDOR), người dùng thường gọi được chức năng quản trị, hoặc chỉnh token để nâng quyền.
Phòng chống: mặc định từ chối; kiểm tra quyền ở phía máy chủ trên từng đối tượng; tập trung logic phân quyền; viết test tự động cho các trường hợp truy cập chéo. Với API, đây là vấn đề lớn nhất, xem thêm bài bảo mật API trong phát triển web.
A02: Lỗi mật mã
Dữ liệu nhạy cảm không được bảo vệ đúng cách: truyền qua HTTP không mã hóa, lưu mật khẩu bằng hàm băm nhanh không muối, dùng thuật toán lỗi thời, khóa yếu hoặc viết cứng trong mã.
Phòng chống: phân loại dữ liệu nhạy cảm; HTTPS toàn bộ; lưu mật khẩu bằng hàm băm chậm có muối, xem bài cơ chế bcrypt; không lưu dữ liệu nhạy cảm nếu không cần.
A03: Injection
Dữ liệu người dùng bị trình thông dịch hiểu thành lệnh: SQL Injection, chèn lệnh hệ điều hành, LDAP injection, và từ ấn bản 2021 bao gồm cả XSS.
Phòng chống: truy vấn tham số hóa, ORM dùng đúng cách, kiểm tra đầu vào theo danh sách cho phép, mã hóa đầu ra theo ngữ cảnh. Chi tiết trong bài SQL Injection và cách khắc phục.
A04: Thiết kế không an toàn
Nhóm mới trong ấn bản 2021, nhấn mạnh lỗi nằm ở thiết kế chứ không phải ở cách viết mã. Ví dụ: luồng khôi phục mật khẩu dựa vào câu hỏi bảo mật dễ đoán, không giới hạn số lần thử mã giảm giá, cho phép đặt hàng với giá do client gửi lên.
Phòng chống: mô hình hóa mối đe dọa khi thiết kế tính năng; dùng mẫu thiết kế an toàn đã được kiểm chứng; viết kịch bản lạm dụng song song với kịch bản sử dụng.
A05: Cấu hình bảo mật sai
Bật chế độ debug ở sản xuất, liệt kê thư mục, tài khoản mặc định, header bảo mật thiếu, dịch vụ lưu trữ đám mây để công khai, thông báo lỗi lộ thông tin.
Phòng chống: quy trình cấu hình chuẩn và tự động hóa; môi trường sản xuất tối giản; rà soát cấu hình định kỳ. Tệp cấu hình chứa bí mật là trường hợp đặc biệt cần chú ý, xem bảo mật tệp cấu hình nhạy cảm.
A06: Thành phần có lỗ hổng hoặc lỗi thời
Dùng thư viện, framework, hệ điều hành có lỗ hổng đã công bố mà không cập nhật. Ứng dụng hiện đại có hàng trăm thư viện phụ thuộc, mỗi cái là một rủi ro tiềm ẩn.
Phòng chống: lập danh mục thành phần; công cụ quét phụ thuộc tự động; quy trình cập nhật đều đặn; gỡ thư viện không dùng.
A07: Lỗi định danh và xác thực
Cho phép mật khẩu yếu, không chống dò mật khẩu, phiên không hết hạn, ID phiên lộ trong URL, khôi phục mật khẩu yếu.
Phòng chống: xác thực đa yếu tố; giới hạn số lần đăng nhập sai; kiểm tra mật khẩu với danh sách mật khẩu đã lộ; quản lý phiên bằng cơ chế của framework; hết hạn phiên hợp lý.
A08: Lỗi toàn vẹn phần mềm và dữ liệu
Tin tưởng mã hoặc dữ liệu mà không kiểm tra tính toàn vẹn: cập nhật phần mềm không ký số, pipeline CI/CD có thể bị chèn mã, thư viện tải từ nguồn không tin cậy, giải tuần tự hóa (deserialization) dữ liệu không tin cậy.
Phòng chống: ký số và kiểm tra chữ ký; bảo vệ pipeline; dùng kho thư viện tin cậy; tránh giải tuần tự hóa dữ liệu từ bên ngoài bằng cơ chế cho phép tạo đối tượng tùy ý.
A09: Thiếu ghi log và giám sát
Không ghi lại đăng nhập thất bại, thay đổi quyền, giao dịch giá trị cao; log chỉ lưu cục bộ và bị ghi đè; không ai xem cảnh báo. Hậu quả là tấn công diễn ra lâu mà không bị phát hiện.
Phòng chống: ghi log sự kiện bảo mật với đủ ngữ cảnh; tập trung log; thiết lập cảnh báo; có kế hoạch ứng phó sự cố.
A10: Server-Side Request Forgery (SSRF)
Ứng dụng tải nội dung từ URL do người dùng cung cấp mà không kiểm tra, khiến kẻ tấn công dùng máy chủ để gửi yêu cầu tới hệ thống nội bộ, như dịch vụ metadata của máy ảo đám mây.
Phòng chống: danh sách cho phép đích đến; chặn địa chỉ nội bộ; tách mạng; không trả nguyên phản hồi cho người dùng.
Bảng tóm tắt theo vai trò
| Vai trò | Nhóm cần chú ý nhất |
|---|---|
| Lập trình viên backend | A01, A03, A04, A07, A10 |
| Lập trình viên frontend | A03 (XSS), A07 (xử lý token) |
| DevOps, quản trị hệ thống | A05, A06, A08, A09 |
| Kiến trúc sư, trưởng nhóm | A04, A02 |
Dùng OWASP Top 10 đúng cách
Top 10 là tài liệu nâng cao nhận thức, không phải checklist kiểm thử đầy đủ. Khi cần tiêu chuẩn kiểm tra chi tiết, OWASP có Application Security Verification Standard (ASVS). Hãy dùng Top 10 để đào tạo nhóm, định hướng ưu tiên, và làm khung cho buổi rà soát mã.
Câu hỏi thường gặp
OWASP Top 10 có phải tiêu chuẩn bắt buộc không?
Không. Đây là tài liệu nâng cao nhận thức do cộng đồng phát triển. Tuy nhiên nhiều tiêu chuẩn ngành và hợp đồng tham chiếu tới nó như mức tối thiểu cần đáp ứng.
Ứng dụng di động có dùng OWASP Top 10 web được không?
Phần backend và API của ứng dụng di động áp dụng được. Với ứng dụng trên thiết bị, OWASP có danh sách riêng là Mobile Top 10 và tiêu chuẩn kiểm tra di động.
Bao lâu OWASP cập nhật danh sách một lần?
Thường vài năm một lần, dựa trên dữ liệu đóng góp từ nhiều tổ chức và khảo sát cộng đồng. Nên theo dõi trang chính thức của OWASP để biết ấn bản mới nhất.
Tuân thủ OWASP Top 10 có nghĩa là ứng dụng an toàn?
Không đủ. Danh sách chỉ bao quát các nhóm rủi ro phổ biến nhất. Ứng dụng vẫn có thể có lỗi logic nghiệp vụ riêng hoặc lỗi ngoài danh sách, nên cần kết hợp rà soát và kiểm thử chuyên sâu.
Bài liên quan
Bảo mật API trong môi trường phát triển ứng dụng Web
Các nguyên tắc bảo mật API cho lập trình viên web: xác thực, phân quyền theo đối tượng, kiểm tra đầu vào, giới hạn tần suất, quản lý khóa, nhật ký và kiểm thử.
Bảo mật tệp tin cấu hình nhạy cảm tránh bị lộ lọt
Cách bảo vệ tệp .env, config, khóa API, mật khẩu cơ sở dữ liệu: không đưa vào Git, chặn truy cập web, phân quyền tệp, dùng trình quản lý bí mật và xử lý khi lộ.
Các bước cơ bản để rà soát lỗ hổng bảo mật ứng dụng
Quy trình rà soát lỗ hổng ứng dụng web: xác định phạm vi, lập danh mục tài sản, quét tự động, rà soát mã, kiểm thử thủ công và theo dõi khắc phục.
Các chương trình tìm lỗi nhận thưởng Bug Bounty và lưu ý
Bug Bounty hoạt động thế nào, các dạng chương trình, quy tắc phạm vi và safe harbor, cách viết báo cáo tốt và lưu ý pháp lý cho người mới.