Thừa ký tự mã, Microsoft tạo lỗi cho hacker khai thác

Microsoft đã xác nhận một ký tự "&" dư thừa trong mã lập trình là nguyên nhân của lỗi có thể bị hacker khai thác tấn công trình duyệt IE.

Lỗi ký tự "&" thừa này được phát hiện bởi 2 chuyên gia nghiên cứu người Đức: Thomas Dullien, CEO đồng thời là trưởng nhóm nghiên cứu tại Zynamics GmbH, và Dennis Elser, thông tin về lỗi được 2 chuyên gia đưa lên blog cùng những nhận định về mức độ nguy hiểm.

Sai phạm nằm trong một chức năng của ATL được Dullien đặt tên là "ATL::CComVariant::ReadFromStream". Chức năng này dẫn dắt 2 chuyên gia khám phá đến các lỗi trong những thành phần khác được tạo ra bởi Microsoft bao gồm một số ứng dụng Windows khá phổ biến như trình duyệt Internet Explorer, Windows Media Player và Terminal Services.

Bình luận về thông tin của Dullien và Elser, Michael Howard, quản lý bảo mật chương trình cấp cao thuộc nhóm kiến trúc sư bảo mật và cộng đồng của Microsoft cho biết việc có ký tự "và" (&) là một lỗi gõ sai và cũng là nguyên nhân cốt lõi trong phần điều khiển MSVidCtl ActiveX.

Phần điều khiển video-streaming mà Howard nhắc tới đã được tạo ra bởi Microsoft sử dụng một phiên bản hiệu chỉnh từ một phiên bản cũ của một thư viện mã có tên Active Template Library (ATL). ATL là một bộ bao gồm các lớp mã C++ được thiết kế để tạo các đối tượng COM dễ dàng hơn. ATL lưu giữ tất cả các tham chiếu đối tượng có thể đếm được và các tác vụ COM chung không bị ràng buộc.

Vào "ngày thứ ba vá lỗi" thường kỳ, Microsoft đã tiến hành vá lỗi Visual Studio, nền tảng mà Microsoft phát triển bao gồm ATL. Tuy nhiên, những bản vá đó không tự động sửa chữa phần mềm được phát triển bằng cách sử dụng bản ATL hiệu chỉnh. Thay vào đó, Microsoft cũng như các hãng thứ ba phải sử dụng bản vá Visual Studio để biên dịch lại mã của họ rồi phát hành bản mới để bảo vệ cho khách hàng sử dụng.

Trên blog MSDN, Howard công bố thông tin về 2 lỗi mà một trong số đó xuất phát từ lỗi gõ sai (typo), dư thừa một ký tự trong đoạn mã được trích dẫn:

hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);

thay vì

hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);

"Lỗi này cho phép kẻ tấn công làm tổn hại bộ nhớ rồi tiến đến thực thi một mã vận hành từ xa", Fermin Sema cho biết, kiến trúc sư thuộc Trung tâm nghiên cứu bảo mật của Microsoft (MSRC).

Bạn đọc có thể tham khảo thông tin chi tiết được Micheal Howard công bố tại đây.

Thứ Hai, 10/08/2009 09:38
31 👨 501
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp