SecLab
Cryptography & SecretswalkthroughĐộ khó 2/525 phút

Secret không nằm trong repo — và khi nó đã nằm rồi

Mục tiêu: Sau bài này bạn quét được lịch sử git tìm secret, và biết vì sao xoá file không phải bản vá.

V14A04:2025SSDF PO.5
Bước 1 / 5 · read5 phút

Ba chỗ secret bị lộ, và chỉ một chỗ được nhắc tới

"Đừng commit secret vào git" là lời khuyên ai cũng biết, và nó phủ đúng một trong ba chỗ. Hai chỗ còn lại lộ secret cho nhiều người hơn và ít ai kiểm.

ChỗAi đọc đượcVì sao ít ai kiểm
Lịch sử gitAi clone được repoĐược biết, nhưng người ta kiểm file hiện tại chứ không kiểm lịch sử
Biến môi trường của CIAi sửa được pipeline, và mọi log của mọi lần chạytrông như cách làm đúng
Image containerAi pull được image, kể cả từ registry nội bộENV và layer bị xoá vẫn còn trong image

Chỗ thứ hai đáng nói vì nó là cách làm được khuyên: "đưa secret vào biến môi trường thay vì file". Đúng, nhưng chưa đủ — biến môi trường trong CI có ba đường lộ:

  • Một bước build in ra env để debug, và log đó lưu 90 ngày.
  • Một script set -x in mọi lệnh kèm giá trị biến.
  • Một dependency trong build đọc process.env và gửi đi (đây là supply chain, module 6).

Chỗ thứ ba là chỗ tinh vi nhất: RUN rm secret.txt trong Dockerfile không xoá gì cả. Mỗi RUN tạo một layer, và layer trước vẫn nằm trong image — docker history và một lệnh tar trên layer đó lấy lại được file. Cùng lý do đó áp cho ARG mang secret vào build.

Và điều quan trọng nhất của bài này: khi một secret đã lộ, xoá nó không phải bản vá — xoay nó mới là bản vá. Một commit đã push thì tồn tại trong mọi clone, mọi fork, mọi bản cache của CI, và trong index của bất kỳ ai đang quét GitHub. git rebase để xoá nó khỏi lịch sử là dọn dẹp; nó không lấy lại được cái đã đi ra. Thứ tự đúng luôn là: xoay trước, dọn sau.

Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để 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.

Đăng kýĐăng nhập

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…