Bảo mật 02/09/2026 9 phút

Tôi khai hai gói, môi trường thật cài bảy — và 17 trong 28 lỗ hổng nằm ở những gói tôi chưa bao giờ chọn

import requests không phải thêm một thư viện mà cả một cây. Tôi khai hai dependency cũ rồi quét bằng pip-audit: 28 lỗ hổng, phần lớn ở gói bắc cầu tôi chưa từng nghe tên (urllib3 một mình mang 13). Nâng phiên bản kéo cả 28 về 0 bằng một lệnh — nên cái đắt không phải vá, mà là biết mình cần vá. Kèm một lần tôi đo sai phạm vi phải làm lại.

Bảo mật 02/09/2026 9 phút

Sửa một byte là chữ ký gãy, kẻ tấn công tự ký lại vẫn trượt — nhưng cái checksum SHA256 bên cạnh file tải về thì ai sửa file cũng tính lại được

Checksum và chữ ký trông na ná nhau — đều là một chuỗi băm để kiểm — nhưng khác nhau ở toàn bộ vấn đề: cái nào cần bí mật để tạo ra. Tôi dựng quy trình ký Ed25519 và tấn công ba cách: sửa byte lộ, tự ký lại lộ; rồi cho thấy checksum chống được tai nạn nhưng vô dụng trước kẻ kiểm soát nơi phát hành, vì nó không đòi bí mật gì cả.

Bảo mật 02/09/2026 9 phút

Một dòng log 'cho đầy đủ' đẩy mật khẩu, token và số thẻ vào file ở dạng nguyên văn — và bộ lọc che khoá vẫn để lọt bí mật qua một câu thông báo lỗi

Nhật ký kiểm toán là thứ bạn biết ơn khi có sự cố, nhưng ghi quá tay thì chính nó thành kho bí mật rò rỉ. Tôi đo: log ngây thơ đẩy 3 bí mật nguyên văn vào file, bộ lọc che theo khoá kéo về 0 mà vẫn giữ đủ dấu vết điều tra — rồi một exception ghi nguyên văn lại lọt bí mật qua đường bộ lọc không ngờ tới. Ghi nhiều hơn không an toàn hơn.

Bảo mật 02/09/2026 9 phút

SAST bắt eval trong hàm chết mà DAST không bao giờ chạm tới; DAST thấy traceback rò ra mà SAST không nằm ở dòng nào — chọn một là tự tin sai chỗ

SAST đọc mã mà không chạy, DAST tấn công app đang chạy mà không đọc mã. Tôi gài lỗ hổng vào một app rồi chạy bandit và một DAST tự viết: mỗi công cụ bắt đúng cái công cụ kia mù, gần như bù trừ hoàn toàn — SAST cho danh sách *khả năng*, DAST cho danh sách *thực tế*, và một câu SQLi lệch khuôn thì cả hai đều hụt.

Bảo mật 02/09/2026 10 phút

yaml.load từng chạy lệnh shell của kẻ tấn công chỉ với một dòng — bản vá đổi mặc định sang an toàn, nhưng tôi tự mở lại lỗ hổng bằng đúng cách 'sửa lỗi' ai cũng làm

'Vá thì cứ nâng phiên bản là xong' bỏ qua ba câu hỏi thật: vá sửa cái gì, lỗ hổng có biến mất hẳn không, và bạn phơi nhiễm bao lâu giữa lúc vá ra và lúc thật sự dùng nó. Tôi tái dựng RCE của PyYAML: bản cũ dính, bản mới chặn — rồi vô tình dán lại đúng lỗ hổng bằng cách thêm Loader=yaml.Loader để hết TypeError, đúng cái bẫy khiến lỗ này sống sót qua bản vá.

Bảo mật 02/09/2026 9 phút

Chạy danh sách kiểm bảo mật lên chính cái blog này: tám mục đạt, khoá xanh, header đầy đủ — và một dòng curl vẫn moi ra cookie phiên thiếu cờ Secure

Làm sao BIẾT một ứng dụng đã cấu hình đúng, không phải bằng cảm giác 'chắc ổn'? Tôi chạy một danh sách kiểm chỉ-đọc lên chính blog Spring Boot đang chạy: header đủ, actuator đóng kín, trang lỗi sạch — nhưng cookie JSESSIONID thiếu cờ Secure, đúng cái mục mà sự tự tin chung che mất. Danh sách kiểm biến 'có an toàn không' mơ hồ thành một bảng từng dòng đạt/không đạt.