Компания Microsoft во вторник признала на своем
блоге, что уязвимость в браузере Internet Explorer, которой хакеры
пользовались с начала июля, появилась из-за неправильного размещения в коде
одного-единственного амперсанда (значка "&", заменяющего союз "and").
Менеджер по безопасности программ Microsoft Майкл Ховард пояснил, что эта
опечатка испортила код элемента управления ActiveX, используемого браузером. По
его словам, данный элемент был создан Microsoft с использованием более старой
библиотеки кода, содержавшей уязвимости. Из-за присутствия этих уязвимостей
опечатка привела к допущению возможности записи недоверенных данных, что сделало
браузер открытым для злоумышленников.
В результате компания была вынуждена выпустить в этот
вторник внеочередной патч
для IE, который по ее словам блокирует попытки эксплуатации уязвимости в
ActiveX. Аналогичная версия библиотеки Active Template Library (ATL)
используется и в Visual Studio, поэтому патч для этого инструментария был
выпущен в тот же день, что и патч для IE.
В своем блоге Ховард задал читателям загадку и предоставил им возможность
самим найти опечатку в коде, предупредив, что она кроется в одном знаке. Вот
этот код:
__int64 cbSize;
hr = pStream->Read((void*) &cbSize, sizeof(cbSize), NULL);
BYTE *pbArray;
HRESULT hr = SafeArrayAccessData(psa, reinterpret_cast(&pbArray));
hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);
Правильный ответ:
"Взгляните на последнюю строку. Первый аргумент неверен. Он должен выглядеть
так: hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);".
Ховард признал необходимость очищения процесса написания кода и сообщил о
том, что Microsoft обновит утилиты, которые используются для обнаружения
подобных ошибок. Кроме того, компания обяжет всех своих программистов
использовать только более новые версии ATL.