Ошибка «ASP 0115 Trappable Error Произошла» после исправления Microsoft CVE-2019-1367 - PullRequest
3 голосов
/ 03 октября 2019

Jscript Неожиданные исключения

После уязвимости исправления Windows Server (CVE-2019-1367), выпущенной в 23. Сентябрь

Обновлено 07.10.2019 Также затронуты пакеты «Предварительный просмотр ежемесячного накопительного пакета» и «Ежемесячный накопительный пакет», которые не устраняют конкретные проблемы рабочего процесса Jscript

  • Windows Server 2019: KB4516077, KB4524148
  • Windows Server 2016: KB4516061, KB4524152
  • Windows Server 2012 R2: KB4516041, KB4524156

в классическом приложении ASP на нескольких рабочих процессах случаются jscript. Неожиданные ошибки на стороне сервера:

  • Ошибка активных страниц сервера 'ASP 0115'
  • Выявляемая ошибка (C0000005) произошло во внешнем объекте. Сценарий не может продолжать работать
  • Ошибка активных страниц сервера 'ASP 0240'
  • A ScriptEngine вызвала исключение 'C0000005' в 'IActiveScript :: Close() 'из' CActiveScriptEngine :: FinalRelease () '.

Patch

Существует уязвимость удаленного выполнения кода, связанная с обработкой объектов механизмом сценариевв памяти в Internet Explorer, он же «Уязвимость, приводящая к повреждению памяти скриптовым движком». Этот идентификатор CVE уникален для CVE-2019-1221. https://www.cvedetails.com/cve/CVE-2019-1367/

Существует уязвимость удаленного выполнения кода, связанная с обработчиком сценариев объектов в памяти в Internet Explorer. Уязвимость может повредить память таким образом, что злоумышленник может выполнить произвольный код в контексте текущего пользователя. Злоумышленник, успешно воспользовавшийся этой уязвимостью, может получить те же права, что и текущий пользователь. В случае веб-атаки злоумышленник может разместить специально созданный веб-сайт, предназначенный для использования уязвимости через Internet Explorer, а затем убедить пользователя просмотреть веб-сайт, например, отправив электронное письмо. Это обновление для системы безопасности устраняет уязвимость, изменяя механизм обработки сценариев объектами в памяти. https://blog.qualys.com/laws-of-vulnerabilities/2019/09/24/microsoft-releases-out-of-band-security-updates

Патч устраняет проблему в управлении памятью. Не указано, что именно меняется, каковы новые ограничения. Но кажется, что это вызывает некоторые случаи побочных эффектов.

Природа ошибки

  • Ошибки не могут быть обработаны с помощью обычного подхода try-catch
  • Ошибки вызывают рабочий процесспрерывания
  • Исключение, по-видимому, происходит только один раз при входе в конкретный рабочий процесс, и при повторном веб-запросе для одной и той же процедуры код завершается успешно (до тех пор, пока пул приложений не будет перезапущен).
  • Иногда исключения входят в рабочий процесс первый, второй или третий раз.
  • Исключение возникает, только если в свойствах отладки IIS ASP - Включить отладку на стороне сервера установлено значение False

Фон

Проверено, что проблема присутствует на всех протестированных экземплярах Сервера с патчем. Также изолировал исправление, проверив состояние до и после применения исправления (Server 2012 R2, Server 2016, Windows 10 - 1809)

  • Из Classic ASP Server не может решить проблему с помощью try-catch,
  • Возвращается общая ошибка - сообщение об ошибке скрипта Или, если выключено (ASP - Отправить ошибки браузеру) Коды ошибок ASP со страницей, на которой они происходят
  • Просмотр событий также регистрирует эти ошибки, но без дополнительныхинформация
  • Global.asa не предлагает глобальную обработку ошибок, объект ASP Server Server.GetLastError () не перехватывает исключение

Исследованные исключения с

  • DebugDiag
  • Sysinternals Process Monitor
  • IIS - отслеживание сбоя запроса

Среда

  • Пул приложений: классический конвейерный режим, включение 32-разрядных приложений: True
  • Приложение: ASP
  • ClientL IE 11 Enterpriseрежим с включенным ActiveX
  • Идентификация пула приложений олицетворяется в вызовах веб-запроса

Идентифицированные проблемы

1 В w3wp__V ...__ Исключение первого шанса 0XC0000005.dmpИнструкция по сборке

в msvcrt! memcpy + 198 ### в C: \ Windows \ System32 \ msvcrt.dll от Microsoft Corporation вызвала исключение нарушения прав доступа (0xC0000005) при попытке чтения из ячейки памяти 0x0000000a впоток 33 Источник адреса инструкции

[0x7532a2d8] msvcrt!memcpy+198    
[0x6ac17deb] jscript!AString::CopyToBuffer+4b    
[0x6ac10524] jscript!AString::ConvertToBSTR+1bb74    
[0x6abdf6b7] jscript!PrepareInvoke+277    
[0x6abf52df] jscript!InvokeDispatch+8f    
[0x6abe2f03] jscript!VAR::InvokeByDispID+523    
[0x6abdbde0] jscript!NameTbl::InvokeInternal+270    
[0x6abe2b17] jscript!VAR::InvokeByDispID+137    
[0x6abe6083] jscript!CScriptRuntime::Run+2db3
...

Далее - корпорация Microsoft вызвала исключение нарушения прав доступа (0xC0000005) при попытке чтения из ячейки памяти 0x00000000

[0x6b7c2d77] jscript!VarStack::ScavengeRoots+27    
[0x6b7c2b89] jscript!GcContext::CollectCore+79    
[0x6b7c2af4] jscript!GcContext::Collect+1b    
[0x6b7bca21] jscript!GcContext::ExhaustiveCollect+21    
[0x6b7a604a] jscript!CSession::Close+18a    
[0x6b7a32d9] jscript!COleScript::CloseInternal+13b    
[0x6b7a2d36] jscript!COleScript::Close+16    
[0x6b8a71ce] asp!CActiveScriptEngine::FinalRelease+1be 
...

Не определена точная строкакоторая вызывает проблему, последняя запись FailedRequestTrace назначает строковую переменную из атрибута объекта Application Scope xml. (CurrentStatement return attrib.text)

Аналогичный случай - исключение нарушения доступа (0xC0000005) при попытке чтения из ячейки памяти 0x00000000

[0x6b907e09] jscript!AString::CopyToBuffer+69    
[0x6b900524] jscript!AString::ConvertToBSTR+1bb74    
[0x6b8e49a7] jscript!VAR::ConvertASTRtoBSTR+13    
[0x6b8c49e8] jscript!VAR::GetValue+58    
[0x6b8e0f34] jscript!ConvertToString+58    
[0x6b922fbf] jscript!JsString+4f    
[0x6b8d92e6] jscript!NatFncObj::Call+e6 
...

С последующим - нарушение доступаисключение (0xC0000005) при попытке чтения из памяти 0x004e0049

[0x6b8e2d77] jscript!VarStack::ScavengeRoots+27    
[0x6b8e2b89] jscript!GcContext::CollectCore+79    
[0x6b8e2af4] jscript!GcContext::Collect+1b    
[0x6b8dca21] jscript!GcContext::ExhaustiveCollect+21    
[0x6b8c604a] jscript!CSession::Close+18a    
[0x6b8c32d9] jscript!COleScript::CloseInternal+13b    
[0x6b8c2d36] jscript!COleScript::Close+16    
[0x6bfb71ce] asp!CActiveScriptEngine::FinalRelease+1be
...

2 в w3wp __...__ Second_Chance_Exception_C0000005.dmp инструкция по сборке в asp! CResponseBuffer :: Write + 3a

in \? \ C: \ Windows \ System32 \ inetsrv \ asp.dll от Microsoft Corporation вызвала исключение нарушения прав доступа (0xC0000005) при попытке чтения из памяти 0x00000014 в потоке 32

[0x6f042e88] asp!CResponseBuffer::Write+3a    
[0x6f0452ea] asp!CResponse::WriteSz+4c    
[0x6f02dd3b] asp!CErrInfo::LogErrortoBrowser+ff    
[0x6f02d4c9] asp!CErrInfo::LogErrortoBrowserWrapper+d7    
[0x6f02d047] asp!CErrInfo::LogError+e8    
[0x6f02e241] asp!HandleError+116    
[0x6f02f009] asp!HandleErrorMissingFilename+df    
[0x6f04941b] asp!CActiveScriptEngine::Call+bb    
[0x6f030eff] asp!CallScriptFunctionOfEngine+4d    
[0x6f02f99f] asp!ExecuteRequest+173    
[0x6f02f828] asp!Execute+23d    
[0x6f035c6f] asp!CHitObj::ViperAsyncCallback+467    
[0x6f05df53] asp!CViperAsyncRequest::OnCall+73    
[0x6eefd325] comsvcs!CSTAActivityWork::STAActivityWorkHelper+45    
[0x77098346] combase!EnterForCallback+16e [onecore\com\combase\dcomrem\crossctx.cxx @ 2072 + 2]   onecore\com\combase\dcomrem\crossctx.cxx @ 2072 + 2 
[0x7709816d] combase!SwitchForCallback+206 [onecore\com\combase\dcomrem\crossctx.cxx @ 1694]   onecore\com\combase\dcomrem\crossctx.cxx @ 1694 
[0x7709bae4] combase!PerformCallback+bc [onecore\com\combase\dcomrem\crossctx.cxx @ 1573 + 16]   onecore\com\combase\dcomrem\crossctx.cxx @ 1573 + 16 
[0x7709b7f9] combase!CObjectContext::InternalContextCallback+119 [onecore\com\combase\dcomrem\context.cxx @ 4421 + 1a]   onecore\com\combase\dcomrem\context.cxx @ 4421 + 1a 
[0x77198e66] combase!CObjectContext::DoCallback+26 [onecore\com\combase\dcomrem\context.cxx @ 4254]   onecore\com\combase\dcomrem\context.cxx @ 4254 
[0x6eefd015] comsvcs!CSTAActivityWork::DoWork+175    
[0x6eeff0e0] comsvcs!CSTAThread::DoWork+26    
[0x6eeff599] comsvcs!CSTAThread::ProcessQueueWork+48    
[0x6eeff8dd] comsvcs!CSTAThread::WorkerLoop+13d    
[0x76577e71] msvcrt!_callthreadstartex+25    
[0x76577f31] msvcrt!_threadstartex+61    
[0x765f0419] kernel32!BaseThreadInitThunk+19    
[0x77d5662d] ntdll!__RtlUserThreadStart+2f    
[0x77d565fd] ntdll!_RtlUserThreadStart+1b
...
  • Скорее всего, происходит от записи в файл журнала

    ioo_fso = Server.CreateObject ("Scripting.FileSystemObject");... loo_file = loo_fso.OpenTextFile (ls_filename, 8, true);... try {loo_file.WriteLine ("[" + str + "]")} catch (ee) {}

  • Proces-Monitor отображает записи журнала "SHARING VIOLATION" для w3wp.exe при доступе к файлу журнала

3 Также испытал ASP 0115 сразу после создания настраиваемого компонента сервера

var pbkdf2;
try {
    pbkdf2 = Server.CreateObject("Pbkdf2");
    pbkdf2.hashPassword(ls_newpassword, 100000);
} catch (e) {
    addToLogg("Login:CreateObject failed for Pbkdf2, " + e.description);
}

из журналов FailedReqLogFiles, но еще не идентифицирован в DebugDiag

Вопросы

Я знаю, что ASP Jscript - это старая, поэтапная технология, но должно быть еще много корпоративных решений, так что, возможно, кто-то еще столкнется с этими проблемами. Я ожидал бы, что Jscript будет падать обычным способом, так что ситуация с ошибкой может быть обработана

  • Кто-то еще сталкивался с подобной ситуацией?
  • Каковы новые ограничения на код jscript?
  • Существуют ли способы обработки этих сбоев на стороне сервера перед возвратом ответа клиенту?
  • Может быть, существуют некоторые параметры среды ASP / jscript, параметры управления памятью, привилегии Windows, разрешениякоторые потенциально могут решить проблемы?

Решение

Как подсказал @Max (ниже), последние Microsoft KB исправляют проблемы с Jscript Workflow.

  • Единственный комментарий в КБ, который отражает jscript:

Устранена проблема с приложениями и драйверами принтера, использующими механизм JavaScript для Windows (jscript.dll) для обработки заданий на печать.

Так что, по-видимому, исправление в общей обработке jscript

Сводка КБ, в которых устранена проблема

  • Server 2019 1809: KB4519338
  • Сервер 2019 1903: KB4517389
  • Сервер 2016: KB4519998
  • Сервер 2012 R2: KB4520005
  • Сервер 2012: KB4520007
  • Server 2008 R2: KB4519976
  • Server 2008 (с пакетом обновления 2): KB4520002

Не требуется для удаления предыдущих обновлений KB. Обратите внимание, что предыдущий ежемесячный накопительный пакет (3 октября) больше не отображается в окне «Обновления окон» после установки нового.

Хотя мне не удалось изолировать основное «исключение первого шанса 0xC0000005» от рабочих процессов:

  • После применения базы знаний от 8 октября проблема 0xC0000005 больше не существует в ранее сбойных рабочих процессах
  • Изолированные вторые случайные исключения также не воспроизводятся, см. Случай ntdl Access Violation, случай создания объекта сервера
  • Мои изолированные образцы Regex с тестовыми данными из сбойного рабочего процесса не воспроизводили Исключение, поэтому я не могу подтвердить, что использование regex напрямую вызвало проблемы
  • Однако VBScript оказался не затронут,как указывалось @ Lee
  • Похоже, что это неприятная проблема в корзине, хотя исправление повреждения памяти создает несколько.

Ответы [ 3 ]

2 голосов
/ 03 октября 2019

Мы также столкнулись с такими же ошибками, связанными с CVE-2019-1367 и классическим ASP. Мы сузили область действия ошибок до нескольких мест, где мы использовали JScript вместо VBScript для выполнения преобразований JSON, а затем сузили его до того места, где мы использовали regex. Мы исправили ошибки, переписав функциональность, которая была в коде JScript в VBScript.

Я нашел эту статью , которая ссылается на CVE-2019-13670 с очень похожим номером и очень похожей формулировкой: Google Chrome может позволить удаленному злоумышленнику выполнить произвольный код в системе, вызванный повреждением памяти V8 в регулярном выражении. .

CVE-2019-1367 относится к Internet Explorer и обновлен C\Windows\system32\JScript.dll. Исходя из этого, я предполагаю, что движок JavaScript в IE и классический движок ASP JScript обрабатываются JScript.dll? Грубое предположение. CVE-2019-13670 специфичен для Chrome (который, я полагаю, не использует JScript.dll), но в нем упоминается regex, и мы обнаружили, что наши проблемы связаны с использованием регулярных выражений в JScript.

0 голосов
/ 10 октября 2019

, похоже, последние обновления от Microsoft исправляют проблему.

0 голосов
/ 09 октября 2019

Моя группа также испытывает эти проблемы. Вся наша устаревшая система написана на ASP с JScript. Обновление KB4522007 было установлено 2019-09-25, после чего мы заметили ошибки. Помимо ошибки, упомянутой в исходном сообщении, мы также сталкиваемся с другими ошибками:

  • Во внешнем объекте произошла ошибка (C0000005). Сценарий не может продолжить работу.
  • Возвращенная функция |.
  • Ожидаемая функция
  • Переменная использует тип автоматизации, не поддерживаемый в JScript
  • Объект неподдерживать это свойство или метод

Это все ошибки, возникающие в неизмененных файлах, и никогда не наблюдавшиеся до обновления. Ошибки являются периодическими и систематически не воспроизводимыми ...

Удаление обновленного KB4522007 привело к исчезновению ошибок.

...