Bảo mật của Ebig, đúng những gì trong mã đang thi hành — không tô hồng, không giấu cái chưa xong
Mỗi mục dưới đây trích đúng file/dòng mã đang chạy. Phần chưa xây được dán nhãn rõ ràng — không lẫn với phần đã có.
Api/Gateway/README.md (sơ đồ kiến trúc), Api/README.md §4 quyết định #1, §3 GĐ 0 ④⑤.Bốn worker nghiệp vụ phía sau không có domain công khai
Toàn bộ traffic bên ngoài chỉ chạm đúng một điểm: Gateway Worker. Bốn worker nghiệp vụ phía sau đều đặt không mở đường công khai, chỉ gọi được qua liên kết worker nội bộ worker-to-worker — không qua internet. Sơ đồ đầy đủ và trích nguồn ở trang API, không vẽ lại ở đây.
Nhận danh + phiên đăng nhập
Resource server chỉ cần JWKS public key, không cầm chung một secret có thể tự ký token giả.
Kể cả confidential, chỉ chấp nhận S256. Public client gửi kèm client_secret bị từ chối thẳng, không lặng lẽ bỏ qua.
Luật sống ở đúng một nơi (redirectpolicy.js), gọi lại ở cả 3 chỗ: đăng ký, phát mã, đổi mã — không có hai bộ luật lệch nhau.
kho khoá–giá trị chỉ lưu hash SHA-256 của mã, không lưu bản rõ.
Dùng lại refresh token cũ (lần hai) là phát hiện có sự cố ngay.
Session id ngẫu nhiên, không phải JWT tự chứa. Mỗi request kiểm 3 điều kiện: session còn tồn tại, chủ thể còn active, sessionVersion khớp.
timingSafeEqual cho mọi bí mật; phản hồi đăng nhập/OTP giống hệt nhau ở mọi trường hợp sai — không lộ email nào tồn tại.
TEST_USERS (10 tài khoản hash cứng, tự seed mọi môi trường) và ADMIN_EMAILS hard-code đã bị xoá hẳn. Admin đầu tiên chỉ tạo qua BOOTSTRAP_TOKEN một lần, khi store còn trống.
Client secret / project secret chỉ salt + SHA-256, hiện nguyên văn đúng một lần lúc tạo/xoay.
Nguồn: Api/SSO/AUTH.md.
Giới hạn tại đúng những nơi dễ bị dò
Rate limit theo cả IP lẫn email
4 bộ đếm đặt tên rõ cho login/OTP/token: RL_LOGIN, RL_OTP_REQUEST, RL_OTP_VERIFY, RL_TOKEN. OTP hash+salt trong kho khoá–giá trị (không plaintext), tối đa 5 lần đoán rồi huỷ mã.
PBKDF2 100.000 vòng — giới hạn thật
Đây là trần cứng của WebCrypto trên worker ở biên, không phải lựa chọn bảo mật tự nguyện của Ebig — đặt cao hơn thì runtime báo lỗi NotSupportedError. OWASP khuyến nghị cao hơn con số này; phần thiếu được bù bằng RL_LOGIN (10 lần/60 giây) chặn dò mật khẩu tại edge. Đây là điểm CTO giỏi sẽ hỏi đúng câu này — nên nói thẳng, không im lặng bỏ qua.
Nguồn: Api/SSO/AUTH.md §5.
"Không dùng chung" đúng cho tầng nào
Api/README.md §5.12; nửa phải App/Landing/README.md và trang Hạ tầng, nơi mô hình triển khai vật lý được dán nhãn là giả lập.Cách ly theo logic
Tiền tố khoá CSDL trong bộ nhớ data:<pid>:<Module>, cờ proj:<pid>.tenantEnforce theo từng dự án, mặc định TẮT cho tới khi khách bắt đầu dùng dữ liệu thật. Chưa bật thì người ngoài dự án vẫn đi qua, chỉ ghi log — đây là hành vi có chủ đích, không phải lỗ hổng bị bỏ sót.
Cách ly vật lý
Namespace Kubernetes + ResourceQuota + NetworkPolicy chặn khách khác. Đây mới là tầng đúng nghĩa "dự án của bạn không dùng chung" — chi tiết ở Hạ tầng.
Fail-open có chủ ý: SSO không trả lời được → Gateway không chặn truy cập, chỉ ghi log. Lý do: một sự cố của SSO không được biến thành mất truy cập toàn hệ thống. Đây là đánh đổi thật (chọn sẵn sàng hơn chặn cứng trong tình huống hiếm), không phải khiếm khuyết — nhưng phải nói ra, không giấu.
Nguyên tắc nền: một đường thi hành quyền duy nhất (Gateway → Local), không worker nào đọc dữ liệu bằng đường khác. Ghi log bắt buộc mọi thao tác dữ liệu, không còn nhánh tuỳ chọn. Local đối chiếu hai đầu repo/pid với Gateway, từ chối khi lệch x-ebig-pid.
Nguồn: Api/README.md §4, §5.12.
AI Agent không dùng service account
AI không đọc được gì người gọi nó không tự đọc được — vì nó chạy bằng chính quyền của người dùng thật, không phải một tài khoản dịch vụ có quyền riêng.
Mô hình 12 năng lực chia hai nhóm: nhóm ĐỌC chạy một mình, nhóm LÀM (plan/execute) cần canNguoi: true. 5 luật leo thang khi AI không chắc/chạm tiền/chạm cam kết ngoài/chạm quyết định về người → chuyển cho người, không tự quyết.
Nguồn: Api/AI/knowledge/ai/ranh-gioi.md, Api/README.md quyết định #2.
Toàn bộ traffic đi qua biên toàn cầu trước khi chạm bất kỳ worker nào
Lọc DDoS và bot xảy ra ở biên, trước khi gói tin chạm tới bất kỳ worker nào của Ebig. Năng lực chặn đó là của lớp biên, không phải số đo riêng của Ebig — ghi rõ để không bị hiểu lầm thành SLA của Ebig.
Tầng K8s riêng dùng thêm đường hầm TLS (tiến trình đường hầm) — cụm không lộ IP công khai. Chi tiết đầy đủ ở Hạ tầng.
○ Lộ trình — chưa chạy
0 dòng mã, xác nhận bằng grep trực tiếp: "toàn bộ tầng schema động chưa có mã". 18 module cố định hiện tại không chứa dữ liệu nhạy cảm dạng lương/hồ sơ nhân sự/sổ tài chính. Nên chưa phải rủi ro cấp thiết cho khách đầu tiên, nhưng sẽ thành điểm chặn thật ngay khi khách tự định nghĩa bảng riêng có cột nhạy cảm.
Chưa có — rotateSigningKey phải gọi tay.
Chưa có; mọi client đã đăng ký được coi là tin cậy (first-party). Nếu Ebig mở nền tảng cho ứng dụng bên thứ ba thật sự, đây là việc phải làm trước, chưa làm.
Khung khái niệm đã chốt tên (AUTO/APPROVAL/HUMAN ONLY/DISABLED), nhưng 0 dòng mã cho Action Contract thật. Cơ chế "Mode" đang chạy trong core-ai là 8 chế độ hội thoại — khác khái niệm "Execution Mode" kiểm soát AI được tự làm gì. Hai chữ gần giống nhau nhưng không phải một thứ.
Rate limit + CORS ở tầng Gateway cũng chưa có — xem chi tiết ở API. Mã uỷ quyền one-time chưa nguyên tử tuyệt đối (kho khoá–giá trị không có compare-and-delete, cửa sổ đua rất nhỏ nhưng chưa đóng hẳn 100%; muốn tuyệt đối phải chuyển sang Durable Object).
Chứng chỉ tuân thủ & nơi lưu trữ dữ liệu
Chưa công bố chứng chỉ tuân thủ bên thứ ba
Ebig chưa công bố chứng chỉ tuân thủ bên thứ ba (ISO 27001, SOC 2, GDPR…) tại thời điểm viết trang này. Đã quét toàn bộ repo kỹ thuật, không tìm thấy kết quả nào ngoài các đề cập chung chung "bảo mật, sẵn sàng cao" không gắn với chứng chỉ cụ thể. Nếu đây là điều kiện bắt buộc cho tổ chức bạn, hãy trao đổi trực tiếp với đội Ebig để biết lộ trình thật, thay vì dựa vào phỏng đoán.
Nơi lưu trữ dữ liệu (data residency)
Chưa có tài liệu chính sách lưu trữ theo lãnh thổ cho tầng SaaS mặc định, ngoài việc dùng hạ tầng toàn cầu của nền tảng biên và CSDL trong bộ nhớ. Tầng riêng (on-premise/private cloud) thì có kiểm soát vị trí đầy đủ — đó là lý do tồn tại của tầng đó cho cơ quan nhà nước cần chủ quyền dữ liệu.
Vault chỉ có ở tầng K8s riêng
Vault chỉ xuất hiện trong mô hình triển khai K8s riêng, không xuất hiện trong sơ đồ tầng SaaS mặc định. Ở tầng mặc định, secret quản lý qua kho bí mật của nền tảng + băm trong kho khoá–giá trị — cơ chế khác, không nên suy diễn Vault bảo vệ secret của tầng dùng chung.
Cần đối chiếu bảo mật/tuân thủ cho tổ chức bạn?
Trao đổi trực tiếp với đội Ebig để biết đúng cái đã có, đúng cái đang ở lộ trình, cho đúng bài toán của bạn.
Gửi yêu cầu đối chiếu