Scratch, nền tảng lập trình cho trẻ em thuộc MIT, đang phải đối mặt với một loạt lỗ hổng bảo mật liên quan đến định dạng ảnh SVG kéo dài từ năm 2019 đến nay. Vấn đề bắt nguồn từ việc Scratch chèn trực tiếp nội dung SVG do người dùng tạo (có thể chứa mã độc) vào tài liệu chính để thực hiện các thao tác như đo hộp giới hạn (bounding box) của SVG. Dù chỉ tồn tại trong tích tắc, hành động này vẫn tiềm ẩn nguy cơ tấn công XSS (Cross-Site Scripting) nghiêm trọng.

Lịch sử các lỗ hổng và cách khắc phục bất thành

Năm 2019, Scratch phát hiện thẻ <script> trong SVG có thể thực thi mã JavaScript. Bản vá đầu tiên dùng biểu thức chính quy (regex) để loại bỏ thẻ này. Tuy nhiên, năm 2020, nhà nghiên cứu apple502j đã chỉ ra cách bypass đơn giản: viết hoa <SCRIPT> vì regex phân biệt chữ hoa chữ thường. Ngoài ra, kẻ tấn công còn có thể nhúng mã qua thuộc tính sự kiện inline như "onerror" trong thẻ <img>. Scratch sau đó chuyển sang dùng thư viện DOMPurify để lọc sạch mã độc. Tưởng chừng đã an toàn, nhưng năm 2022, một lỗ hổng mới lại xuất hiện: kẻ tấn công có thể dùng thuộc tính "href" trên thẻ <image> để rò rỉ dữ liệu HTTP.

Ý nghĩa với người dùng phổ thông

Với hơn 100 triệu người dùng, phần lớn là trẻ em và giáo viên, những lỗ hổng này đặc biệt nguy hiểm. Một cuộc tấn công XSS thành công có thể cho phép kẻ xấu đăng bình luận, xóa dự án, thậm chí chiếm tài khoản nạn nhân. Trên Scratch Desktop (dùng Electron), lỗ hổng còn leo thang thành thực thi mã tùy ý. TurboWarp Desktop đã vô hiệu hóa tính năng nguy hiểm này từ tháng 3/2021. Câu chuyện này cho thấy việc làm sạch nội dung người dùng, đặc biệt là định dạng phức tạp như SVG, là bài toán nan giải ngay cả với những tổ chức lớn. Người dùng nên cập nhật phiên bản mới nhất và hạn chế tải dự án từ nguồn không tin cậy.