Lỗi trong trình quét bí mật của chúng tôi mà các canary không thể phát hiện

Vận chuyển

Trước khi bất kỳ Bộ công cụ nào chúng tôi bán được nén lại, một cổng kiểm tra sẽ quét nó để tìm các giá trị thực của những bí mật nội bộ của chúng tôi. Mỗi lần quét bắt đầu bằng việc thả các canary, một con cho mỗi loại, và từ chối chạy trừ khi nó bắt được tất cả. Nó luôn bắt được chúng. Nó vẫn còn một lỗi.

Cách cổng đọc các thông tin bảo mật

Bộ bảo vệ không chỉ tìm những thứ có dạng như khóa. Nó đọc các tệp chứa bí mật của chúng ta (tệp env, cấu hình JSON, tệp khóa), lấy mọi giá trị mà tên cho biết đó là bí mật, rồi tìm kiếm trong những gì chúng ta sắp xuất bản các giá trị chính xác đó, cả dạng nguyên văn và dạng mã hóa base64.

Lỗi

Đối với một dây chuyền như thế này:

DB_PASSWORD='Tr0ub4dor-and-3'  # đã xoay vòng vào tháng 5

trình đọc chỉ loại bỏ các dấu ngoặc bao quanh khi giá trị vừa bắt đầu vừa kết thúc bằng một ký tự dấu ngoặc. Khi có một chú thích sau giá trị, dòng kết thúc bằng một chữ cái, nên các dấu ngoặc vẫn được giữ lại. Tiếp theo, phần chú thích bị cắt bỏ, và bộ kiểm tra tiếp tục tìm kiếm 'Tr0ub4dor-and-3', bao gồm cả dấu ngoặc. Một Bộ công cụ chứa mật khẩu mà không có các dấu ngoặc đó sẽ vượt qua được.

Vì sao bầy chim hoàng yến không hề hay biết

Canary kiểm tra một net: đặt vào một giá trị mà trình quét đã biết, rồi kiểm tra xem nó có được tìm thấy hay không. Các giá trị canary của chúng tôi được đưa thẳng vào trình quét, nên chúng chưa từng đi qua phần mã đọc một dòng cấu hình. Mọi net đều đã được kiểm thử, nhưng bộ phân tích cú pháp phía trước chúng thì không.

Cách chúng tôi tìm thấy

Chúng tôi đang biến cổng thành một sản phẩm riêng và đã viết một bài kiểm tra để nạp cho nó một tệp cấu hình theo đúng định dạng mà mọi người thường viết: export, dấu ngoặc kép, chú thích ở cuối dòng. Bài kiểm tra thất bại ở dòng có dấu ngoặc kép kèm chú thích. Bản sửa lỗi sẽ đọc giá trị trong dấu ngoặc kép cho đến dấu ngoặc kép đóng và bỏ qua mọi nội dung phía sau.

Điều đó có quan trọng không?

Chúng tôi đã kiểm tra trước khi thay đổi bất kỳ điều gì. Trên máy build của chúng tôi, bộ cổng (gate) đọc 133 giá trị bí mật từ 59 tệp được cung cấp, và trên một máy thứ hai là 499; không có giá trị nào có hình dạng đó. Không có kết luận trước đó nào bị thay đổi: mọi Bộ công cụ mà chúng tôi đã phát hành đều được quét cho cùng các giá trị mà hiện tại sẽ được quét. Chúng tôi vẫn sửa bộ cổng trên cả ba máy.

Bài học rút ra

Nếu một trình quét trích xuất đúng thứ mà nó tìm kiếm, hãy kiểm thử việc trích xuất với dữ liệu đầu vào thực tế, chứ không chỉ kiểm thử việc tìm kiếm với các giá trị được cài sẵn. Một canary chứng minh rằng lưới hoạt động tốt; nhưng nó không cho biết liệu những con cá phù hợp có thực sự lọt vào lưới hay không. Các bài kiểm thử của Secret Gate hiện bao quát cả hai khía cạnh, và trước khi phát hành, chúng tôi đã xác minh rằng nó đọc chính xác 133 giá trị giống như bộ kiểm tra bản dựng của chúng tôi.

Đã cập nhật: