Tôi đã xây dựng một công cụ bảo mật. Và nó đã tìm thấy một lỗ hổng nghiêm trọng ngay trong chính nó.

Tôi đang xây dựng một trình phân tích bảo mật mã nguồn. Tôi gọi nó là vibeanalyzer.

Mục tiêu rất đơn giản. Hiện nay nhiều người đang "vibe-code". Họ để các tác nhân AI viết mã. Mã nguồn trông có vẻ sạch sẽ. Các bài kiểm tra đều vượt qua. Nhưng lập trình viên lại không hề biết thực sự có gì bên trong dự án.

Trước khi dồn toàn lực, tôi đã làm một việc mà lẽ ra tôi nên làm từ lâu. Tôi kiểm tra xem các công cụ hiện có đã giải quyết vấn đề này chưa. Họ đã làm được rồi. Các công cụ như Semgrep, CodeQL và Snyk tốt hơn tôi rất nhiều.

Tôi đã chạy Semgrep trên chính dự án của mình. Kết quả là một sự kiểm chứng thực tế đầy khắc nghiệt.

Semgrep đã tìm thấy sáu vấn đề trong các thư viện phụ thuộc của tôi:

• Một vấn đề về thẩm mỹ liên quan đến việc lựa chọn hàm băm. • Hai vấn đề có mức độ nghiêm trọng Cao trong esbuild và vite. • Ba vấn đề có mức độ nghiêm trọng Trung bình liên quan đến lỗi duyệt đường dẫn. • Một vấn đề Nghiêm trọng trong vitest.

Vấn đề trong vitest là một lỗ hổng duyệt đường dẫn. Nó có thể cho phép ai đó đọc hoặc thực thi các tệp nằm ngoài dự án. Chính tôi đã đưa thư viện phụ thuộc đó vào.

Làm thế nào mà một công cụ bảo mật lại có thể chứa một lỗ hổng nghiêm trọng?

Câu trả lời nằm ở chuỗi cung ứng. Mã nguồn của tôi có thể trung thực. Nhưng các công cụ mà tôi xây dựng dựa trên chúng không phải lúc nào cũng an toàn. Nếu tôi còn bỏ lỡ điều này khi đang xây dựng một công cụ bảo mật, thì một lập trình viên bình thường sẽ chẳng có cơ hội nào để phát hiện ra nó.

Đó là lý do tại sao tôi vẫn đang tiếp tục xây dựng.

Các công cụ hiện có như Semgrep tìm kiếm các mô hình nguy hiểm. Chúng tìm thấy các lỗ hổng đã biết. Nhưng chúng không hiểu được ý định. Chúng không biết mã nguồn của bạn thực sự được định làm gì.

Chúng không thể phân biệt được liệu một hàm là an toàn nhưng lại giải quyết một vấn đề lẽ ra không nên tồn tại trong dự án của bạn.

Tôi gọi đây là khoảng cách ý định. Đó là khoảng cách giữa mã nguồn và mục đích của nó.

Vibeanalyzer tập trung vào khoảng cách này. Công cụ sẽ hỏi bạn về ý định của dự án và những gì không phải là mục tiêu của nó. Nó thiết lập các rào chắn. Khi AI đánh giá mã nguồn, nó sẽ biết mục tiêu là gì. Nó biết điều gì là vượt quá phạm vi cho phép.

Tôi đã hoàn thành phần tải ý định. Tôi đã có phần phân tích TypeScript cơ bản và các biểu đồ cấu trúc thư mục. Tiếp theo, tôi phải xây dựng lớp AI. Tôi không biết liệu AI có thực sự đánh giá được mã nguồn dựa trên ý định hay không. Nó có thể chỉ tạo ra những cảnh báo giả. Tôi sẽ xây dựng nó một cách công khai để tìm câu trả lời.

Tôi đã cập nhật các thư viện phụ thuộc và khắc phục các lỗi đã biết. Nhưng những lỗ hổng chưa biết và các lỗi logic vẫn còn đó. Đó là lý do tại sao công việc vẫn đang tiếp diễn.

Source: https://dev.to/stkremen/im-building-a-code-security-analyzer-a-security-tool-found-a-critical-in-it-4b77

Optional learning community: https://t.me/GyaanSetuAi